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)
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
绕过
# 0x03
新页面也是数组绕过