MD5弱比较&0e绕过

题目来源于[SWPUCTF 2021 新生赛]easy_md5 

1.1 MD5弱比较和强比较

强比较:使用三个 ''==='' 比较,比较值,也比较类型

弱比较:使用两个 ''=='' 比较,只比较值,不比较类型

  • a==b   转同类型->后比较值
  • a===b 先判断类型是否相同,如果相同则比较值;如果不同则返回 false

转换规则:

1.字符型和字符型比较,为同类型,比较其内容

 2.数字型和数字型比较,同上

 3.字符型和数字型比较,若字符型值开头为数字,转为数字;

                                          若开头不为数字,为 null (弱比较)与 0 相等。

[1]字符型和数值型的弱比较

      先看字符串开头是否为数字

                    如果为数字,则截止到连续数字的最后一个数字,即"123abc456"=>123

                    如果不为数字,则判断为false,即"abc123456"=>0
 

[2]字符型和字符型的比较

            字符串的弱比较只能采用0e绕过,需要注意的是,0e后面不能有字母的存在

实例:

("0e123456"=="0e345") => true

("0e12adfc"=="0e345") => false

[3] 布尔型和任意值的比较

             布尔值true和任意字符串和数值都弱相等,除了0和false,因为0也认为是bool false,true是不等于false的

实例:

(true==''false'') => false

(0==''false'') => true

(true==0) => false

(true==''abc'') =>true

(true==''123abc'') =>true
 

1.2 0e绕过&数组绕过

<1> 0e绕过

科学记数法是一种记数的方法。

计算器表达10的幂一般是用E或e

如:2 760 000   =    2.76×10^6    =    2.76e6

           所以0e,无论后面跟什么值,都是0

 <2>  数组绕过

数组绕过的原理

md5不能加密数组 ,如 a[]=1 , b[]=1 , 传入数组会报错,但会继续执行并且返回结果为null

比如传入md5(a[]=1)==md5(b[]=2),实际上是null==null,所以数组进行md5弱比较时,结果相等

<3>万能通式ffifdyop 绕过
           万能通式:129581926211651571912466741651878684928和ffifdyop

实例:

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

输入md5('ffifdyop',true)绕过

select * from 'admin' where password=md5 ( ' ffifdyop ' ,true)

md5(string,raw)

   绕过原理:

ffifdyop 这个字符串被 md5 哈希了后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是' or '6
而 Mysql 刚好又会把 hex 转成 ascii 解释,因此拼接之后的形式是 select * from 'admin' where password= '  ' or '6xxxxx ',等价于 or 一个永真式,因此相当于万能密码,可以绕过md5()函数。

where password=正确的密码or 1 ,代表永真,那么前面有没有密码都无所谓了

简单说,

select * from admin where password= '    '  or'6<乱码>'

就相当于

select * from admin where password=  '    '      or 1  实现sql注入

当两个条件中有任一个条件满足,“逻辑或”的运算结果就为“真”

逻辑与”相当于生活中说的“并且”,就是两个条件都同时成立的情况下“逻辑与”的运算结果才为“真”。


2.1 Hackbar实现GET & POST解题

数组绕过

输入URL   ?name[]=1    -> GET     

                  password[]=2  ->POST

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值