DVWA靶场 – Insecure CAPTCHA

blog 34
DVWA靶场 – Insecure CAPTCHA

前言

刚进入到靶场的时候,可能会报如下错误,这是由于我们没有配置reCAPTCHA的key

DVWA靶场 – Insecure CAPTCHA

我们打开报错信息中的配置文件,找到如下配置,将其修改为xxx即可。这样可以解决报错问题,但是验证码会加载不出来,其实这里没有验证码也可以做。本关叫做不安全的验证码。其实跟创建验证码的服务器无关,而是在处理验证码的逻辑出现了问题。因此这里不需要验证码也可以做(我这里安装报错提示注册了key但是还是加载不出来,用了网上的key也是如此)。

DVWA靶场 – Insecure CAPTCHA

修改完配置文件之后,看到如下场景即可,只是验证码加载不出来,不妨碍我们做题。

DVWA靶场 – Insecure CAPTCHA

标题简介

Insecure CAPTCHA,意思是不安全的验证码(验证码流程),CAPTCHA是Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的图灵测试)的简称,主要用于区分是人在操作还是计算机在操作。一般验证码在登录界面、投票界面、评论留言界面出现较多。为了就是防止计算机代替人工去操作某些事件。

low级别

直接审计代码:

DVWA靶场 – Insecure CAPTCHA

这里主要判断了step是否为1,并且接收了我们的新密码。之后又检查了我们的第三方的验证码。而step是在哪里传入的呢?

DVWA靶场 – Insecure CAPTCHA

该参数随着我们提交的密码一并提交,只不过这个input的属性为hidden。是隐藏着的。

接着我们再来看后面的代码:

DVWA靶场 – Insecure CAPTCHA

接着判断验证码是否正确,如果正确的话,会判断我们输入新密码和确认的密码是否保持一致,如果保持一致。这会再向页面输出一个from表单,此时inputvalue值就为我们输入的密码。同时step也就变成了2。

DVWA靶场 – Insecure CAPTCHA

我们继续看,这里又进了判断,判断step的值为2,也就是用户是否走到了第二步,如果走到了,则接受用户输入的新密码和确认的密码。并且判断了他们是否一致。接着使用mysqli_real_escape_string()对特殊字符进行了转义。防止sql注入的产生。该函数具体的转义字符为如下:

mysqli_real_escape_string()转义受影响的字符为:\x00 \n \r \'、 "、\x1a,会在其前面自动加上\

之后将其写入到数据库,可以看到这里只要我们的step为2,就可以直接进行更改密码了。即是没有前面的操作,我们也可以进行更改密码。

DVWA靶场 – Insecure CAPTCHA

这里直接将step的值修改为2,之后回车进行提交即可。或者使用bp进行抓包更改,也是可以的。

DVWA靶场 – Insecure CAPTCHA

密码直接修改成功,忽略了验证码的存在。

medium 级别

这一级别跟上一级别基本一致,只不过在上一级别的基础上,在进行第二步的时候,多提交了一个passed_captcha参数值为ture

DVWA靶场 – Insecure CAPTCHA

那么我们通过burpsuite进行抓包即可,将step处修改为2,再添加一个参数passed_captcha值为true即可。

DVWA靶场 – Insecure CAPTCHA

之后点击Forward即可,再次回到页面当中,即提示password changed。

DVWA靶场 – Insecure CAPTCHA

我们进入到暴力破解模块或者直接注销进行登录尝试,确认密码已经被修改:

DVWA靶场 – Insecure CAPTCHA

可以发现,密码已经成功被修改。

high级别

DVWA靶场 – Insecure CAPTCHA

这些代码跟前面的大致相同,只不过剔除了step,继续往下看

DVWA靶场 – Insecure CAPTCHA

发现这里有两个条件,只要满足一个就可以判定通过了验证码认证,一个Google验证返回的内容另外一个是对post请求发送的参数g-recaptcha-response的值进行了比对,以及对user-agent进行了比对。

那么google验证返回的内容,我们无法控制,但是通过post接收的参数g-recaptcha-response对应的值以及user-agent对应的值,我们是可控的。

因此我们通过bp进行抓包,更该数据包内容即可:

DVWA靶场 – Insecure CAPTCHA

之后点击Forward即可。

impossible 级别

DVWA靶场 – Insecure CAPTCHA

这里对token进行了检查,防止了CSRF攻击,同时对我们输入的新密码和确认的密码以及当前的密码进行了转义防止了sql注入。之后对我们的密码进行了md5加密。

DVWA靶场 – Insecure CAPTCHA

这里对验证码的正确型进行了判断,并且对我们输入的当前密码与数据库中的密码进行了比对,确保旧密码正确。之后又对我们的新密码和确认的密码机进行了比对。之后符合要去的才会被PDO对象执行update语句,从而更改密码。

这样就有效的防止了CSRF以及sql注入和不安全的验证流程。

分享