目录
一、[BJDCTF2020]Easy MD5
打开后只有一个提交查询的界面,在源代码里没有找到任何东西。
输入了一些值,发现只能GET传参password。
在消息头里发现Hint: select * from 'admin' where password=md5($pass,true)
我们知道:数据库会把16进制转换成Ascii码解释。
然后就没思路了...
这里看了大佬的wp,发现输入了"ffifdyop"。
md5(ffifdyop)会返回16进制。
这时原来的语句为:
"select * from 'admin' where password='' or'6蒥欓!r,b' "
or后面的句子第一个字母是非0打头的数字符,比如为 ‘ 1abc ’ 或者 ‘ -1bde ’都会被认为是true。
以0开头会认为是false。
提交查询后看到了页面跳转:
查看页面源代码,发现了不得了的东西:
这个其实很简单,用数组绕过即可。构造Payload为:
?a[]=1&b[]=2
这里我们看到md5强比较,因为md5不能处理数组,所以md5(param1[])返回false,===两边都返回false,自然就相等(同样弱比较也可以用数组绕过进行操作)
我们绕过比较md5用的数组:param1[]=1¶m2[]=2(这里注意POST传值)
拿到flag。
二、 [极客大挑战 2019]BuyFlag
进入题目环境后,我们可以看到:
查看页面源代码,发现:
- 要进行post传参password和money
- postword不能为数字 但是又要和404相等(使用弱类型,构造为404a)
- money要为1亿但是 php版本太低了,1亿又太大了(科学计数法或者数组可以绕过)
没有任何回显,可能是需要进行抓包。
修改"user=0"为"uesr=1"。
然后构造payload:password=404a&money=1e10
拿到flag。