CTFHub Web进阶-PHP:Bypass_disable_function通关4之PHP-FPM
目录
一、PHP-FPM绕过
1、 PHP-FPM 绕过核心原理
2、使用蚁剑进行PHP-FPM绕过
二、渗透实战
1、开启题目
2、打开靶场
3、源码分析
4、蚁剑直接连接
5、虚拟终端
6、蚁剑工具-disable function
(1)disable function插件
(2)连接新木马
(3)新木马-文件系统
(4)新木马-虚拟终端-获取flag
本文详细讲解CTFHub的Web进阶中disable-functions的PHP-FPM关卡的渗透全流程。通过分析PHP-FPM绕过原理(利用FastCGI协议直接通信),展示如何使用蚁剑工具连接Webshell并加载Bypass插件,最终成功执行系统命令获取flag。实战部分包括靶场环境搭建、源码分析、蚁剑连接、虚拟终端操作等全流程,重点演示了通过生成代理脚本绕过disable_function限制的技术方案。
一、PHP-FPM绕过
1、 PHP-FPM 绕过核心原理
PHP-FPM绕过手法的核心在于与PHP-FPM服务直接通信,从而绕过PHP层面的限制。其基本原理可以概括为以下几步:
-
利用条件:首先,你需要有一个Webshell,并且服务器环境是Nginx+PHP-FPM或Apache+PHP-FPM。PHP-FPM通常会监听一个端口(如9000)或一个Unix Socket文件(如
/var/run/php/php7.2-fpm.sock)。 -
通信协议:PHP-FPM采用FastCGI协议进行通信。通过向PHP-FPM监听的目标发送精心构造的FastCGI协议数据包,我们可以直接与其交互。
-
执行任意PHP代码:在FastCGI协议中,可以通过设置某些参数(如
PHP_VALUE和PHP_ADMIN_VALUE)来动态修改PHP配置。攻击者可以借此开启auto_prepend_file等选项,或者直接传递PHP代码让其执行,从而突破disable_functions的限制。
2、使用蚁剑进行PHP-FPM绕过
蚁剑(AntSword) 是一款强大的Webshell管理工具,它集成了多种Bypass disable_function的插件,具体步骤如下所示:
-
连接Webshell:使用蚁剑成功连接到你的Webshell。
-
选择Bypass插件:
-
在蚁剑中,找到并加载"Bypass Disable Functions"相关插件。根据你的环境,选择
Fastcgi/PHP-FPM模式。 -
插件通常会要求你填写PHP-FPM的通信地址。这可以是:
-
TCP地址:例如
127.0.0.1:9000(如果PHP-FPM监听端口) -
Unix Socket地址:例如
unix:///var/run/php/php7.2-fpm.sock(你需要知道socket文件的准确路径,可以通过查看PHP配置文件或phpinfo()信息获取)
-
-
-
生成代理脚本:配置好地址后,插件会在服务器上生成一个特殊的代理脚本(例如
.antproxy.php)。 这个脚本的作用是将你的请求通过FastCGI协议转发给PHP-FPM服务。 -
切换连接:使用蚁剑重新连接这个新生成的代理脚本的URL。
-
执行命令:连接成功后,你就可以通过这个代理在蚁剑的虚拟终端中正常执行系统命令了,例如
tac /flag
二、PHP-FPM关卡渗透实战
1、开启题目
打开靶场关卡,页面提示“正常情况下, PHP-FPM 是不会对外开放的。在有 webshell 之后,这就变得不一样了。学习通过攻击 PHP-FPM 达到 Bypass 的目的”,如下所示。

2、打开靶场
http://challenge-20f79b9735a3d332.sandbox.ctfhub.com:10800/

3、源码分析
这段CTF题目源码通过eval($_REQUEST['ant'])提供远程代码执行入口,但关键系统函数已被禁用。题目要求攻击PHP-FPM(FastCGI进程管理器)来绕过限制。攻击原理是利用PHP-FPM的未授权访问风险,通过构造特殊的FastCGI协议数据包,直接与PHP-FPM的9000端口通信。当服务器采用FPM/FastCGI模式运行PHP时,攻击者可以伪造请求修改PHP配置,将任意文件扩展名解析为PHP,或直接执行PHP代码。这种技术不依赖系统命令函数,而是通过网络协议层面的攻击实现代码执行,有效突破disable_function的限制。
http://challenge-20f79b9735a3d332.sandbox.ctfhub.com:10800/
| CTFHub Bypass disable_function —— 攻击PHP-FPM 本环境来源于AntSword-Labs
|
很明显php代码是一个高危的Webshell后门,允许攻击者通过ant参数远程执行任意PHP代码,完全控制Web服务器,可进行文件操作、命令执行、数据库访问等恶意行为,严重威胁服务器安全。
-
@操作符:抑制错误显示,增强隐蔽性 -
$_REQUEST['ant']:接收GET或POST参数中的ant参数 -
eval():将字符串作为PHP代码执行,构成任意代码执行安全风险
4、蚁剑直接连接
http://challenge-20f79b9735a3d332.sandbox.ctfhub.com:10800/ 密码ant


5、虚拟终端
通过“选中木马的会话-右键-虚拟终端”进入在木马的虚拟终端窗口,如下所示。

如下所示,命令执行失败。

6、蚁剑工具-disable function
(1)disable function插件
我们通过蚁剑工具的disable function插件绕过服务器的限制,具体操作步骤如下所示。

插件选择 Fastcgi/PHP-FPM模式,具体如下所示。

点击后进入如下界面。

FPM/FCGI 地址 localhost:9000,通讯地址我们选择本地的 (相当于他服务器的本地),然后点击开始如下所示。

此时进入根目录,目录中多了.antproxy.php文件,如下所示。

(2)连接新木马
http://challenge-7e5a3b55b4ffb061.sandbox.ctfhub.com:10800/.antproxy.php
密码ant

添加后如下所示。

(3)新木马-文件系统
通过“选中新木马的会话-右键-文件系统”进入在新木马的文件系统窗口,如下所示。

查看根目录,发现/readflag和/flag文件,如下所示。

查看/readflag文件,具体如下所示。

(4)新木马-虚拟终端-获取flag
在新弹木马的虚拟终端窗口,首先我们尝试执行ls命令,如下所示成功返回当前目录结构。

在新木马的虚拟终端中输入ls /、cat /readflag和tac /flag命令成功获取到flag,如下所示。

