目录
一、[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。

本文详细介绍了两个CTF挑战的解决方案,包括[BJDCTF2020]EasyMD5中利用ASCII码和数组绕过MD5比较,以及[极客大挑战2019]BuyFlag中利用弱类型和科学计数法来满足条件获取flag。通过源代码分析和payload构造,展示了信息安全竞赛中的技巧和策略。

被折叠的 条评论
为什么被折叠?



