记录一次web解题绕过md5()的方法,仅供参考
1 | $a=$_GET['a']; |
出现类似要求md5加密后相等且不加密不等的问题便是双md5碰撞。
可以利用PHP中md5函数的特性求解
解法一:0e绕过(科学计数法)
当一个值被md5加密后,其结果以0e开头,则会被当做科学计数法处理,最终会被处理为 0=0的效果,以此绕过。
类似被md5()加密后的值还有:
1 | 240610708 |
因此构造payload如下:
- xxx.com/index.php?a=’s155964671a’&b=’aabC9RqS’
后台会被处理为if(0=0&‘s155964671a’!=‘aabC9RqS’),最终绕过,得到flag。
解法二:数组绕过
md5() 函数不能处理数组,数组都返回 null,md5(a[]) 结果为 null
即payload如下:
- xxx.com/index.php?a[]=1&b[]=2
如此变为 if(null=null&s[1]!=s[2]),绕过成功,得到flag。