准备工作
phpstudy_pro php版本5.6
phpstorm php版本5.6
burpsuite_pro
foxyproxy拓展
fastcoll_v1.0.0.5.exe
实验环境
windows11
firefox浏览器
复现流程
1.在phpstudy网页根目录下新建一个1.php,代码如下
<?php
if((string)$_GET['a'] !== (string)$_GET['b'] && md5($_GET['a'])===md5($_GET['b'])){
echo "you are right";
}
else {
echo "you are wrong";
}
highlight_file("1.php");//文件内容高亮显示
?>
2. 使用fastcoll工具生成两个二进制文件,它们的md5值是相等的。
创建一个文本文件,写入任意的文件内容,命名为jk.txt (源文件)
在当前文件夹下开命令行运行fastcoll输出以下参数。-p 是源文件,-o是输出文件
./fastcoll_v1.0.0.5.exe -p jk.txt -o 1.txt 2.txt
3. 在phpstorm写入下面代码,路径一般跟我不一样
<?php
function readmyfile($path){
$fh = fopen($path, "rb");
$data = fread($fh, filesize($path));
fclose($fh);
return $data;
}
$a=urlencode(readmyfile("C:\\Users\\这里填你的用户名\\Downloads\Compressed\\fastcoll_v1.0.0.5.exe\\1.txt"));
$b=urlencode(readmyfile("C:\\Users\\这里填你的用户名\\Downloads\Compressed\\fastcoll_v1.0.0.5.exe\\2.txt"));
if(md5($a)===md5($b)){
echo"yes".PHP_EOL;
}else{
echo "no\n";
echo md5($a).PHP_EOL;
echo md5($b).PHP_EOL;
}
echo '二进制md5加密 '. md5( (readmyfile("C:\\Users\\这里填你的用户名\\Downloads\Compressed\\fastcoll_v1.0.0.5.exe\\1.txt")));
echo "\n";
echo 'url编码 '. urlencode(readmyfile("C:\\Users\\这里填你的用户名\\Downloads\Compressed\\fastcoll_v1.0.0.5.exe\\1.txt"));
echo "\n";
echo '二进制md5加密 '.md5( (readmyfile("C:\\Users\\这里填你的用户名\\Downloads\Compressed\\fastcoll_v1.0.0.5.exe\\2.txt")));
echo "\n";
echo 'url编码 '. urlencode(readmyfile("C:\\Users\\这里填你的用户名\\Downloads\Compressed\\fastcoll_v1.0.0.5.exe\\2.txt"));
echo "\n";
试验一下,发现urlencode以后再md5加密结果会不一样,原因不明。(可能二进制数据urlencode的时候没有忽略不可见字符的说法)
4.使用burpsuite进行传参
格式大概是?a=xxx&b=xxx
胜利!
参考链接: