从网站访问日志里找入侵痕迹,grep这条命令就够起步

来源:互联网 时间:2026-10-01

站被挂马之后,多数人的第一反应是打开文件管理器,把不认识的文件删掉。这个动作方向反了。文件一删,痕迹也一起没了,你既不知道对方从哪个口子进来,也不知道他留了几个入口,过两周很可能再中一次。正确的第一步是翻日志。

日志不用全看,也不会看不过来。Nginx和Apache的访问日志都是格式化的文本,每行一条请求,字段位置固定。学会认字段,再配几条命令,一台日访问几千个IP的站,二十分钟就能筛出可疑的部分。

Nginx的默认访问日志格式叫combined,官方给的定义是:客户端地址、远程用户、时间、请求行、状态码、响应体字节数、来源页和用户代理。理解这几个字段各自的含义,是后面所有筛查动作的前提。

其中四个字段最有用。请求行能告诉你是谁、用什么方法、访问了哪个地址;状态码里成功上传往往伴随200或302;用户代理是扫描器最容易露馅的地方;时间戳则能看出短时间内的大量请求是不是集中在同一秒。

响应体字节数这个字段最容易被忽略,但它对判断很有用。上传成功一个脚本文件,响应体通常很小;而正常页面动辄几十上百KB。一个提交请求只回了很少的字节,这个组合值得单独拎出来看。

还有一处要提醒:如果站前面挂了CDN或反向代理,日志里的客户端地址会变成代理的地址,真实访客地址在转发头里。只看默认字段,你会以为所有请求都来自同一个IP,那就什么都筛不出来。

第一条是按IP统计请求数,找刷得最凶的那个。把日志第一列取出来排序计数,再按数量倒序取前二十行。正常站的访问分布长尾明显,如果某个IP独占几千次,它要么在采集,要么在扫描。

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20

第二条是筛上传请求。抓所有使用提交方法访问脚本类地址的记录,重点看返回状态是成功的那几条。这一步常常能直接定位到攻击者上传的那个文件,拿到文件名,后面的排查就有方向了。

grep -E "POST .*\.(php|jsp|asp)" access.log | grep -E " (200|302) "

第三条是看扫描痕迹。把返回404的记录取出来,按请求地址分组计数。扫漏洞的工具会连续请求一堆不存在的路径,比如常见的后台地址、备份文件、配置文件,这些路径在正常访问里几乎不会出现。

grep " 404 " access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -30

三条跑完,你会得到三个名单:可疑IP、可疑文件、被扫过的路径。拿着这三个名单再去服务器上核对,比漫无目的翻整个目录树要快得多。这也是为什么我一直说,先看日志,再动手清理。

日志这个东西,出事的时候才想起来找,往往已经被轮转覆盖了。把访问日志的保留时间设长一点,定期导出一份到本地,平时多花五分钟,出事的时候少慌一整天。

相关文章

标签:

A5创业网 版权所有