[SWPUCTF 2022 新生赛]奇妙的MD5 WP
一上来页面让我们写一个奇妙的字符串,可能会有点蒙,查看 F12 源码也找不到什么有用的信息,我们这时去抓包一下这个网址,会发现:
hint:select * from 'admin' where password=md5($pass,true)
hint 是出题者留的帮助信息,select * from 'admin' 是从名为 admin 的表中选取所有字符,where password=md5($pass,true) 只返回满足 password=md5($pass,true) 条件的记录,如果 where 后面条件为 true,则会返回所有管理员信息。
其实这个 hint 在 F12 中,也可以在 network 模块中找到,network 面板会显示原始的 HTTP 通信,包括完整头部信息,在这里我们找到 sta4t.php 文件,里面就会有我们的 hint 了。

有了 hint, 我们根据 password=md5($pass,true) 来寻找合适的字符串,true 代表会将转化为 \(16\) 字节的原始二进制数据,如果我们用数据开头为 or 的字符串,最终会被识别为 password='' or '剩余部分', 剩余部分代表 true,而 '' 代表 false, false or true = true, 所以最终 password = true, 我们要找一个 MD5 哈希 \(16\) 字节的开头为 or 的字符串,搜寻得知万能字符串 ffifdyop, 它构建了一个永真的条件。
输入后,进入下一页,我们按 F12 看一下源代码,就会看到:

要让 wqh 和 dsy 不相等,但是 md5($x)===md5($y), 根据绕过的知识,让 wqh 和 dsy 都传入数组,这样都会返回 Null, 而 Null === Null, 这样就绕过了,最后得到 flag。
