使用Burp Suite 两种方式绕过 CSRF_TOKEN
第一种绕过姿势(csrf_token存在于当前页面):
按照国际惯例
将请求发送到Intruder
,然后在Position
中设置变量。
我这里模拟一下,各位看官就凑合看吧,因为有csrf_token
,那么变量数量
肯定大于1
,Attack type
就需要更改了,因为Sniper
只支持单个变量
,我们设置成Pitchfork
。
我还设置了3个变量
,前面2个变量如何设置我想大家都懂,那么csrf_token
如何实时获取呢?
注意在Options
中需要将线程改成1
,因为csrf_token
的原因我们无法多线程并发,因为如果多线程并发,获取的token和服务器中对应的token就会混乱,导致你本次请求token失效。
上图中可以看见Grep-Extract
,我们点击Add
进行添加。
此时我们可以看见当前页面
的Response
:header
和html内容
,我们找到csrf_token
的元素,注意我这里是模拟的,所以我随便选一个。
双击就会自动帮我们填写前缀
和后缀
,当然我们可以手动更改
,设置完成后,点击OK
。
第一个和第二个变量设置我跳过了,我们看第三个变量如何设置,看图:
此时,我们开始攻击
就会在每次请求前,先访问一遍当前页面获取CSRF_TOKEN
,然后将它替换到变量3
的位置。
第二种绕过姿势(csrf_token不存在于当前页面):
这种方式也可以被利用到SQLMap
绕过CSRF_TOKEN
中,直接使用代理连接Burp
即可。
分两步:
- 设置宏
- 添加影响规则
第一步
切换到Project options
,找到Macros
点击Add
。
选择csrf_token
存在的request
,点击ok。
继续点击Configure item
。
然后点击Add。
和第一种方式一样的配置方法,Parameter name
起个名字,要和攻击页面的csrf_token变量名相同
(因为我懒得在讲rules如何自定义变量名了,所以这里起同名即可),看图,因为我这里是演示而已,随便选了一段:
选择刚添加上的,点击OK.
给宏起个名字,点OK
然后我们应该能看见刚添加的宏
第二步
添加Session Handling Rules
由于懒得设置作用域,我这里选择了全部URLs,如果是想让代理到Burp的请求
都使用这个规则,在Tools Scope
勾选Proxy
。
在Intruder
加入我们刚设置的变量,不用写值
开始攻击,就会自动读取csrftoken
了