游客发表

可疑webshell

发帖时间:2026-10-17 04:39:42

凌晨两点,可疑服务器监控告警群弹出一条消息:某台Web服务器的可疑/uploads/目录下多了一个名为image_2024.php的文件。文件名看着像图片,可疑后缀却是可疑php。运维同事还补了一句:“文件大小只有3KB,可疑但访问它会返回200,可疑内容空白。可疑”

这就是可疑典型的可疑webshell信号。不是可疑所有webshell都会大摇大摆叫shell.php,攻击者早就不这么干了。可疑他们更倾向于把恶意代码藏进一个看起来人畜无害的可疑文件里,比如伪装成图片、可疑日志、可疑缓存,可疑甚至混进正常业务代码的可疑注释块。

我拿到样本后先看了文件权限。644,所有者是www-data,和正常上传文件一致。但创建时间戳很怪——凌晨1:47,那个时间段没有任何用户上传操作。再看内容,开头是正常的JPEG文件头FF D8 FF E0,后面跟着一段被注释掉的PHP代码。打开注释一看,核心就三行:接收$_POST['cmd'],用system()执行,把结果回显到页面。3KB的壳,功能一点不少。

这种webshell的隐蔽性在于它绕过了常规的文件类型检查。很多上传功能只校验MIME类型和文件头,看到JPEG头就放行。但PHP解析器不管这些,只要后缀是php,注释里的代码照样执行。更阴的是,它平时不主动连接外部C2,而是被动等待指令,流量特征极低。

我翻了一下访问日志。这个文件在过去六小时里被请求了17次,全部来自同一个境外IP,每次POST请求的cmd参数都不一样。有whoami、ls -la /var/www、cat /etc/passwd,还有几条尝试提权的sudo -l。攻击者显然在踩点,还没开始大规模动作。

为什么说它“可疑”而不是“确认”?因为有些正常业务也会用类似手法做动态图片生成,或者开发人员图省事把调试代码写进注释。但结合时间、IP、请求频率和参数内容,基本可以定性。我直接隔离了文件,封了IP,然后去查上传入口。最后发现是一个老旧的文件上传接口,只做了前端JS校验,后端压根没过滤。

清理的时候还发现了一个细节:攻击者在上传成功后,立刻用touch -r把文件时间戳改成了和同目录另一张真实图片一致。要不是监控抓到了创建事件,光看文件列表根本发现不了。这种手法在近两年的入侵案例里越来越常见,说明攻击者在刻意对抗应急响应。

处理完已经凌晨四点。我顺手写了个简单的YARA规则,匹配JPEG头+PHP标签+system或eval的组合,扔进日常扫描任务里。第二天早上又抓到两个变种,一个伪装成.htaccess,一个藏在wp-content/uploads的缩略图里。

webshell这东西,本质上就是攻击者在你服务器上开的一扇后门。它可能只有一行代码,也可能藏得很深。判断可疑与否,别只看文件名和后缀。时间戳、请求模式、代码上下文、权限变化,这些细节拼在一起才能还原真相。凌晨两点的告警不一定都是误报,但每一个都值得你爬起来看一眼。

    热门排行

    友情链接