BlankのBlog

Md5碰撞

字数:199 Topic:misc Tag:2018-03

MD5碰撞的一点测试,其实就是按照网上的代码及工具自己做了一遍,但在过程中还是遇到了或多或少的问题,水一篇blog来记录一下

环境:wamp

工具:fastcoll_v1.0.0.5

附下载链接:http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip

源代码

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>md5碰撞测试</title>
</head>
<body>
	<form action="md5.php" method="POST">
		输入两个数值
		<input type="text" name="a">
		<input type="text" name="b">
		<input type="submit" name="submit" value="submit">
	</form>
</body>
</html>
<meta charset="utf-8">
<?php
	$a = urldecode($_POST["a"]);
	$b = urldecode($_POST["b"]);

	if((string)$a!==(string)$b && md5($a)===md5($b)){
		echo 'success!';
	}else{
		echo 'failed!';
	}
?>

代码逻辑基本上跟强网杯web签到的第三层一样 做了一些简化 但也能实现我们需要的功能

关于md5碰撞的原理 详细可以参考这个链接

简而言之就是构造两个md5相同的文件 这里就用到了工具

工具的详细使用方法也不太懂,有兴趣可以去看看工具的源代码

生成我们需要的文件可以这样

fastcoll_v1.0.0.5.exe -i 0123456789abcdeffedcba9876543210
MD5 collision generator v1.5
by Marc Stevens (http://www.win.tue.nl/hashclash/)

Using output filenames: 'msg1.bin' and 'msg2.bin'
Using initial value: 0123456789abcdeffedcba9876543210

Generating first block: ...
Generating second block: S00.....
Running time: 1.969 s

用了不到2秒就生成了msg1.bin和msg2.bin 可以使用win下的命令来查看这两个文件的md5以及hash值

certutil -hashfile msg1.bin md5
MD5 哈希(文件 msg1.bin):
ed9bb372061c61801ba468001ca0e259
CertUtil: -hashfile 命令成功完成。

certutil -hashfile msg2.bin md5
MD5 哈希(文件 msg2.bin):
ed9bb372061c61801ba468001ca0e259
CertUtil: -hashfile 命令成功完成。

certutil -hashfile msg1.bin
SHA1 哈希(文件 msg1.bin):
204c95e1177a894f8bf7aad0103be3d23f42f4ec
CertUtil: -hashfile 命令成功完成。

certutil -hashfile msg2.bin
SHA1 哈希(文件 msg2.bin):
1c2fb94f93b62931c66377bbedbdaec2235c1b7a
CertUtil: -hashfile 命令成功完成。

也可以通过python来查看md5 代码如下

import md5#在python2.7下MD5可以单独import

m1 = md5.new()
m2 = md5.new()
file1 = open('C:\xxx\xxx\msg1.bin','rb')
file2 = open('C:\xxx\xxx\msg2.bin','rb')
m1.update(file1.read())
m2.update(file2.read())
file1.close()
file2.close()
print m1.hexdigest()
print m2.hexdigest()

可以看到两个文件的md5相同但是hash不同

再回到这一道题目 我们只需要把这两个文件的内容编码然后发送出去就可以得到success 最终的python代码

import requests
import urllib

url = 'http://127.0.0.1/md5/md5.php' 
s1 = urllib.quote(open('C:\xxx\xxx\msg1.bin').read())
s2 = urllib.quote(open('C:\xxx\xxx\msg2.bin').read())


data{
    'a': s1,
    'b': s2
}
r = requests.post(url,data=data)
print r.text

完结撒花~

5.10更

附上收集的相同md5的不同数据

#强网杯某大牛wp
$Param1="\x4d\xc9\x68\xff\x0e\xe3\x5c\x20\x95\x72\xd4\x77\x7b\x72\x15\x87\xd3\x6f\xa7\xb2\x1b\xdc\x56\xb7\x4a\x3d\xc0\x78\x3e\x7b\x95\x18\xaf\xbf\xa2\x00\xa8\x28\x4b\xf3\x6e\x8e\x4b\x55\xb3\x5f\x42\x75\x93\xd8\x49\x67\x6d\xa0\xd1\x55\x5d\x83\x60\xfb\x5f\x07\xfe\xa2";
$Param2="\x4d\xc9\x68\xff\x0e\xe3\x5c\x20\x95\x72\xd4\x77\x7b\x72\x15\x87\xd3\x6f\xa7\xb2\x1b\xdc\x56\xb7\x4a\x3d\xc0\x78\x3e\x7b\x95\x18\xaf\xbf\xa2\x02\xa8\x28\x4b\xf3\x6e\x8e\x4b\x55\xb3\x5f\x42\x75\x93\xd8\x49\x67\x6d\xa0\xd1\xd5\x5d\x83\x60\xfb\x5f\x07\xfe\xa2";
#008ee33a9d58b51cfeb425b0959121c9

#知乎Belleve
$data1="\xd1\x31\xdd\x02\xc5\xe6\xee\xc4\x69\x3d\x9a\x06\x98\xaf\xf9\x5c\x2f\xca\xb5\x07\x12\x46\x7e\xab\x40\x04\x58\x3e\xb8\xfb\x7f\x89\x55\xad\x34\x06\x09\xf4\xb3\x02\x83\xe4\x88\x83\x25\xf1\x41\x5a\x08\x51\x25\xe8\xf7\xcd\xc9\x9f\xd9\x1d\xbd\x72\x80\x37\x3c\x5b\xd8\x82\x3e\x31\x56\x34\x8f\x5b\xae\x6d\xac\xd4\x36\xc9\x19\xc6\xdd\x53\xe2\x34\x87\xda\x03\xfd\x02\x39\x63\x06\xd2\x48\xcd\xa0\xe9\x9f\x33\x42\x0f\x57\x7e\xe8\xce\x54\xb6\x70\x80\x28\x0d\x1e\xc6\x98\x21\xbc\xb6\xa8\x83\x93\x96\xf9\x65\xab\x6f\xf7\x2a\x70";
$data2="\xd1\x31\xdd\x02\xc5\xe6\xee\xc4\x69\x3d\x9a\x06\x98\xaf\xf9\x5c\x2f\xca\xb5\x87\x12\x46\x7e\xab\x40\x04\x58\x3e\xb8\xfb\x7f\x89\x55\xad\x34\x06\x09\xf4\xb3\x02\x83\xe4\x88\x83\x25\x71\x41\x5a\x08\x51\x25\xe8\xf7\xcd\xc9\x9f\xd9\x1d\xbd\xf2\x80\x37\x3c\x5b\xd8\x82\x3e\x31\x56\x34\x8f\x5b\xae\x6d\xac\xd4\x36\xc9\x19\xc6\xdd\x53\xe2\xb4\x87\xda\x03\xfd\x02\x39\x63\x06\xd2\x48\xcd\xa0\xe9\x9f\x33\x42\x0f\x57\x7e\xe8\xce\x54\xb6\x70\x80\xa8\x0d\x1e\xc6\x98\x21\xbc\xb6\xa8\x83\x93\x96\xf9\x65\x2b\x6f\xf7\x2a\x70";
#79054025255fb1a26e4bc422aef54eb4

千帆过尽,勿忘初心 UP