easy_md5のWP——SQL下的弱类型比较
于NSSCTF上刷到此题,觉得颇有几处新意,故整理一份WP,题目传送门如下:(BJDCTF 2020)easy_md5 | NSSCTF。
题解
话不多说开启容器。
可以看到的是,进入题目后只有一份提交文本框,没什么其他信息。随便提交一个数字,网页的URL引起了我的注意。
http://node4.anna.nssctf.cn:28685/leveldo4.php?password=1 |
嗯,看起来像是个SQL注入。但是用sqlmap爆破无果,用BurpSuite抓包也没有得到什么有用的信息。但其实还是有信息的,如果你仔细观察响应报文,会发现文件头中出现了hint。
hint: select * from 'admin' where password=md5($pass,true) |
果然是一条经典的MySQL语句
接下来的问题就是怎么让这条语句成立然后给出我们想要的信息了。
经过查阅资料后得知MySQL中的“万能密码”ffifdyop
。这串字符被md5函数编码后变成276f722736c95d99e921722cf9ed621c
,随后再经过MySQL编码就变成了'or'6xxx
。其中xxx的部分是无关字符串,但是由于该字符串以6开头而被MySQL认为是整形,再和前方的部分拼接在一起,整条语句就变成了如下形式。
select * from 'admin' where password ''or'6xxx' |
此时该SQL语句恒成立,成功执行后跳转到levels91.php,查看源代码。
接下来就是简单的PHP弱类型比较了,这里可以上传md5碰撞值,也可以上传数组变量a、b,还可以直接跳转到levell14.php。
跳转到levell14.php后出现以下代码。
同样的思路,由于是强类型比较所以上传碰撞值的方法失效,此时上传数组变量param1和param2即可。
总结
这题难度较为简单,但是关于万能密码ffifdyop的知识点也十分重要,有单独写一篇WP的必要,权当积累。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Adam8enの8log!
评论