题目链接:https://buuoj.cn/challenges#[BJDCTF2020]Easy MD5
打开环境后如下所示。
响应包如下。
HTTP/1.1 200 OK
Server: openresty
Date: Fri, 25 Oct 2024 15:20:01 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/7.3.13
hint: select * from 'admin' where password=md5($pass,true)
Cache-Control: no-cache
Content-Length: 3107
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
@media all and (min-width:600px) {
* {
/*改变width计算为包含边框和内间距*/
box-sizing: border-box;
}
body {
/*控制页面内容水平和垂直居中*/
position: relative;
display: flex;
height: 550px;
align-items: center;
justify-content: center;
background-size: cover;
background-repeat: no-repeat;
}
/*container*/
.container {
border: rgba(240, 235, 235, 0.932) solid 3px;
box-shadow: 10px 10px 10px rgba(173, 173, 173, 0.61);
background-color: white;
width: 30%;
height: 20%;
border-radius: 8px;
position: relative;
}
/*container end*/
/*header*/
#header h1 {
position: relative;
text-align: center;
}
/*header end*/
/*main*/
.main {
align-items: center;
justify-content: center;
position: relative;
width: 100%;
height: 100%;
}
.main section {
width: 50%;
margin-left: 22%;
}
.main section .upload {
width: 400px;
}
.main section .upload .in{
margin-top: 10%;
border-radius:10px;
font-size: 17px;
color: rgba(44, 44, 44, 0.582);
font-family: "Microsoft YaHei";
border: rgba(240, 235, 235, 0.932) solid 3px;
box-shadow: 10px 10px 10px rgba(173, 173, 173, 0.61);
background-color: white;
}
.main section .upload .give{
margin-left: 10px;
border-radius:10px;
color: rgba(44, 44, 44, 0.582);
font-size: 17px;
font-family: "Microsoft YaHei";
border: white solid 3px;
background-color: white;
}
/*main end*/
}
</style>
</head>
<body>
<div class="container">
<div id="header">
</div><!-- /header end -->
<div class="main">
<section>
<form class="upload" action="leveldo4.php" method="GET">
<input type="text" id="name" name='password' class="in">
<input type="submit" class="give">
</form>
</section>
</div><!-- /main end -->
</div><!-- /container end -->
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</body>
</html>
可以发现,在 HTTP 标头中存在一个 "hint",即:select * from 'admin' where password=md5($pass,true)
。
当 PHP 的 md5 函数的第二个参数为 True 时,输出的结果将会是原始 16 字符二进制格式,而字符串 "ffifdyop" 的 MD5 值(原始 16 字符二进制格式)为:'or'6É]™é!r,ùíb
,这将会导致引号闭合,并且判断永为真。
Payload:?password=ffifdyop
。
题目重定向到 "levels91.php",响应包如下。
HTTP/1.1 200 OK
Server: openresty
Date: Fri, 25 Oct 2024 15:22:09 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/7.3.13
Cache-Control: no-cache
Content-Length: 780
<!--
$a = $GET['a'];
$b = $_GET['b'];
if($a != $b && md5($a) == md5($b)){
// wow, glzjin wants a girl friend.
-->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
span {
position: relative;
display: flex;
width: 100%;
height: 700px;
align-items: center;
font-size: 70px;
font-family:'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
justify-content: center;
}
</style>
</head>
<body>
<span>Do You Like MD5?</span>
</body>
</html>
可以看到,响应包中插入了一些注释。
<!--
$a = $GET['a'];
$b = $_GET['b'];
if($a != $b && md5($a) == md5($b)){
// wow, glzjin wants a girl friend.
-->
这里又需要引入 PHP 的 md5 函数的另外特性,即,PHP 在处理哈希字符串时,如果通过 "!=" 或 "==" 来对哈希值进行比较时,PHP 会把每一个以 "0e" 开头的哈希值都解释为 "0",所以如果两个不同的密码经过哈希以后,其哈希值都是以 "0e" 开头的,那么 "PHP" 将会认为他们相同,都是 "0"。
// 一些哈希值为 "0e" 开头的字符串
QNKCDZO
0e830400451993494058024219903391
s878926199a
0e545993274517709034328855841020
Payload:?a=QNKCDZO&b=s878926199a
。
在发送 Payload 后,响应包中又提示跳转到 "levell14.php"。该文件如下所示。
题目使用了强比较对比 MD5,因此直接搜集一些相同 MD5 值,却不同的字符串进行提交即可。
Payload:param1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2¶m2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2
。