[HCTF 2018]WarmUp1

简介: [HCTF 2018]WarmUp1

1.题目给出提示php代码审计,那我们在解题的时候,可能会涉及到php代码,我们注意留意一下。

2.来到题目链接,页面显示一个表情包

3.ctrl+u查看源码看看有没有什么有用的信息,我们看到页面中有个显眼的source.php

4.访问source.php,使用/?file=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\" />";
    }  
?> 

5.这段代码是一个 PHP 脚本。

它定义了一个名为 emmm 的类。这个类有一个静态方法 checkFile(&$page),用于检查传入的文件名是否在白名单中。如果文件名在白名单中,它会返回 true,否则返回 false。

白名单中包含了两个文件名:source.php 和 hint.php。

如果用户通过请求参数传递了一个名为 file 的值,并且这个值是一个字符串,那么它会调用 emmm::checkFile($_REQUEST['file']) 来检查这个文件名是否在白名单中。如果在白名单中,它会包含这个文件并退出脚本;否则,它会输出一张图片。

如果用户没有传递 file 参数,或者传递的值不是一个字符串,它会输出一张图片。


6.综上我们可以构造一个file的参数来访问我们最终存在flag的文件


7.有两个php文件,source.php 和 hint.php


8.接下来访问hint.php

9.页面提示flag在ffffllllaaaagggg这个文件里

10.所以我们可以构造/?file=source.php?../ffffllllaaaagggg(../的个数不确定,所以我们需要一个个试一下)这里我们试了一个,还是不能看到。

11.试了一下source.php?,还是不可以

12.直到试了多个../才看到页面有显示试了5个../才成功拿到flag

13.flag{037a0561-f82d-45e2-9f5f-8f8c8c423be1}

相关文章
|
4月前
|
安全 数据安全/隐私保护
BUUCTF---wireshark1
BUUCTF---wireshark1
BUUCTF--misc--大白1
BUUCTF--misc--大白1
|
4月前
|
算法 Serverless Python
|
4月前
|
SQL 数据库 数据安全/隐私保护
BUUCTF[极客大挑战 2019]EasySQL1
BUUCTF[极客大挑战 2019]EasySQL1
|
4月前
|
数据安全/隐私保护
攻防世界web-----easyupload
攻防世界web-----easyupload
|
4月前
|
Go PHP
攻防世界web---fileinclude
攻防世界web---fileinclude
|
4月前
|
数据安全/隐私保护
BUUCTF---misc---被偷走的文件
BUUCTF---misc---被偷走的文件
|
4月前
|
数据安全/隐私保护
BUUCTF---[SWPU2019]神奇的二维码
BUUCTF---[SWPU2019]神奇的二维码
|
4月前
|
网络协议
攻防世界---misc---神奇的Modbus
攻防世界---misc---神奇的Modbus
|
4月前
|
网络安全
2024年---蓝桥杯网络安全赛道部分WP
2024年---蓝桥杯网络安全赛道部分WP