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

特此感谢err0r师傅,标明出处:https://err0r.top/article/md5/


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!