打开环境
![](https://img-blog.csdnimg.cn/img_convert/7aa15895a1114c98ae6f55cbc5938bcc.png)
一个简单的页面
查看源代码
![](https://img-blog.csdnimg.cn/img_convert/0f65205a82f1454bb84133cf3b99982c.png)
一个get传参,随便输入试试看
输入1,1",1',均无反应,每次遇到这种有输入框的都以为是sql注入,但是题目为md5
![](https://img-blog.csdnimg.cn/img_convert/d3e4cd9131a341f08e0d91af212b3b50.png)
标头里面看到提示select * from 'admin' where password=md5($pass,true)
搜索相关漏洞,得到提示,输入特定字符ffifdyop
原字符为ffifdyop
md5加密后结果为276F722736C95D99E921722CF9ED621C
![](https://img-blog.csdnimg.cn/img_convert/cd597b5179c64fa1a76660cce0973fde.png)
转16进制为
![](https://img-blog.csdnimg.cn/img_convert/791b3d6bbb3d475dbe99c89371c04f1c.png)
于是拼接为
select * from 'admin' where password='or'6ɝ⬹�
or后面的不是0即为1,返回值即为true
输入ffifdyop得到如下界面
![](https://img-blog.csdnimg.cn/img_convert/105608e7bc7941d2bfc736f624f2ca0a.png)
进入源代码界面查看
![](https://img-blog.csdnimg.cn/img_convert/021fbfaa40bb4e92aa44889432d0802f.png)
<!--
$a = $GET['a'];
$b = $_GET['b'];
if($a != $b && md5($a) == md5($b)){
// wow, glzjin wants a girl friend.
-->
需要传参a和b
考点为md5弱类型,为0e开头的会被识别为科学记数法,结果均为0
所以也需要md5后开头为0e的特定字符
构造payload
?a=QNKCDZO&b=s878926199a
![](https://img-blog.csdnimg.cn/img_convert/69b04d4ed5014f6881de12b7ee1b2d69.png)
输入后跳转新界面
<?php
error_reporting(0);
include "flag.php";
highlight_file(__FILE__);
if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
echo $flag;
}
考的是MD5强碰撞,如果传参不是字符串,而是数组,md5()函数无法解出数值,就会得到===强比较的值相等
payload如下
param1[]=1¶m2[]=2
![](https://img-blog.csdnimg.cn/img_convert/e32defdf90ab4d649b5c46bd8b64b008.png)
得到flag
flag{215abb44-9a26-4e38-b075-22515fc59542}