MD5 比较
本文最后更新于:2 年前
MD5-多种类型比较
MD5-比较
一、弱类型比较
if ($_POST['a'] != $_POST['b'] && md5($_POST['a']) == md5($_POST['b']))
弱类型比较因为php特性,在比较时先将string转换为int型,0e开头会被识别为科学计数法,结果0=0 比较成功
payload:
a=QNKCDZO&b=aabg7XSs
只要是md5值为0e开头即可
二、强类型比较
if ($_POST['a'] !== $_POST['b'] && md5($_POST['a']) === md5($_POST['b']))
强类型比较用数组绕过,md5()函数无法解出其数值,就会得到(error===error)强比较值相等
payload:
a[]=111&b[]=aaa
传入数组即可
三、真实碰撞
if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b']))
真实md5碰撞,由于string()函数,不能输入数组只能输入字符串
payload:
a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2
值不等,md5相等即可。md5碰撞。
四、0e开头MD5的MD5为0e的MD5
0e215962017
md5(0e215962017)=0e291242476940776845150308577824
单次加密.py
#!/usr/bin/python
# -*- coding: utf8 -*-
import sys, hashlib
# MD5单次加密
## 输入参数
flag = '111'
data = hashlib.md5()
data.update(flag.encode('utf-8'))
print(flag+'加密结果:'+data.hexdigest())
真实碰撞.py
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!