转载文章:新手指南:DVWA-1.9全级别教程之Insecure CAPTCHA

原理

Insecure CAPTCHA,意思是不安全的验证码,指在验证的流程中出现了逻辑漏洞,导致验证码无效,从而进行攻击

image.png

这里我没有CAPTCHA,构造不了payload,就直接放longhand神写的了(讨厌的goole,哼)

分析

Low

先看代码,进行审计,找出可绕过验证码原因
image.png
image.png

这里代码逻辑分为两步:
第一步检查用户输入的验证码,验证通过后,服务器返回表单

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

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

参数绕过

利用step参数等于2,直接跳到修改密码页面,进行密码修改
image.png

CSRF

image.png

当受害者访问这个页面时,攻击脚本会伪造改密请求发送给服务器
image.png

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

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是返回的错误代码

Medium

先看代码,进行审计,找出可绕过验证码原因

这里相比于Low,第二步多了个passed_captcha验证,可以伪造绕过
image.png

参数绕过

抓到的包
image.png

更改之后的包
image.png

更改密码成功
image.png

CSRF

image.png

当受害者访问这个页面时,攻击脚本会伪造改密请求发送给服务器
image.png

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

High

先看代码,进行审计,找出可绕过验证码原因

最关键的就是绕过IF语句,进入修改密码页面就ok了

注意:这里用的是 || ,或语句

所以只用满足$resp的值
或者参数recaptcha_reponse和USER-Agent的值其中之一**,就可以绕过IF语句

由于$resp**参数我们无法控制
所以重心放在参数recaptcha_response_field、User-Agent上

image.png

参数绕过

第一步依旧是抓包
image.png

更改参数recaptcha_response_field以及http包头的User-Agent
image.png
密码修改成功
image.png

Impossible

先看代码,进行审计,找出不可绕过验证码原因

一:增加了Anti-CSRF token **机制 防御CSRF**攻击

二:要求用户输入之前的密码,进一步加强了身份认证

三:利用了PDO语句防御了注入攻击

四:验证过程不再分成两部分了验证码无法绕过
image.png
image.png