主页 > 网络知识 > 绕过Disable Functions来搞事情(10)

绕过Disable Functions来搞事情(10)

PHP的SplDoublyLinkedList双向链表库中存在一个用后释放漏洞,该漏洞将允许攻击者通过运行PHP代码来转义disable_functions限制函数。在该漏洞的帮助下,远程攻击者将能够实现PHP沙箱逃逸,并执行任意代码。更准确地来说,成功利用该漏洞后,攻击者将能够绕过PHP的某些限制,例如disable_functions和safe_mode等等。

详情请看:https://www.freebuf.com/articles/web/251017.html

利用方法

我们通过这道题 来演示一下利用 SplDoublyLinkedList UAC 来绕过disable_functions的具体方法。

进入题目,给出源码:

 

image-20210209222708966

 

可知,我们传入的payload长度不能大于25,我们可以用以下方法来绕过长度限制:

a=eval($_POST[1]);&1=system('ls /');

发现没反应:

 

image-20210209223843155

 

直接连接蚁剑:

 

image-20210115231040593

 

连接成功后依然是没法执行命令:

 

image-20210209222942933

 

很有可能是题目设置了disable_functions来限制了一些命令执行函数,我们执行phpinfo看一下:

 

image-20210115230316047

 

发现确实限制了常用的命令执行函数,需要我们进行绕过。

然后我们需要下载一个利用脚本:

 

image-20210209223353863

 

将脚本上传到目标主机上有权限的目录中(/var/tmp/exploit.php),包含该exploit.php脚本即可成功执行命令:

 

image-20210209223639600

 

利用 FFI 扩展执行命令

使用条件:

Linux 操作系统

PHP >= 7.4

开启了 FFI 扩展且ffi.enable=true

原理简述

PHP 7.4 的 FFI(Foreign Function Interface),即外部函数接口,允许从用户在PHP代码中去调用C代码。

FFI的使用非常简单,只用声明和调用两步就可以。

首先我们使用FFI::cdef()函数在PHP中声明一个我们要调用的这个C库中的函数以及使用到的数据类型,类似如下:

$ffi = FFI::cdef("int system(char* command);"); # 声明C语言中的system函数

这将返回一个新创建的FFI对象,然后使用以下方法即可调用这个对象中所声明的函数:

$ffi ->system("ls / > /tmp/res.txt"); # 执行ls /命令并将结果写入/tmp/res.txt

由于system函数执行命令无回显,所以需要将执行结果写入到tmp等有权限的目录中,最后再使用echo file_get_contents("/tmp/res.txt");查看执行结果即可。

可见,当PHP所有的命令执行函数被禁用后,通过PHP 7.4的新特性FFI可以实现用PHP代码调用C代码的方式,先声明C中的命令执行函数或其他能实现我们需求的函数,然后再通过FFI变量调用该C函数即可Bypass disable_functions。

利用方法

下面,我们通过 这道题来演示利用PHP 7.4 FFI来突破disable_functions的具体方法。

进入题目:

 

image-20210131172115794

 

查看源码发现提示:

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!