0x00 前言

        CTFHub 专注网络安全、信息安全、白帽子技术的在线学习,实训平台。提供优质的赛事及学习服务,拥有完善的题目环境及配套 writeup ,降低 CTF 学习入门门槛,快速帮助选手成长,跟随主流比赛潮流。

        

        

0x01 题目描述

文件包含:

        (无)

网页显示内容

        

        

0x02 解题过程

简单分析网页显示内容中的源代码,可以发现一处代码 include $_GET["file"] ,其中 include 语句可以动态地包含用户发送的 GET 请求。详细的方法将在后续的内容中进行逐步解释。

        

网页显示内容页面下方有一处英文提示:" i have a shell, how to use it ? "。大致意思是,我有一个 shell ,应该怎么去使用它。点击 shell 英文的超链接,跳转到一个新页面。新页面显示的内容是一句话木马,连接密码是 ctfhub 。

​        

根据网页内容的代码提示,初步判断这是一个文件包含漏洞。这里使用蚁剑测试连接,向网页发送 GET 请求,设置传递参数 file=shell.txt 。这样做就可以将网页链接中的页面包含到主页面 index.php 中。添加链接页面的一句话木马的密码测试连接发现成功连接。

http://challenge-f46df033d876ecf2.sandbox.ctfhub.com:10800/?file=shell.txt

        

检查目录列表中的文件,发现此题 flag 。

​        

        

0x03 代码解析

error_reporting(0);    //关闭错误报告

        代码解析:在 php 语言中, error_reporting(0); 函数表示为关闭错误报告,error_reporting() 函数可以使用其来报告什么类型的 PHP 错误。

        

实例:

函数说明
error_reporting(0);关闭错误报告
error_reporting(E_ERROR | E_WARNING | E_PARSE);报告 runtime 错误
error_reporting(E_ALL);报告所有错误
ini_set("error_reporting", E_ALL);等同 error_reporting(E_ALL);
error_reporting(E_ALL & ~E_NOTICE);报告 E_NOTICE 之外的所有错误

表格来源于[w3school/PHP error_reporting() 函数]

        

if (isset($_GET['file'])) {
    ...
}

        代码解析: isset() 函数用于检测变量是否已设置并且非 NULL 。如果检测到用户通过 GET 请求传递了 file 参数,那么则执行代码块中的代码。

        

    if (!strpos($_GET["file"], "flag")) {
        include $_GET["file"];
    } else {
        echo "Hacker!!!";
    }

        代码解析:strpos() 函数查找字符串在另一字符串中第一次出现的位置。如果未检测到 $_GET["file"] 参数中出现 flag 字符串,那么则执行文件包含,将用户通过 GET 请求传递的参数包含到当前页面中。否则输出字符串 "Hacker!!!" 。注意 !strpos 中添加了 ! 表示按位取反的意思。

        

else {
    highlight_file(__FILE__);
}

        代码解析:如果未检测到用户通过 GET 请求传递了 file 参数,那么执行 highlight_file 函数,此函数对文件进行 PHP 语法高亮显示。用户可以直接在网页中查看到语法高亮显示后的 PHP 代码。

        

        

0x04 参考文献

[1].w3school. PHP error_reporting() 函数[EB/OL]. [2023-05-16]. https://www.w3school.com.cn/php/func_error_reporting.asp.

[2].runoob. PHP isset() 函数[EB/OL]. [2023-05-16]. https://www.runoob.com/php/php-isset-function.html.

[3].w3school. PHP strpos() 函数[EB/OL]. [2023-05-16]. https://www.w3school.com.cn/php/func_string_strpos.asp.

        

        

0x05 总结

文章内容为学习记录的笔记,由于作者水平有限,文中若有错误与不足欢迎留言,便于及时更正。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐