DVWA 之insecure captcha

Insecure Captcha:不安全的验证码机制,就是对前台获得的验证码在后台验证出了问题时。即在验证流程时,逻辑出现了问题。

页面一直在加载中,左下角显示连接谷歌。那应该是验证码需要向谷歌请求,加载完成果然,验证码没加载出来(需要科学上网),F12看下页面源码,<script src="https://www.google.com/recaptcha/api.js">,向谷歌发起js请求,返回验证码。然后服务器向谷歌去验证输入的验证码的正确。并且,注意到有一个隐藏的input,名字是step,值为“1”。

low:直接提交,因为没输验证码,显示The CAPTCHA was incorrect. Please try again.,用burpsuite抓包,试下将step改为“2”,返回修改密码成功。

查看源码:验证流程分为2步,第一步验证码检测正确后再提交一个隐藏的表单,将step的值提交为2。第二步检测setp的值是否为2,然后改密。我们直接提交step的值为2,便越过了第一步操作。

medium:按照low的操作提交,显示You have not passed the CAPTCHA,应该是下面又做了某个参数验证。看下源码,需要验证passed_captcha这个参数的的值,它是在第一步的时候提交隐藏的表单的时候,提交了一个passed_captcha,值为true。接下来直接抓包,依旧step设为2并在&Change=Change参数后面新增一个passed_captcha=true,即&Change=Change&passed_captcha=true。返回修改密码成功。

high:按照low和medium提交,都显示The CAPTCHA was incorrect. Please try again.F12看下页面源码有提示

**DEV NOTE** Response: 'hidd3n_valu3' && User-Agent: 'reCAPTCHA' **/DEV NOTE**

应该是检测了从谷歌服务器返回的一个值Response和请求头User-Agent,并且还新增一个token预防了csrf,low和medium可以csrf攻击。查看源码,重点在这。

$resp || ($_POST[ 'g-recaptcha-response' ] == 'hidd3n_valu3'&& $_SERVER[ 'HTTP_USER_AGENT' ] == 'reCAPTCHA')

resp参数是谷歌返回的验证结果,只要resp为真或者后面那两个参数等于正确的值都算通过验证码,resp这个我们无法预测,但后面那两个参数是可控的。抓包,在&Change=Change参数后面新增一个g-recaptcha-response=hidd3n_valu3,即&Change=Change&g-recaptcha-response=hidd3n_valu3。并将请求头的User-Agent的值改为reCAPTCHA。返回修改密码成功。

推荐阅读更多精彩内容