工具下载
个人感觉hash-ext-attack
比HashPump
好用,并且支持库安装也比较方便,直接pip install -r requirements.txt
就可以了,下载地址:https://pan.quark.cn/s/367f838460c4
题目
<?php
error_reporting(0);
$key = getKey();
$username = $_POST['username'];
$data = $_POST['data'];
$sign = $_COOKIE["sign"];
if (!empty($sign)) {
if ($username === "jwt") {
if ($sign === md5($key . $username . $data)) {
if (strpos($data, 'sec')) {
$flag = file_get_contents('/flag');
echo $flag;
} else echo "数据似乎没有被恶意篡改,但服务器接收到的数据中不包含sec";
} else echo "检测到当前用户的数据被恶意篡改";
} else echo "看起来你并不是用户jwt";
} else echo "检测到sign为空, 可能需要刷新一下浏览器";
?>
解题思路
1、根据题目可知,$key."jwt"."data" 的md5是 5a18d02b1f8da8d5f70a4cba720dfafd ,并且key的长度是17
2、那么已知明文就是jwtdata,已知key长度就是17,已知md5就是 5a18d02b1f8da8d5f70a4cba720dfafd
3、并且data数据要包含sec,那么使用工具开始攻击
4、开始传参,这里有个需要注意的地方,因为$sign === md5($key . $username . $data) ,而username我们已经传参jwt,所以data传参的时候要把前面的jwt去掉
1、根据题目可知,$key."jwt"."data" 的md5是 5a18d02b1f8da8d5f70a4cba720dfafd ,并且key的长度是17 这个是怎么判断的呀?
题目右侧写的有已知秘钥长度为17,并且提示已知初始数据为data ,再加上 $username === "jwt"的判断,和$sign == md5($key. $username . $data)这个判断,得出的结论。