概述
- 主要是验证流程出现了逻辑漏洞,比如常见的多个页面的流程流转
- 注意需要自己开个梯子才能验证此漏洞
安全等级为Low
分析源码
这里分着两个阶段:
step == 1 验证用户身份,服务器会用私钥对用户进行身份验证,如果验证成功了才能进行修改密码
step == 2 如果如果两次输入的密码一致,就进行修改
开始攻击
输入密码点击change
fiddler抓包发现,step=1时需要匹配验证码,所以验证失败,无法修改密码。
这样的话,我们抓包修改step,直接跳过第一阶段 既可以实现修改密码,在fillder底部输入:bpu http://xxxx.xx.xx.xx/DVWA-2.0.1/vulnerabilities/captcha/
拦截此请求
把setp=1改为setp=2
点击run to completion按钮
密码修改成功
安全等级为medium
源码分析
我们发现medium级别中的第二阶段多了一步验证passed_captcha的步骤
开始攻击
那我们就抓包修改step=2 ,新增passed_captcha=true,点Run to Completion
修改密码成功
安全等级为High
这里没有在分阶段吗了,都合到一起,说明我们之前的方法不适用了。
分析代码我们可以看出服务器的验证逻辑是当$resp(这里是指谷歌返回的验证结果)是false,这里的结果无法改变,
只要数g-recaptcha-response等于hidd3n_valu3并且http包头的User-Agent参数等于reCAPTCHA时,就可以绕过验证这块了
开始攻击
fiddler抓包修改,头部修User-Agent:reCAPTCHA,请求参数新增g-recaptcha-response=hidd3n_valu3,点击run to completion
- 修改密码成功
安全等级为impossible
分析源码
Impossible级别的代码增加了Anti-CSRF token 机制防御CSRF攻击,利用PDO技术防护sql注入,验证过程终于不再分成两部分了,验证码无法绕过,同时要求用户输入之前的密码,进一步加强了身份认证。
本文主要参考这里的步骤