DVWA---全级别Insecure CAPTCHA
Insecure CAPTCHA
CAPTCHA是Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的图灵测试)的简称。
但个人觉得,这一模块的内容叫做不安全的验证流程更妥当些,因为这块主要是验证流程出现了逻辑漏洞。
打开此关卡时,出现报错:

出现该问题是因为使用reCAPTCHA没有申请密钥,因此需要手动填入密钥,打开提示的配置文件,分别输入如下代码保存后,刷新关卡。
6LdK7xITAAzzAAJQTfL7fu6I-0aPl8KHHieAT_yJg
6LdK7xITAzzAAL_uw9YXVUOPoIHPZLfw2K1n5NVQ

成功后界面:

验证码需要申请,我是用内网搭的环境,没有申请所以这里不显示,但这并不影响我们操作。
reCAPTCHA验证流程:
这一模块的验证码使用的是Google提供reCAPTCHA服务,下图是验证的具体流程。

服务器通过调用recaptcha_check_answer函数检查用户输入的正确性。
recaptcha_check_answer($privkey,$remoteip, $challenge,$response)
$privkey是服务器申请的private key。
$remoteip是用户的ip。
$challenge 是recaptcha_challenge_field 字段的值,来自前端页面。
$response是 recaptcha_response_field 字段的值。
函数返回ReCaptchaResponse class的实例,ReCaptchaResponse 类有2个属性 :
$is_valid是布尔型的,表示校验是否有效。
$error是返回的错误代码。
验证码是无法被修改注入的,但我们可以绕过验证码。
Low:
首先查看服务器端核心代码:


服务器将改密操作分成了两步:
第一步检查用户输入的验证码,验证通过后,服务器返回表。
第二步客户端提交post请求,服务器完成更改密码的操作。
服务器仅仅通过检查Change、step 参数来判断用户是否已经输入了正确的验证码,所以存在明显的逻辑漏洞。
漏洞利用:
1.通过构造参数绕过验证过程的第一步
首先输入密码,点击Change按钮,抓包:

因为没有FQ,所以没能成功显示验证码,发送的请求包中也就没有recaptcha_challenge_field、recaptcha_response_field两个参数。
更改step参数绕过验证码:

修改密码成功:

2.由于没有任何的防CSRF机制,可以地构造攻击页面。
当受害者访问这个页面时,攻击脚本会伪造改密请求发送给服务器。
但受害者会看到更改密码成功的界面从而意识到自己遭到了攻击。
Medium:
首先查看服务器端核心代码:

Medium级别的代码在第二步验证时,增加了对参数passed_captcha的检查,如果参数值为true,则认为用户已经通过了验证码检查,然而用户依然可以通过伪造参数绕过验证,本质上来说,这与Low级别的验证没有任何区别。
漏洞利用:
1.可以通过抓包,更改step参数,增加passed_captcha参数,绕过验证码。
抓到的包:

更改之后的包:

更改密码成功:

2.依然可以实施CSRF攻击,当受害者访问这个页面时,攻击脚本会伪造改密请求发送给服务器,依然会跳转到更改密码成功的界面。
High:
首先查看服务器端核心代码:

服务器的验证逻辑是当$resp(这里是指谷歌返回的验证结果)是false,或者参数g-recaptcha-response不等于hidd3n_valu3,并且http包头的User-Agent参数不等于reCAPTCHA时,就认为验证码输入错误,反之则认为已经通过了验证码的检查。
漏洞利用:
由于$resp参数我们无法控制,所以修改参数g-recaptcha-response和User-Agent。
抓到的包:

更改之后的包:

更改密码成功:

Impossible:
首先查看服务器端核心代码:

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


浙公网安备 33010602011771号