MD5加密漏洞(MD5绕过方式-0e绕过/数组绕过/MD5碰撞/MD5SQL注入)

MD5是一种散列函数,是哈希算法的一种,可以将任意长度的输入,通过散列算法变换成128位的散列值

 MD5加密有4种绕过方式

  1. 0e绕过
  2. 数组绕过
  3. MD5碰撞
  4. MD5SQL注入

0e绕过

0e开头的字符串在参与比较时,会被当做科学计数法,结果转换为0

 比如将两个md5值进行弱类型比较

md5('QNKCDZO') == md5(240610708)

MD5加密后会变成这个样子

0e830400451993494058024219903391 == 0e462097431906509019562988736854

由于0e开头的字符串会转换为0,所以真正比较的过程会变成下面这样

0 == 0

返回结果为true,也就是说0e开头的md5值进行弱类型比较时,结果相等

常用的MD5加密后以0E开头的有

    QNKCDZO
    240610708
    byGcY
    sonZ7y
    aabg7XSs
    aabC9RqS
    s878926199a
    s155964671a
    s214587387a
    s1091221200a

数组绕过

md5不能加密数组,传入数组会报错,但会继续执行并且返回结果为null

 比如将两个数组的md5值进行比较

md5(a[]=1) === md5(b[]=1)

由于md5函数无法处理数组,会返回null,所以md5加密后的结果是下面这样

null === null

结果返回true,也就是说数组的md5值进行比较时,结果相等

需要注意的是0e绕过只能绕过弱类型比较(==),而数组绕过不只可以绕过弱类型比较,还可以绕过强类型比较(===)

弱类型比较(==),只判断内容是否相等,如果是字符串类型,则转换成数值型后进行判断

强类型比较(===),判断内容的基础上,还会判断类型是否相同

 

MD5碰撞

MD5碰撞也叫哈希碰撞,是指两个不同内容的输入,经过散列算法后,得到相同的输出,也就是两个不同的值的散列值相同

 

MD5-SQL注入

ffifdyop 的MD5加密结果是 276f722736c95d99e921722cf9ed621c

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

你可能感兴趣的:(Web渗透,网络安全,渗透测试)