常见的绕过md5方法

MD5的四种绕过方法

1、0E绕过(可用于'=='):

0E开头的字符串在参与比较的时候会被当最哦科学计数法,结果转换为0.

方法:使用两个用md5加密后开头为0E的字符串,进行比较。

常见0E开头的字符串:
QNKCDZO
240610708
byGcY
sonZ7y
aabg7XSs
aabC9RqS
s878926199a
s155964671a
s1091221200a

双重md5绕过
7r4lGXCH2Ksu2JNT3BYM
CbDLytmyGm2xQyaLNhWn
770hQgrBOjrcqftrlaZk

2、数组绕过(可用于'==='和'=='):

MD5不能加密数组传入数组会报错,但会继续执行并且返回null。

3、MD5碰撞

利用md5不同内容的输入经过散列算法后得到相同的输出,可以使用fastcoll进行生成。

fastcoll_v1.0.0.5.exe -p 输入.txt -o 1.txt 2.txt

1.txt(url编码)
%61%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5d%9f%f2%1f%9c%29%75%31%f3%fd%0d%ea%e6%0c%6e%ec%ee%ed%7c%40%03%d0%73%21%20%7d%2c%22%92%c5%61%55%c0%5e%e1%83%86%4c%c4%f1%18%f0%1c%d5%d6%77%fe%10%0c%10%07%35%72%d8%df%1c%06%da%52%53%70%13%5f
2.txt(url编码)
%61%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5d%9f%f2%1f%9c%29%75%31%f3%fd%0d%ea%e6%0c%6e%ec%ee%ed%7c%40%03%50%73%21%20%7d%2c%22%12%c5%61%55%c0%5e%e1%83%86%4c%c4%f1%98%f0%1c%d5%d6%77%fe%10%0c%10%07%35%72%58%df%1c%06%da%52%53%f0%13%5f

4、MD5-sql注入

ffifdyop 的MD5加密结果是 276f722736c95d99e921722cf9ed621c

经过MySQL编码后会变成’or’6xxx,使SQL恒成立,相当于万能密码,可以绕过md5()函数的加密

利用sql的万能密码的特性。

5、哈希长度扩展攻击

<think>好的,我现在需要帮助用户理解MD5的0E绕过技术。首先,我应该回顾一下用户提供的引用内容,确保准确理解他们的需求。用户提到了三个引用,其中引用[1]解释了MD5的基本原理,引用[2]和[3]则涉及具体的CTF题目中的绕过方法,特别是使用ffifdyop字符串和PHP中md5函数的参数问题。 首先,我需要明确0E绕过的原理。根据引用[1],MD5生成的是128位的哈希值,通常表示为32位的十六进制字符串。当这个字符串以0E开头,后面跟随纯数字时,PHP等弱类型语言在科学计数法比较时会将其视为0的指数,从而等于0。例如,0e123会被视为0^123,即0。因此,如果两个不同的字符串经过MD5哈希后都得到0e开头的哈希值,且后面的字符都是数字,那么它们在弱类型比较(==)时会被判定为相等,尽管它们的实际值不同。 接下来,用户提供的引用[2]中提到使用ffifdyop字符串进行绕过。我需要验证这个字符串的MD5哈希值是否符合0E开头的条件。计算md5('ffifdyop', true)的结果是原始二进制格式,转换成十六进制应该是276f722736c95d99e921722cf9ed621c,但根据引用[2],当第二个参数为true时,PHP返回的是16字节的二进制数据。如果这个二进制数据在转换为字符串时包含类似' or '这样的结构,可能会引发SQL注入。例如,如果二进制数据是某些特定字符,可能在SQL查询中被解释为永真条件,从而绕过密码检查。 然后,引用[3]中的代码示例展示了如何通过GET参数a和b的不等但MD5哈希值在弱比较下相等的情况。这里需要找到两个不同的输入,它们的MD5哈希值都以0E开头,后面跟随数字。例如,已知的字符串如240610708和QNKCDZO,它们的MD5哈希分别是0e462097431906509019562988736854和0e830400451993494058024219903391,这样在==比较时会被视为0 == 0,从而满足条件。 现在,我需要将这些信息整理成一个清晰的解释,说明0E绕过的技术原理和实现方法。同时,确保使用正确的LaTeX格式,行内公式用$...$,独立公式用$$...$$,并引用正确的来源。最后,生成相关问题,帮助用户进一步理解。 在整理过程中,需要注意用户提到的ffifdyop的应用场景可能涉及SQL注入,而不仅仅是0E比较,这需要区分不同情况下的绕过方法。例如,当md5函数的第二个参数为true时,返回原始二进制可能包含特殊字符导致SQL注入,而0E绕过则主要应用于弱类型比较的情况。因此,在回答中需要明确区分这两种不同的绕过技术,避免混淆。 总结起来,回答的结构应该包括: 1. 0E绕过的原理,涉及弱类型语言的科学计数法比较。 2. 实现方法,提供已知的字符串示例和PHP代码示例。 3. 注意事项,如仅适用于弱类型比较,其他场景可能需要其他方法。 4. 相关引用标注,确保引用来源正确。 5. 生成相关问题,帮助用户深入探讨。 现在需要检查是否有遗漏或错误,比如确认示例字符串的MD5哈希是否正确,以及引用是否准确。例如,QNKCDZO的MD5确实是0e830400451993494058024219903391,而240610708的哈希是0e462097431906509019562988736854,这些都需要验证正确性。此外,在SQL注入的例子中,ffifdyop的二进制结果是否会导致永真条件,可能需要进一步解释其转换后的字符串形式,例如转换成字符串后是否为' 'or'6�]��!r,��b',这样的结构在SQL查询中可能形成类似'...'or'1'的条件,从而绕过验证。 最后,确保使用中文回答,并遵循用户的格式要求,包括代码块和引用标识的正确放置。</think>### MD5 0E绕过技术原理及实现方法 #### 技术原理 MD5的0E绕过是一种利用**弱类型语言特性**和**特定哈希值结构**的漏洞攻击技术。当两个不同的字符串经过MD5哈希后,若结果满足以下条件: 1. 哈希值以`0e`开头; 2. `0e`后跟随**纯数字**(如`0e123`), 则在PHP等弱类型语言中,这类字符串在科学计数法比较时会被视为`0`(即$0^N = 0$),从而实现绕过逻辑判断[^3]。 例如: 字符串`QNKCDZO`的MD5哈希为$0e830400451993494058024219903391$,另一字符串`240610708`的哈希为$0e462097431906509019562988736854$。在弱类型比较(`==`)时,两者会被判定为相等。 #### 实现方法 1. **构造特定字符串** 使用已知的MD5哈希结果为`0e+数字`的字符串,例如: ```php $a = "QNKCDZO"; // md5($a) = 0e830400451993494058024219903391 $b = "240610708"; // md5($b) = 0e462097431906509019562988736854 if ($a != $b && md5($a) == md5($b)) { echo "Bypass success!"; } ``` 此时条件成立,触发漏洞。 2. **利用二进制原始输出** 当PHP的`md5($str, true)`参数为`true`时,返回**16字节二进制数据**。某些二进制数据在转换为字符串后可能包含SQL注入的关键词(如`'or'`),例如: ```php md5("ffifdyop", true) = 'or'6�]��!r,��b' // 原始二进制转换为字符串后形成永真条件 ``` 这会导致SQL语句如`SELECT * FROM admin WHERE password='...'`被注入为`... WHERE password=''or'6...'`,从而绕过验证[^2]。 #### 注意事项 - 0E绕过**仅适用于弱类型比较**(`==`),严格比较(`===`)会校验类型和值。 - 需结合具体场景选择字符串(如`ffifdyop`用于SQL注入,`QNKCDZO`用于哈希比较)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值