概述
场景展示:
请求分析:
POST /pikachu/vul/burteforce/bf_client.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 49
Connection: close
Referer: http://127.0.0.1/pikachu/vul/burteforce/bf_client.php
Cookie: PHPSESSID=pdlm34mt5smvnjc3jca054otl0
Upgrade-Insecure-Requests: 1
username=ad&password=add&vcode=1WTL0&submit=Login
检查请求页面的源码:右击——查看页面源码
即,在前端用javascript实现的验证码。
将请求发送到Burpsuite 的 repeater模块:
repeater模块能复现请求,修改vcode后发送请求:
分析response信息:
由上图发现,在没有输入验证码的时候,直接返回的是"username or password is not exists~",说明提交的验证码并没有在后台做验证!
讲该请求发送到intruder模块,因为验证码并未进行校验,所以可以直接跳过验证码进行爆破,方法和2.1节一样,爆破结果如下:
场景展示:用正确的用户名和密码,错误的验证码登陆
然后用正确的验证码和错误的用户名密码登陆,进行请求分析:
POST /pikachu/vul/burteforce/bf_server.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 53
Connection: close
Referer: http://127.0.0.1/pikachu/vul/burteforce/bf_server.php
Cookie: PHPSESSID=pdlm34mt5smvnjc3jca054otl0
Upgrade-Insecure-Requests: 1
username=1111&password=2222&vcode=tkcgz7&submit=Login
将请求发送到repeater模块;
不提交验证码或输入错误验证码,看返回结果:
由此说明,后台对验证码做了校验;
检查验证码会不会过期,生成一个新的验证码,进行多次请求,看返回结果:
用同一个验证码请求多次,返回结果均为上图信息,说明验证码没有做过期处理,即验证码可以重复利用。
再次用2.1节中的方法进行破解,便可以爆破成功!
未对验证码设置过期时间!
一个简单的token示例:
一般做法:
但是, 由于其token值输出在前端源码中,容易被获取,因此也就失去了防暴的意义。
一般Token在防止CSRF上会有比较好的功效。
(adsbygoogle = window.adsbygoogle || []).push({});