背景:一个没有验证码的登陆页面,需要尝试进行弱密码爆破
GET 方式请求 /gadmin/user 返回登陆表单页面,登陆表单页面中有一次性的csrf_token值
POST方式请求/gadmin/user是进行登陆表单提交
实际页面见下图(ip地址我会进行篡改和隐藏,无视ip的变化即可)
提交表单时,正常返回状态码200;如果csrf_token非法,则会返回404状态码(见下图)
(注意上图的response,如果response页面是404,那么就不能在response中提取csrf_token,因为如果出现一次404,那么密码爆破流程就会出现问题(404页面没有csrf_token值),所以最佳的方法是POST提交表单前,先用get方式请求登陆页并从中提取csrf_token,因为get方式请求的页面基本不会出错)
---------------------------开始绕过csrf_token
原理: 让burpsuite在POST提交表单到/gadmin/user前,先GET方式访问/gadmin/user页面,提取页面最新的csrf_token值,保存到csrf_token变量中,再将csrf_token变量的值替换掉POST表达中的csrf_token值,完成一次合法的表单提交。循环执行。
-------------------------实际操作
1. 进入Macros, 开始创建宏
2. 选择需要获取数据的链接
我这里要在GET页面中获取新的csrf_token
3. 标定需要的数据值,并设置一个变量名
变量名要跟POST提交表单中的csrf_token参数名一致,我这里是csrf_token
4. 使用我们的宏
4.1 设置规则动作 Rule Actions
4.2 设置作用域 Scope
我的设置:只在Intruder和Repeater中有效
因为我设置了在Repeater中有效,所以我要在Repeater中测试(下图)
5. 执行Intruder爆破
注意要设置一个线程,否则会导致csrf_token不是最新
可以发现,response status 都是200 OK,每个请求的csrf_token也都是不一样的。