• Insecure CAPTCHA (不安全的验证码)


    dvwa不能正常显示,需要在配置文件中加入谷歌的密钥:
    $_DVWA[ 'recaptcha_public_key' ] = '6LfX8tQUAAAAAOqhpvS7-b4RQ_9GVQIh48dRMGsD';
    $_DVWA[ 'recaptcha_private_key' ] = '6LfX8tQUAAAAAIR5ddYvRf3zNqM-k__Ux73oZzb_';
    验证码还是不能完整显示,google账号一直注册失败,不过还是可以正常练习本题目。
     
     
    Insecure CAPTCHA,意思是不安全的验证码,CAPTCHA是Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的图灵测试)的简称。但个人觉得,这一模块的内容叫做不安全的验证流程更妥当些,因为这块主要是验证流程出现了逻辑漏洞,谷歌的验证码表示不背这个锅。
     
    LOW
    看代码,这里修改密码是分成二个步骤的。第一步是用来判断验证码的正确性,如果正确了就再返回密码的界面,这个界面就不再需要输入验证码的,按提交就可以修改密码了。这两个部分的用 form 表单的 step 字段区分。。
    1.通过构造参数绕过验证过程的第一步
    首先输入密码,点击Change按钮,抓包:
    ps:因为没有翻墙,所以没能成功显示验证码,发送的请求包中也就没有recaptcha_challenge_field、recaptcha_response_field两个参数)
    把step的值由1修改为2,单击Forward按钮。回到DVWA页面,则显示修改完成界面。
    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页面,让受害者以为自己单击错误。
    抓包截图:
    可以看到抓到的信息是完整的,单击【Forward】则可以弹出修改成功页面。
     
    2、Medium中级别
    可以看到,Medium级别的代码在第二步验证时,参加了对参数passed_captcha的检查,如果参数值为true,则认为用户已经通过了验证码检查,然而用户依然可以通过伪造参数绕过验证,本质上来说,这与Low级别的验证没有任何区别。
     
    更改报文,绕过对参数passed_captcha的检查。
    更改密码成功:
     
    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文件中,放在攻击的服务器上,把上面的文件网址发送给受害者,受害者点击则进行密码修改。
    抓包如下:
    Forward执行,则显示修改成功页面。
     
    3、High高级别
    可以看到,服务器的验证逻辑是当$resp(指谷歌验证码返回的验证结果)是false,并且参数recaptcha_response_field不等于hidd3n_valu3(或者http包头的User-Agent参数不等于reCAPTCHA)时,就认为验证码输入错误,反之则认为验证码检查通过。
     
    知道验证逻辑后,下面是伪造绕过。由于$ resp参数我们无法控制,所以重心放在参数recaptcha_response_field,User-Agent上。
     
    初步依旧是抓包:
    更改参数recaptcha_response_field以及http包头的User-Agent:
    密码修改成功:
     
     
    Impossible
    可以看到,Impossible级别的代码增加了Anti-CSRF token 机制防御CSRF攻击,利用PDO技术防护sql注入,验证过程终于不再分成两部分了,验证码无法绕过,同时要求用户输入之前的密码,进一步加强了身份认证。
     
     
     
     
  • 相关阅读:
    EntityFramework之创建数据库及基本操作(一)
    Entity Framework Code First (八)迁移 Migrations
    [转]Tomcat启动报错:AnnotationConfigBeanDefinitionParser are only available on JDK 1.5 and higher
    [转]bootstrap table本地数据使用方法
    [转]MySQL-5.7 Update语句详解
    [转]操作MySQL数据库报出:Parameter index out of range (1 > number of parameters, which is
    [转]在MySQL中创建实现自增的序列(Sequence)的教程
    [转]MySQL如何设置自动增长序列 SEQUENCE
    [转]Mustache 使用心得总结
    [转]关于重定向RedirectAttributes的用法
  • 原文地址:https://www.cnblogs.com/zjwoo/p/12774164.html
Copyright © 2020-2023  润新知