BurpSuite 暴力破解之绕过 token

0x01

现在的网站安全性越来越高,防爆破机制也越来越多,token 验证便是其中比较常见的一种。客户端每次请求服务器时,服务器会返回一个 token,下次请求时,客户端需要带上这个 token,否则服务器认为请求不合法。且这个 token 不可重复使用,每次请求都将生成新的 token,并导致旧的 token 失效。

0x02

token 机制使得我们的爆破变得困难了许多,但正所谓道高一尺魔高一丈,神器 BurpSuite 已经为我们提供了这一问题的解决方案,接下来就由老夫将这武林秘籍授予你们!(哈哈哈一不小心就中二了)

0x03

PIkachu 靶场第 4 关,token防爆破

首先浏览器设置代理,然后点击登录,burp 拦截到请求,可以看到请求携带了 token。

右键,Send to Repeater,然后点击 go,发送请求,提示 username or password is not exists~,并且可以看到返回了新的 token。

再次点击 go,又返回了新的 token,且提示 csrf token error,说明旧的 token 已经失效。

由此我们可以知道,每次请求服务端都会返回新的 token,并且会放在页面上,我们只需要将这个值拿出去,并且放到请求里带上即可。

0x04

在 Repeater 界面单机右键,Send to Intruder,来到 Intruder 界面。

点击 Position,点击 Clear,清除默认荷载,然后依次分别选择密码部分和 token 部分的值并点击 Add,(账号部分我就不选中了,因为我知道账号就是 admin),Attack Type 选择 Pitchfork,完成后如下图。

接着点击 Payloads,首先设置密码的字典,选择从文件加载。

然后设置 token,首先把 Payload Set 切换到 2,因为我们刚刚 Add 的时候 token 是在第二个位置,密码是在第一个,这个其实就是设置第几个位置的荷载的值。

点击 Options,找到 Grep-Extract,点击 Add。

弹出一个框,点击 fetch response(或者 refetch response)。

然后我们搜索 token,点击 + 旁边的 < > 切换上一个和下一个,找到如下位置,然后双击选中 token 的值,如下图所示。

然后点击 ok,可以在 Grep - Extract 看到一条记录,就是我们刚刚加的。

接下来设置 Redirections,设置为 Always。

继续设置线程数,设置为 1 个线程,因为多线程会导致 token 出现问题。

回到 Payloads,将 Payload set 2 的 Payload type 设置为 Recursive grep,如下设置。

一切准备就绪,点击 start attack 开始爆破。

可以看到每次带上的 token 都是不一样的,第 4 条记录的 Length 和其他的不一样,为正确的账号密码 admin 123456。

至此成功绕过 token 验证。

### CTFShow Web 入门爆破教程 #### 使用Burp Suite进行调试和设置 对于初次接触CTFShow Web平台的用户来说,掌握如何使用Burp Suite是非常重要的。由于某些浏览器可能存在无法完全捕获数据包的情况,在Firefox中可能会遇到POST参数未能成功被抓取的问题[^2]。因此建议尝试其他类型的浏览器来进行操作。 #### 工具准备与配置 在处理特定挑战如web25时,可能需要用到`php_mt_seed`这样的专用工具来破解基于PHP内置函数`mt_rand()`产生的伪随机数序列。通过向服务器发送请求并接收响应中的随机数值作为起点,可以进一步推测出内部使用的种子值[^3]。 ```bash # 安装 php_mt_seed 工具 pip install php-mt-srand ``` #### 编写自动化脚本辅助解题 编写简单的PHP脚本来模拟目标应用的行为也是常见的做法之一。下面是一个用于验证令牌(token)生成逻辑的小例子: ```php <?php $token = '123'; while (true){ $originalToken = $token; $token = md5($token); if ( substr($token, 1, 1) === substr($token, 14, 1) && substr($token, 14, 1) === substr($token, 17, 1) ) { if( (intval(substr($token, 1, 1)) + intval(substr($token, 14, 1)) + intval(substr($token, 17, 1))) / substr($token, 1, 1) === intval(substr($token, 31, 1)) ){ echo "over!<br>"; echo htmlspecialchars($originalToken); break; } } } highlight_file(__FILE__); ?> ``` 此代码片段展示了如何创建一个循环结构去不断变换输入直到满足给定条件为止,并最终输出符合条件的结果字符串[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值