Web 目录可疑脚本排查
Web 目录排查通常分两步:先按时间窗筛出新增或修改的脚本文件,把范围从海量文件中压缩到可疑集合;再按危险函数特征逐个读代码确认。时间窗是效率关键,入侵窗口已知时可以把几十天缩到几小时;特征匹配只负责给候选排序,最终判定要看完整调用链、文件属主与访问记录。
基本信息
| 时间过滤 | find <目录> -newermt '<起点>' ! -newermt '<终点>' |
|---|---|
| 特征函数 | eval、assert、base64_decode、system、passthru 等组合 |
| 常见落地位置 | /var/www/html、上传目录、缓存目录、日志目录 |
| 权限视角 | 属主为 Web 运行用户且带可执行位的脚本更可疑 |
| 判定原则 | 特征命中只是候选,须读代码确认数据来源与执行路径 |
典型使用场景
- 按已确定的入侵窗口筛出窗口内被写入的脚本文件
- 检查上传目录与缓存目录中出现的异常脚本
- 核对正常文件是否被插入后门段落或额外的执行入口
- 结合访问日志确认可疑脚本是否真的被外部请求调用过
- 清理前固定样本与哈希,为后续分析保留原始文件
两步排查
两步排查
find /var/www -xdev -type f -newermt '-30 days' \( -name '*.php' -o -name '*.jsp' \) 2>/dev/null | head -30
find /var/www -xdev -type f -name '*.php' -newermt '2026-01-01' ! -newermt '2026-01-03' 2>/dev/null
find /var/www -xdev -type f -perm -u+x -name '*.php' 2>/dev/null | head # 带执行位的脚本
grep -RlnE 'eval\(|base64_decode\(|assert\(|system\(' /var/www/html --include='*.php' 2>/dev/null | head
ls -lt --time-style=long-iso /var/www/html | head -20 # 目录内最近改动排查维度
| 维度 | 方法 | 判断要点 |
|---|---|---|
| 时间 | find -newermt 限定窗口 | 优先看窗口内新增与修改的文件 |
| 函数特征 | 匹配危险函数与编码函数 | 组合出现比单一命中更可疑 |
| 属主与权限 | ls -l 看属主与权限位 | Web 用户写入且带执行位需重点看 |
| 访问记录 | 访问日志中对应路径的请求 | 被外部调用是实际利用的旁证 |
特征匹配必然误报:模板引擎、编码库、混淆过的正常代码都可能命中 eval 或 base64_decode。定性前要读完整文件,确认参数来源与调用条件,不能只凭关键词就下结论。
确认可疑文件之前不要删除或覆盖:先复制样本并计算哈希,保留原路径与时间信息,再按处置流程处理,否则后续既无法复核,也无法追究本次事件的责任边界。