我有一个 Web 服务器,由于 Wordpress 版本过旧,一些黑客上传了一个 webshell。通过它,他启动了一个进程,但 ps 命令没有显示该进程的任何名称:
root@serv ~ # ps aux|grep " 326 "
us432 326 0.0 0.0 25032 4476 ? S Aug27 0:16
root 3334 0.0 0.0 16656 2092 pts/2 S+ 14:58 0:00 grep 326
由于这个事实,直到今天我才发现这个问题。
服务器操作系统是 Debian 8,带有 Apache 和 PHP 7。该网站在非特权用户下运行。
我搜索了如何启动一个没有名称的进程或如何在执行期间删除它的名称,但我没有找到任何东西。
有人知道这是怎么可能的吗?
先谢谢了。
答案1
首先,一个建议:既然您知道 PID,请使用ps -p
列出特定 PID。我的标准 goto 命令是ps -fp <pid>
。
我猜可执行文件的名称是由不可打印的字符组成的,只是为了使其难以找到或操作。(在 *nix 上,所有字符在文件名中都是有效的;其中一些字符很难正确转义。)要显示这些隐藏字符,请尝试ps -fp 326 | cat -vet
。我使用“带我的猫去看兽医”这个助记符来记住那些显示所有不可打印字符的标志。例如,可以将相同的技巧用于ls
输出以发现您无法删除的文件的名称以制表符结尾。