前言
因为之前对验证码验证逻辑错误,一直很好奇怎么产生的,巧了,这次的国赛,遇到了这方面的题。
正文
题目考点
- php弱比较
- 验证码验证逻辑错误
- 弱口令爆破
题目分析
购买彩票,有一定概率获取金币
彩票购买页面如下:
1 |
|
漏洞代码:
1 | if($same_counter == 2){ |
这里采用==
符号,利用true==任何数字绕过
所以只需要post:{"numbers":[true,true,true,true,true,true]}
来到管理员登录页面:
发现需要有验证码,虽然有hint:密码是5位数字。
接着填写正确验证码,利用burp抓包,repeater,go
然后修改密码,再次go
发现验证码可以重复使用。
那么直接利用burp爆破密码。
因为赛区最后放了源码,所以正好从代码层面学习一波。
下面看看验证码部分的验证逻辑,哪里出现了问题。
在login.html
页面
填写账号、密码、验证码后,页面会跳转到login.php
。
并且发现在当login.html
页面刷新或者点击验证码图片,验证码会重新从verifycode.php
加载。
继续跟进verifycode.php
页面。
验证码截取time()
函数生成后四位数字。
然后存入session文件中
。
再看看login.php
页面:
首先整个页面没有涉及访问verifycode.php
页面,也就是说,存在session文件中的验证码$_SESSION['img_number']
没有改变。当然正常访问的话,密码错误,会回到login.html
页面,验证码也刷新了,但是利用burp抓包爆破密码的话,并不会重新跳转到login.html
页面。
可以在爆破的时候,刷新浏览器器上的login.html
页面,然后看看爆破的数据包也立即出现验证码错误。
解题流程
购买彩票 ,修改数据
重复几次,购买大宝剑,获取后台地址。然后爆破弱密码。
得到密码
最后
加油……..