[BJDCTF2020]Easy MD5(详细)
这一题也是挺多知识点的。
1.打开网站,发现输入啥都没变化:
2.看到响应头有提示,应该是绕过md5进行注入了:
3.这里有个很离谱的点,我是真的没想到:
md5函数在指定了true的时候,是返回的原始 16 字符二进制格式。也就是说会返回这样子的字符串:'or’6\xc9]\x99\xe9!r,\xf9\xedb\x1c(抄的= =)
然后就会拼接成:
(题目的提示感觉还是有点问题的,因为md5函数返回的是字符串,后端应该会用单引号/双引号包起来的),所以应该会拼接为这样子:
select * from 'admin' where password=''or'6.......'
这就是永真的了。接下来就是找到这样子的字符串。
我是想用python3跑出来的,但是有些麻烦,php写了个,但是跑了十几次,一个没出来(代码应该是没问题的吧,因为直接赋值为答案是可以的)。如果遍历的话= =比如答案里面的8位数,那就是26^8=208827064576!!!:
<?php
function getRandStr($length) {
$str