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

相关推荐
v_348360876221 小时前
Android native端 堆栈打印
android·算法
residual_fan21 小时前
【学术论文】航空发动机故障诊断智能体:基于持续对比强化学习的动态优化方法
人工智能·算法·数据挖掘·数据分析
GreenTea1 天前
OpenAI Agents API 上手实测:一次调用把整个 agent loop 甩给 OpenAI
前端·后端·算法
小程序设计1 天前
某师范学院网络规划与设计
网络·安全
深圳满意度咨询1 天前
医院满意度数字化测评系统:从数据采集到智能决策的技术实践
算法
山东科恩光电1 天前
安全触边技术在提升机械设备安全防护中的应用探讨
安全
xiangyun611 天前
【408数据结构 08】队列:循环队列判空判满,408年年考,一次讲清
c语言·开发语言·数据结构·c++·算法
xiangyun611 天前
【408数据结构 06】双链表、循环链表、静态链表
c语言·开发语言·数据结构·c++·算法
jimmyleeee1 天前
大模型安全之十五:AI Access Control:当“门禁”遇上会思考的系统
人工智能·安全
302wanger1 天前
推荐下我的两个AI信息源
算法