2021-04-01,Insecure CAPTCHA
作者:互联网
不安全的验证码(验证流程)
在验证的过程中,出现的逻辑漏洞
CAPTCHA是神魔
Completely Automated Public Turing Test to Tell Computers and Humans Apart
全自动区分计算机和人类的图灵测试
low
根据源码中的注释可以很容易看懂他在干啥
1.检查用户输入的验证码,POST提交,正确之后显示表单
2.用户输入完表单之后,再用POST提交
但是看这里
if( isset( $_POST[ 'Change' ] ) && ( $_POST[ 'step' ] == '1' ) ) {
if( isset( $_POST[ 'Change' ] ) && ( $_POST[ 'step' ] == '2' ) ) {
它仅仅是根据Change和step参数来判断步骤
通过抓包修改step=2可以直接绕过第一个步骤
还有一个思路,就是CSRF的攻击页面
medium
在第二个步骤里,添加了一个参数passed_captcha
if( !$_POST[ 'passed_captcha' ] ) {
$html .= "<pre><br />You have not passed the CAPTCHA.</pre>";
$hide_form = false;
return;
}
抓包之后添加passed_captcha=true,step改为2,和low一样,没啥区别
high
// Check CAPTCHA from 3rd party
$resp = recaptcha_check_answer(
$_DVWA[ 'recaptcha_private_key' ],
$_POST['g-recaptcha-response']
);
if (
$resp ||
(
$_POST[ 'g-recaptcha-response' ] == 'hidd3n_valu3'
&& $_SERVER[ 'HTTP_USER_AGENT' ] == 'reCAPTCHA'
)
){
新加入了一个逻辑,当$resp为false,而且
g-recaptcha-response 不是 hidd3n_valu3 或 HTTP_USER_AGENT 不是 reCAPTCHA
时,验证失败
我不知道为啥这里用了“||”
也就是说我们只要满足其中一个就可以
很明显,$resp是谷歌返回给服务器的验证结果,我们无法控制,只能操作下面的两个
抓包,更改参数recaptcha_response_field以及http包头的User-Agent和它一样即可
impossible
if( !$resp ) {
// What happens when the CAPTCHA was entered incorrectly
$html .= "<pre><br />The CAPTCHA was incorrect. Please try again.</pre>";
$hide_form = false;
}
else {
判断验证的代码都在else里,也就是说,没有谷歌返回的验证结果,什么都白扯
终于在最后,两个步骤合成了一个步骤
此外,还加了一个password_current要求用户输入之前的密码
随便想想
也许前几天接触的漏洞比较少,一般靶场练完就完事了
但是吧,如果多想想,比如之前那一套文件上传+包含的组合,也不戳
CSRF能不能用到这里来,获取了token之后,用python发送修改密码的请求,可能impossible不太行
如何把这个利用到短信轰炸漏洞中?
在挖洞的时候怎么发现逻辑漏洞?
比如抓包时看看参数的值是0,1,2这种,再怎么去向下配合?
如果有源码泄露岂不是更好找出来。
如果high难度,medium难度看不见源码怎么办?
可以先自己试一下,打个验证码进入part2
(呜呜呜没法接收验证码)
记得有次学长讲SQL时写了个C++判断密码的程序
当时他用int,问我输入a会发生什么
我当时脑子一抽回答了个密码错误,没注意定义类型(和当时在学python也有点关系)
有时候即便你会,你也会错,
唯一能保证的是,不再犯类似的错误,Web里不会一个就记下来一个
就像是不断填充自己的“字典”一样
that’s end
标签:resp,01,Insecure,response,CAPTCHA,step,POST,recaptcha 来源: https://blog.csdn.net/m0_51792282/article/details/115365445