转载文章:新手指南:DVWA-1.9全级别教程之Insecure CAPTCHA
原理
Insecure CAPTCHA,意思是不安全的验证码,指在验证的流程中出现了逻辑漏洞,导致验证码无效,从而进行攻击
这里我没有CAPTCHA,构造不了payload,就直接放longhand神写的了(讨厌的goole,哼)
分析
Low
先看代码,进行审计,找出可绕过验证码原因
这里代码逻辑分为两步:
第一步检查用户输入的验证码,验证通过后,服务器返回表单
第二步客户端提交post请求,服务器完成更改密码的操作
但是,这其中存在明显的逻辑漏洞,服务器仅仅通过检查Change、step 参数来判断用户是否已经输入了正确的验证码
参数绕过
利用step参数等于2,直接跳到修改密码页面,进行密码修改
CSRF
当受害者访问这个页面时,攻击脚本会伪造改密请求发送给服务器
美中不足的是,受害者会看到更改密码成功的界面(这是因为修改密码成功后,服务器会返回302,实现自动跳转),从而意识到自己遭到了攻击
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验证,可以伪造绕过
参数绕过
抓到的包
更改之后的包
更改密码成功
CSRF
当受害者访问这个页面时,攻击脚本会伪造改密请求发送给服务器
不过依然会跳转到更改密码成功的界面
High
先看代码,进行审计,找出可绕过验证码原因
最关键的就是绕过IF语句,进入修改密码页面就ok了
注意:这里用的是 || ,或语句
所以只用满足$resp的值或者参数recaptcha_reponse和USER-Agent的值其中之一**,就可以绕过IF语句
由于$resp**参数我们无法控制
所以重心放在参数recaptcha_response_field、User-Agent上
参数绕过
第一步依旧是抓包
更改参数recaptcha_response_field以及http包头的User-Agent
密码修改成功
Impossible
先看代码,进行审计,找出不可绕过验证码原因
一:增加了Anti-CSRF token **机制 防御CSRF**攻击
二:要求用户输入之前的密码,进一步加强了身份认证
三:利用了PDO语句,防御了注入攻击
四:验证过程不再分成两部分了,验证码无法绕过