例题
先上传了两个相同MD5值的pdf文件--提示文件要不同
后上传两个不同类型md5(md5(php,32) = e1bfd762321e409cee4ac0b6e841963c
md5(php,16) = 321e409cee4ac0b6)但是解密后都为php的pdf文件,出现提示:MD5碰撞
搜索得知MD5碰撞是指两个不同的输入通过MD5散列函数产生相同的输出散列值。(不可逆)
即两个不同的数据却产生了相同的 MD5 哈希值既:4.pdf != 5.pdf but md5(4.pdf)=MD5(5.pdf)
使用工具fastcoll!!!
方法:打开cmd,在fastcoll目录下输入命令(前提:新创建一个pdf文件3.pdf,文件内容:php)
fastcoll_v1.0.0.5.exe -p D:\桌面\3.pdf -o D:\桌面\4.pdf D:\桌面\5.pdf(p+源文件,o+新创建的两个文件)
注意:添加文件的生成地址
完成命令后得到文件上传至环境
用BP抓包(比较快)使用repeate模块得到flag
检验
使用 certutil 命令查看一下md5
certutil -hashfile D:\桌面\4.pdf MD5
知道了两个pdf文件MD5值相同
关于MD5弱比较与强碰撞
可以通过python来爆破md5中的几位,下面给出一份示例python代码
1. import hashlib 2. for i in range(0,9999999999999999): 3. md5=hashlib.md5(str(i).encode("utf-8")).hexdigest() 4. if md5[0:5]=="66666": #md5后前五位是66666 5. print(i) 6. print("no result")
该脚本实现了纯数字通过MD5加密后相应位数是特定字符的功能