按时间定位可疑 Web 文件
Webshell 的落地时间通常与入侵时间高度吻合,因为攻击者利用漏洞成功后会立即投放脚本。所以按修改时间与创建时间列出 Web 目录下最近变更的脚本文件,是一条成本很低、命中率不错的线索。用法上要注意两点:mtime 可以被 touch 篡改,所以要同时看 ctime;正常发布也会改动文件,所以要先排除业务发布窗口,再看剩下的那一批。
基本信息
| 时间字段 | mtime 最后修改时间、ctime 元数据变更时间,后者不易被伪造 |
|---|---|
| 范围 | Web 根目录、上传目录、缓存目录、模板目录 |
| 文件类型 | php、jsp、jspx、aspx、phtml 以及被改名的可执行脚本 |
| 配套线索 | 同目录下新增的 .htaccess、图片目录里的脚本文件 |
| 输出组织 | 按时间升序排列,形成人工审阅的优先级顺序 |
| 权限要求 | 普通用户即可读取 Web 目录,涉及他人目录需相应权限 |
典型使用场景
- 确认漏洞利用的时间点,与访问日志里的异常请求对齐
- 在大量文件中快速缩小人工审阅范围
- 排查上传目录与其他可写目录中的最新文件
- 清理后复扫,确认没有新的脚本在观察期内落地
- 为溯源提供「什么时候被投放」的准确时间点
按时间列出近期修改脚本
按时间列出近期修改脚本
find /www/wwwroot -type f -name '*.php' -mtime -7 -printf '%TY-%Tm-%Td %TH:%TM %s %p\n' 2>/dev/null | sort | head -n 40
find /www/wwwroot -type f -newermt '2026-10-01' ! -newermt '2026-10-13' -name '*.php' -ls 2>/dev/null | head -n 20
find /www/wwwroot/uploads -type f -mtime -30 -printf '%TY-%Tm-%Td %p\n' | sort | head -n 20 # 上传目录重点看
find /www/wwwroot -type f -name '*.php' -ctime -7 -printf '%TY-%Tm-%Td %p\n' 2>/dev/null | sort | head -n 20时间线索与误报来源
| 线索 | 说明 | 误报来源 |
|---|---|---|
| mtime 落在入侵窗口 | 文件在那段时间被写入 | 正常发布、运维改配置、日志轮转 |
| ctime 新于 mtime | 元数据被改动过 | 权限调整、复制文件、备份恢复 |
| 文件大小异常小 | 一句话 webshell 往往只有几十字节 | 占位文件、模板片段 |
| 扩展名与内容不符 | 图片文件里含脚本标签,如 php 代码出现在图片里 | 图片处理库写入的元数据 |
| 同一分钟批量新增 | 攻击者一次投放多个脚本 | 批量发布、缓存预热 |
先排除正常发布:与发布平台记录、CI 流水线记录核对时间段,把已解释的文件从候选列表里划掉,剩下的才是需要人工读内容的文件。这一步能把审阅量降低一个数量级。
别忽略上传目录与缓存目录:一个是攻击者最常投放的位置,一个常被误认为「纯数据」而被跳过。目录存在可写权限加脚本解析能力,就构成落地条件。