反CSRF爆破的三种姿势

- 声明 -

出品|先知社区(ID: VVeaker)
以下内容,来自先知社区的VVeaker作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山攻防实验室以及文章作者不承担任何责任。

姿势1:CSRF Token Tracker

CSRF Token Tracker是个插件,可以在BApp Store下载安装

图片这种方式可以说是最简单的,但是不适用姿势2和姿势3中的案例,现有一个请求参数是user_token
图片只需要在插件中添加
图片

注意这里有个坑(搞了好久)

比如你想在repeater模块测试一下重新发送请求会不会修改密码

图片

发现返回的结果仍然是302,这里是需要有一个有效的,没有使用过的user_token去请求的!然后再去重放请求包就都会自动更新token了

总结一句就是你第一次用有效的token重放请求包就永远有效(自动更新token了),你第一次用无效的token重放请求包就永远无效

姿势2:定义宏

在这个案例中使用CSRF Token Tracker无法成功自动更新token

图片

图片

开始定义宏

图片

图片

图片

图片

图片

一路OK回到这里

图片

图片

图片

不懂就选择1,在所有请求前都运行宏

图片

来到repeater模块重新发送请求就不会说非法的csrftoken

图片

来看日志发生了什么

图片

我们使用repeater重放了登录的请求,也就是图中第71个请求

宏帮我们自动进行了了第70个请求获取了新的token让第71个带着新的token去登录

姿势3:宏+Extractor

在这个案例中前两种姿势均无效
下载安装插件

图片

先看下两个请求包
第一个请求包就是获取token的

图片

第二个就是带着token去访问

图片

看过这两个请求包应该就明白了,这次token是在请求头中,而定义宏的时候会让你选择更新token的地方

这个地方却没有更新请求头的功能,所以姿势2在这里就失效了

图片

首先定义宏获取token,这个宏只需要要确保在请求2之前会执行请求1,相比于姿势2的步骤简单一点

图片

图片

图片

到这里宏就配置好了,在repeater重放请求2然后再logger+=里面查看
确保每次都会在请求2前自动执行请求1就是正常的

图片

然后配置插件Extractor
把两个请求包都发送到Extractor

图片

图片

图片

此时回到repeater模块重放发现token就有效了

图片

再次回到logger++看发生了什么?看到第87个请求获取的token值为

407667d008b147199d174681a655aea0

图片

第88个请求包的accessToken值也是

407667d008b147199d174681a655aea0

图片

总结一下姿势3的思路:
宏负责在请求2前发送请求1
Extractor插件负责匹配和替换token

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSRF(Cross-Site Request Forgery)是一种常见的网络安全漏洞,攻击者利用用户的身份发起恶意请求。为了防止CSRF攻击,常常需要在请求中使用CSRF-Token来验证请求的合法性。在Python中,可以通过以下几种方式获取并使用CSRF-Token来进行防护: 方法一: 使用requests库发送POST请求获取CSRF-Token,并将其作为请求参数发送。具体代码如下所示: ```python import requests import json def get_csrf_token(): headers = {} # 请根据需要设置请求头 get_token_url = "https://zsb.nwpu.edu.cn/f/ajax_get_csrfToken" response = requests.post(get_token_url, headers=headers) csrf_token = json.loads(response.text)['data'] return csrf_token ``` 方法二: 使用requests库创建Session对象,先请求登录页面获取CSRF-Token,然后使用获取到的CSRF-Token登录并进行其他操作。具体代码如下所示: ```python import requests import re def login_with_csrf_token(): login_url = 'http://example.com/login' session = requests.Session() # 先请求登录页面获取CSRF-Token login_page = session.get(login_url).text csrf_token = re.findall('csrf_token=(.*?)&', login_page)[0] # 使用获取到的CSRF-Token登录 data = { 'username': 'admin', 'password': '123456', 'csrf_token': csrf_token } login_result = session.post(login_url, data=data) # 在同一个Session下进行其他操作 data = { 'param1': 'value1', 'param2': 'value2', 'csrf_token': csrf_token } result = session.post('http://example.com/other_operation', data=data) ``` 方法三: 在请求参数中嵌入CSRF-Token。具体代码如下所示: ```python import requests def send_request_with_csrf_token(): url = 'http://example.com/submit_form' csrf_token = '1234567890abcdef' params = { 'param1': 'value1', 'param2': 'value2', 'csrf_token': csrf_token } response = requests.get(url, params=params) ``` 以上是三种常见的使用CSRF-Token的方式,具体使用哪种方式取决于你的实际需求和场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值