木马webshell
木马webshell
凌晨三点,木马某金融公司的木马运维老张被电话吵醒。监控系统提示,木马内部测试服务器上多了一个名为 upload.php 的木马文件。他揉着眼睛登录上去,木马文件大小只有2KB,木马代码里藏着一句@eval($_POST['x']);——就这么一行,木马整个内网像被撬开了后门。木马
这就是木马webshell,一个藏在正常网页里的木马“幽灵”。它不是木马病毒,不主动传播,木马更像一把备用钥匙。木马攻击者先利用某个上传漏洞,木马把这段代码塞进服务器,木马之后只要通过浏览器访问这个页面,提交特定参数,就能像坐在机房终端前一样执行系统命令。
我见过最骚的操作,是把webshell伪装成图片。攻击者用copy normal.jpg + shell.php shell.jpg命令,把PHP代码拼接在图片二进制尾部。检查文件头,是标准的FF D8 FF E0,图片能正常打开,但当你用菜刀工具去连接时,它就成了一个活体后门。这种混淆手法,让静态扫描工具直接哑火。
木马webshell最可怕的地方在于它的隐蔽性。有一次做应急响应,发现服务器CPU飙高,进程列表里却干干净净。最后排查到IIS日志,发现有个asp文件被反复请求,每次参数都不同。打开那个文件,里面是加密的eval调用,每次执行完就把自身内容改写——查杀时看到的永远是“干净”的代码,真正的载荷早就落地了。
攻击者不会只放一个shell就走。通常他们会先上传一个“小马”(最小化的后门),用它来下载更大的“大马”(功能完整的管理面板)。大马里通常带有虚拟终端、数据库管理、端口扫描、内网代理。我就见过一个改造过的b3744,居然内置了Socks5代理功能,攻击者通过这台肉鸡,把流量转发进内网,把域控服务器当跳板用了整整三周。
别迷信WAF。一次攻防演练中,红队上传的webshell文件名是logo.png,内容被base64编码后分割成多段,分别藏在几个正常的JS文件里。最后通过一个JSONP接口动态拼接执行。WAF规则只拦截了eval、system这些敏感函数,却拦不住这种“碎片化”的加载方式。真正发现问题的是网络流量分析——某个页面频繁向外部IP发送DNS TXT记录查询,那里面藏着加密的命令通道。
木马webshell的清理也是个技术活。简单删除文件远远不够,攻击者可能已经创建了系统用户、修改了注册表自启动项、替换了系统DLL。最稳妥的做法是备份数据后重装系统,但业务不能停,那就得花几个小时手动排查每个可疑文件的时间戳、权限、以及最近被修改过的配置文件。
说实话,没有100%的防护。代码审计、文件完整性监控、最小权限原则、日志分析,这些都得做。但最关键的还是人——开发人员写代码时别偷懒,别相信用户输入;运维人员别图省事,把测试环境暴露在公网。我见过太多案例,都是因为某个临时上传功能忘了删,或者某个老系统没打补丁,给了攻击者可乘之机。
回到老张那个案例。他花了一整夜溯源,最终确认漏洞出在一个三个月前离职的实习生写的文件上传接口上——那个接口没校验文件类型,也没限制目录执行权限。攻击者上传的upload.php,其实是个很老的免杀马,但就是没人发现。老张后来在日志里看到,攻击者用这个shell执行了第一条命令是whoami,第二条是ipconfig——就像一个小偷进门后先环顾四周再打开手电筒。而老张的团队,直到对方翻完抽屉才被监控吵醒。