1.Mod CGI就是把PHP做为APACHE一个内置模块,让apache http服务器本身能够支持PHP语言,不需要每一个请求都通过启动PHP解释器来解释PHP.
2.它可以将cgi-script文件或者用户自定义标识头为cgi-script的文件通过服务器运行.
3.在.htaccess文件中可定制用户定义标识头
4.添加Options +ExecCGI,代表着允许使用mod_cgi模块执行CGI脚本
5.添加AddHandler cgi-script .cgi,代表着包含.cgi扩展名的文件都将被视为CGI程序
所以我们的脚本:
.htaccess
shell.cgi
#!/bin/sh echo&&cd "/var/www/html";payload;echo [S];pwd;echo [E]利用过程:
手动:新建.htaccess文件→新建shell.cgi文件→最后访问shell.cgi即可执行payload,实现RCE
自动:蚁剑使用bypass disable functions 插件,选择相应的模式,直接运行即可,通过虚拟终端直接执行/readflag
具体原理可见这两篇博客,讲的非常详细。我菜鸡一个,就不再讲了
攻击PHP-FPM 实现Bypass Disable Functions :https://zhuanlan.zhihu.com/p/75114351?from_voters_page=true
Nginx+Php-fpm 运行原理详解 :https://juejin.im/post/58db7d742f301e007e9a00a7
利用过程:
自动:使用蚁剑脚本后,上传了.antproxy.php,创建一个副本,连接此shell,即可直接bypass
这里直接也有大牛现成的poc,直接拿来打就行了
Json Serializer UAF && PHP7 GC with Certain Destructors UAF
php7-gc-bypass漏洞利用PHP garbage collector程序中的堆溢出触发进而执行命令
影响范围是linux,php7.0-7.3
https://github.com/mm0r1/exploits/blob/master/php7-gc-bypass/exploit.php
php-json-bypass漏洞利用json序列化程序中的堆溢出触发,以绕过disable_functions并执行系统命令
影响范围是linux,php 7.1-7.3
https://github.com/mm0r1/exploits/blob/master/php-json-bypass/exploit.php
当然直接用蚁剑也是一样的
FFIFFI(Foreign Function Interface),即外部函数接口,允许从用户区调用C代码。当PHP所有的命令执行函数被禁用后,通过PHP 7.4的新特性FFI可以实现用PHP代码调用C代码的方式,先声明C中的命令执行函数,然后再通过FFI变量调用该C函数即可Bypass disable_functions
php文件
$ffi = FFI::cdef("int system(const char *command);"); $ffi->system("payload > /tmp/123"); echo file_get_contents("/tmp/123"); @unlink("/tmp/123");运行后即可得到执行结果
总结蚁剑的github上有官方环境,不想复现的可以直接在ctfhub上找
rce这块感觉水很深,尤其是各种乱七八糟不要字母,数字什么构造的,现在又学到了新姿势。继续学习把
三篇总结bypass disable functions的博文:
https://www.cnblogs.com/zw1sh/p/12632126.html
https://github.com/AntSwordProject/AntSword-Labs/tree/master/bypass_disable_functions