dvwa不能正常显示,需要在配置文件中加入谷歌的密钥: $_DVWA[ 'recaptcha_public_key' ] = '6LfX8tQUAAAAAOqhpvS7-b4RQ_9GVQIh48dRMGsD'; $_DVWA[ 'recaptcha_private_key' ] = '6LfX8tQUAAAAAIR5ddYvRf3zNqM-k__Ux73oZzb_'; Insecure CAPTCHA (不安全的验证码) Safe 第1张 验证码还是不能完整显示,google账号一直注册失败,不过还是可以正常练习本题目。     Insecure CAPTCHA,意思是不安全的验证码,CAPTCHA是Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的图灵测试)的简称。但个人觉得,这一模块的内容叫做不安全的验证流程更妥当些,因为这块主要是验证流程出现了逻辑漏洞,谷歌的验证码表示不背这个锅。   LOW 看代码,这里修改密码是分成二个步骤的。第一步是用来判断验证码的正确性,如果正确了就再返回密码的界面,这个界面就不再需要输入验证码的,按提交就可以修改密码了。这两个部分的用 form 表单的 step 字段区分。。 1.通过构造参数绕过验证过程的第一步 首先输入密码,点击Change按钮,抓包: Insecure CAPTCHA (不安全的验证码) Safe 第2张 ps:因为没有翻墙,所以没能成功显示验证码,发送的请求包中也就没有recaptcha_challenge_field、recaptcha_response_field两个参数) 把step的值由1修改为2,单击Forward按钮。回到DVWA页面,则显示修改完成界面。 Insecure CAPTCHA (不安全的验证码) Safe 第3张 2.由于没有任何的防CSRF机制,我们可以轻易地构造攻击页面,页面代码如下(类似CSRF) <html> <body onload="document.getElementById('transfer').submit()"> <div> <form method="POST" id="transfer" action="http://192.168.0.104/dvwa/vulnerabilities/captcha/"> <input type="hidden" name="password_new" value="password"> <input type="hidden" name="password_conf" value="password"> <input type="hidden" name="step" value="2" <input type="hidden" name="Change" value="Change"> </form> </div> </body> </html> 把上面脚本文件放在一个钓鱼的服务器上,当受害者访问这个页面时,攻击脚本会伪造修改密码的请求发送给服务器。这个方法存在的问题是,受害者会看到修改密码成功的界面。因为修改密码成功后,服务器返回302,实现自动跳转,受害者会看到自己受到了攻击。所以,最好是设置跳转到一个bad页面,让受害者以为自己单击错误。 抓包截图: Insecure CAPTCHA (不安全的验证码) Safe 第4张 可以看到抓到的信息是完整的,单击【Forward】则可以弹出修改成功页面。 Insecure CAPTCHA (不安全的验证码) Safe 第5张   2、Medium中级别 可以看到,Medium级别的代码在第二步验证时,参加了对参数passed_captcha的检查,如果参数值为true,则认为用户已经通过了验证码检查,然而用户依然可以通过伪造参数绕过验证,本质上来说,这与Low级别的验证没有任何区别。 Insecure CAPTCHA (不安全的验证码) Safe 第6张   更改报文,绕过对参数passed_captcha的检查。 Insecure CAPTCHA (不安全的验证码) Safe 第7张 更改密码成功: Insecure CAPTCHA (不安全的验证码) Safe 第8张   2、同样可以实施CSRF攻击,攻击页面代码如下: <html> <body onload="document.getElementById('transfer').submit()"> <div> <form method="POST" id="transfer" action="http://192.168.92.129/DVWA/vulnerabilities/captcha/"> <input type="hidden" name="step" value="2"> <input type="hidden" name="password_new" value="123321"> <input type="hidden" name="password_conf" value="123321"> <input type="hidden" name="Change" value="Change"> <input type="hidden" name="passed_captcha" value="true"> </form> </div> </body> </html> 把上面代码存在一个php文件中,放在攻击的服务器上,把上面的文件网址发送给受害者,受害者点击则进行密码修改。 抓包如下: Insecure CAPTCHA (不安全的验证码) Safe 第9张 Forward执行,则显示修改成功页面。   3、High高级别 可以看到,服务器的验证逻辑是当$resp(指谷歌验证码返回的验证结果)是false,并且参数recaptcha_response_field不等于hidd3n_valu3(或者http包头的User-Agent参数不等于reCAPTCHA)时,就认为验证码输入错误,反之则认为验证码检查通过。   知道验证逻辑后,下面是伪造绕过。由于$ resp参数我们无法控制,所以重心放在参数recaptcha_response_field,User-Agent上。   初步依旧是抓包: Insecure CAPTCHA (不安全的验证码) Safe 第10张 更改参数recaptcha_response_field以及http包头的User-Agent: Insecure CAPTCHA (不安全的验证码) Safe 第11张 密码修改成功:     Impossible 可以看到,Impossible级别的代码增加了Anti-CSRF token 机制防御CSRF攻击,利用PDO技术防护sql注入,验证过程终于不再分成两部分了,验证码无法绕过,同时要求用户输入之前的密码,进一步加强了身份认证。     本文选自https://www.freebuf.com/articles/web/119692.htmlhttps://zhuanlan.zhihu.com/p/105781916    
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄