利用漏洞中验证码绕过的小技巧

本文主要讲解在漏洞挖掘过程中绕过验证码的一些小技巧,偏向于实战。验证码可被绕过本身就是一个漏洞,但很多厂家并不是很重视这个问题,给的奖励也很少,因此我更喜欢进一步利用这个漏洞来获取一些不开放注册的系统的帐号密码,进入系统,挖掘更多严重的漏洞。

作者:野火研习社·fakl


本文主要讲解在漏洞挖掘过程中绕过验证码的一些小技巧,偏向于实战。验证码可被绕过本身就是一个漏洞,但很多厂家并不是很重视这个问题,给的奖励也很少,因此我更喜欢进一步利用这个漏洞来获取一些不开放注册的系统的帐号密码,进入系统,挖掘更多严重的漏洞。

1. 验证码不刷新

导致验证码不刷新的原因是:登录密码错误之后,session中的值没有更新,验证码不变。验证码不刷新通常有以下两种情况:无条件不刷新、有条件不刷新。

1.1无条件不刷新

无条件不刷新是指在某一时间段内,无论登录失败多少次,只要不刷新页面,就可以无限次的使用同一个验证码来对一个或多个用户帐号进行暴力猜解。

1.2有条件不刷新

有条件不刷新多见于如下情况:登录失败之后,系统会打开一个新页面或者弹出一个新的警告窗口,提示用户登录失败,点击确定后返回登录界面且验证码刷新。这种情况下,只要我们不关闭新窗口或弹窗,配合使用Burpsuite的intruder模块就可以进行暴力破解了。

2.验证码前端可获取

这种情况在早期的一些网站中比较常见,主要是因为程序员在写代码的时候安全意识不足导致的。验证码通常会被他们隐藏在网站的源码中或者高级一点的隐藏在请求的Cookie中,但这两种情况都可以被攻击者轻松绕过。

2.1验证码隐藏在源码中

验证这种情况很简单,我们只需要记住验证码,然后右键打开网站源代码,Ctrl+F搜索,输入刚才的验证码,如果可以成功匹配到,那恭喜你,接下来就可以写工具,提取源码中的验证码并将其放入每次请求的报文中,来进行帐号破解,这里推荐使用python。

2.2验证码隐藏在Cookie中

这种情况,我们可以在提交登录的时候抓包,然后分析一下包中的Cookie字段,看看其中有没有相匹配的验证码,或者是经过了一些简单加密后的验证码。

3. 验证码空值绕过

验证码空值绕过,是在日常的渗透测试中很容易被我们忽略的一点,实际应用中我们可以通过直接删除验证码参数或者Cookie中的一些值来绕过判断,进行暴力破解。

4. 验证码易识别

在平常的漏洞挖掘过程中,如果我们发现登录的验证码非常简单且易于识别,那我们就可以尝试使用自动化工具来进行登录破解了,如PKAV的HTTP Fuzzer。

5. 存在无验证码页面

经过测试,如果我们发现网站验证码自身并不存在缺陷,那我们接下来就可以尝试寻找一些其他的登录页面或接口来尝试暴力破解。

5.1隐藏的页面

这种页面通常是留给测试人员使用的,或者是一些忘记删除的老界面,利用的前提是该界面依旧可用,一般情况下,我们可以通过扫描器来发现这种页面。

5.2 微信公众号、APP登录页面

很多网站的web登录页面已经做的相当完善了,但是却在微信公众后的绑定接口或者是APP的登录界面上面栽了跟头,在渗透测试的过程中,一定不要忘了对公众号和APP的测试。

6. 其他绕过方法

6.1万能验证码

渗透测试的过程中,有时候会出现这种情况,系统存在一个万能验证码,如000000,只要输入万能验证码,就可以无视验证码进行暴力破解。

6.2验证码无效

这种情况下,无论我们输入什么数据,验证码都会判断通过,验证码形同虚设,这种情况我只遇到过一次。

6.3验证码数量有限

多见于计算类型的验证码,如1+8=?,这种类型的验证码严格意义上来说不能叫做验证码,多刷新几次验证码,我们可能会发现系统中的算数题目只有那么几道,这种情况下只要将验证码全部下载下来,生成一个md5库,然后将前端生成的验证码与本地文件进行对比即可。

本文内容为作者原创 转载请注明作者

2

发表评论

已有 1 条评论

取消
Loading...

填写个人信息

姓名
电话
邮箱
公司
行业
职位
css.php