MD5 绕过的一些思路

MD5 绕过的一些思路

常用的0e绕过

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

  • QNKCDZO
  • 240610708
  • s878926199a
  • s155964671a
  • s214587387a
  • s214587387a
  • s1091221200a
  • byGcY
  • sonZ7y
  • aabg7XSs
  • aabC9RqS

这些字符串的 md5 值都是 0e 开头,在 php 弱类型比较中判断为相等

数组绕过

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

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

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

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

null === null

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

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

MD5与SQL注入

可以了解一下MySQL中的一些数值比较特征。

  1. 当数字和字符串比较时,若字符串的数字部分(需要从头开始)和数字是相同的,那么则返回的是true。

    select if(1="1a","相等","不相等") as test;
    

    if(exp1,stat1,stat2):类似于高级语言中三元运算符。当exp1为true的是否返回stat1,为false返回stat2

  2. 以数字开头的字符串,若开头的字符不是0,那么在做逻辑运算的时候返回的是1,也就是true。

select * from user where password =''or'1234a';

md5($password,true)的漏洞

select * from usera where username = 'admin' and password = md5($pass,true)

对特殊的字符串进行md5后能够与 "or"加上一个非0的字符就可以绕过

ffifdyop

ffifdyop的MD5加密结果是 276f722736c95d99e921722cf9ed621c

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Y.lin

别急,好运都藏在努力里~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值