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

[ACTF2020 新生赛]Include 思路及解法 大家好你们可以叫我凌是个16岁的网络安全者。今天我们来完成的是 [ACTF2020 新生赛]Include 那废话不多说我们直接开始吧解题思路先启动靶场。进入靶场界面发现有个链接。我们依旧不着急点击先查看源代码。meta charsetutf8 a href?fileflag.phptips/a界面代码只有个有价值的 a 标签于是我点击 F12 的网络界面看看有没有什么线索。可是事实上并没有任何东西那我们就先尝试点进该超链接查看是否有线索。meta charsetutf8 Can you find out the flag?观察 URL其中有 “flieflag.php”那我们就尝试对它进行文件包含漏洞测试。如果都没有效果就上扫描器再看看。我们使用 Burp 进行截包随后发送到重发模块。我们发送以下数据包看看是否返回了 /etc/passwd 文件的内容。GET /?file../../../../etc/passwd HTTP/2 Host: 17468719b29a48dbc54973b5.http-ctf2.dasctf.com成功返回了 /etc/passwd 文件的内容那就证明该题目存在文件包含漏洞。那我们继续构造数据包POST /?filephp://input HTTP/2 Host: 17468719b29a48dbc54973b5.http-ctf2.dasctf.com Content-Type: application/x-www-form-urlencoded Content-Length: 24 ?php system(ls); ?发现被拦截了随后经过测试发现是对伪协议 input 进行了拦截如图所示POST /?filephp:// HTTP/2 Host: 17468719b29a48dbc54973b5.http-ctf2.dasctf.com Content-Type: application/x-www-form-urlencoded Content-Length: 24 ?php system(ls); ?那我们尝试更换协议用 filter 伪协议尝试突围。POST /?filephp://filter/readconvert.base64-encode/resourcephp.php HTTP/2 Host: 17468719b29a48dbc54973b5.http-ctf2.dasctf.com发现成功返回 base64编码 内容那我们直接进行解码看看有没有线索。解码得到了以下内容?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 扩展较少见。3. php://input 被拦截时的应对这道题的 input 伪协议被 WAF 或配置禁用了但 filter 仍然可用。当一个伪协议被拦时换另一个试试——文件包含利用的常规思路。4. filter 读源码的标准操作“php://filter/readconvert.base64-encode/resourceflag.php” 会读取 flag.php 的源码并以 Base64 编码输出。拿到 Base64 字符串后解码Flag 就藏在注释或变量里。解题关键步骤1. 发现入口页面上有 flag.php 超链接点击后 URL 变成 ?fileflag.php确认文件包含参数。2. 确认漏洞用 “?file../../../../etc/passwd” 测试成功读取系统文件确认存在本地文件包含漏洞。3. 尝试 RCE用 php://input 配合 POST 体 ?php system(ls);? 尝试命令执行发现被拦截。4. 换伪协议读源码改用 “php://filter/readconvert.base64-encode/resourceflag.php”成功读取 flag.php 源码。5. 解码拿 FlagBase64 解码后Flag 在注释中。