BJDCTF2020 Easy MD5

本题考点:

  • md5 (pass,true) 时的绕过, ffifdyop
  • md5 数组绕过
  • md5 科学计数绕过

# 0x00 md5 绕过

常见的 md5 绕过方法

  • (1)找出 md5 值都是两个 0e 开头的开头的。原理是 php 里面在做 == 的时候会先把两边的类型转成一样的,因为是 0e 开头,php 会认为它是科学技计数法,而 0 的多少次方都是 0。
    举例:
    QNKCDZO
    s155964671a
  • (2)数组绕过。原理是 md5 等函数不能处理数组,导致函数返回 Null。而 Null 是等于 Null 的,导致了绕过。看下面的示例,是返回了 yes 的。(题目中就传入?a []=1&b []=2 )

# 0x01 md5(pass,true)

6852080-6e3e0c67ecc17576

md5 函数在指定了 true 的时候,是返回的原始 16 字符二进制格式。也就是说会返回这样子的字符串:'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c(抄的 = =)
然后就会拼接成:
(题目的提示感觉还是有点问题的,因为 md5 函数返回的是字符串,后端应该会用单引号 / 双引号包起来的),所以应该会拼接为这样子:

select * from 'admin' where password=''or'6.......'

select * from 'admin' where password=''or'6.......'

这就是永真的了。接下来就是找到这样子的字符串。

绕过方法:ffifdyop

content: ffifdyop
hex: 276f722736c95d99e921722cf9ed621c
raw: 'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c
string: 'or'6]!r,b

# 0x02

上一关过了,这次跳到新页面。

levels91.php?a[]=1&b[]=2

绕过

image-20210617223653773

# 0x03

新页面也是数组绕过

image-20210617223734485

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

zeroc 微信支付

微信支付

zeroc 支付宝

支付宝

zeroc 贝宝

贝宝