声明:该公众号大部分文章来自作者日常学习笔记,未经授权,严禁转载,如需转载,联系洪椒攻防实验室公众号。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。
最近都在HW,相信各位师傅肯定遇到过accesslog没有按照日期进行分割的情况,一个文件十几个G,甚至几十个G 这种情况我们如果直接拷下来的话 将会浪费大量时间,而且现有的工具根本打不开这么庞大的文件。
那么我们怎么办呢,Linux有个自带工具,叫做awk,Awk是一种用于文本处理的强大工具,常用于在Linux系统中对数据进行格式化、分析和转换。它具有灵活的正则表达式匹配、条件语句、循环语句和内置函数等功能,并且易于使用。
之前没有怎么使用过,最近的HW因为需要溯源分析日志,所以使用的比较多,以下举例几个比较常用的语法,供师傅们参考使用。
因为很多客户根本没有按照日期进行分割,所以我们首先需要先将日志内容按照时间进行提取:
awk '{split($4,array,"[");if(array[2]>="17/Aug/2023:16:30:00" && array[2]<="17/Aug/2023:17:00:00"){print $0}}' access.log-20230817 >>result.txt 各位师傅们按照需要溯源分析的时间段进行日志提取即可。
提取到指定时间段的日志后,即可开始日志分析,先介绍下常用的命令:
1、打印文件内容
awk '{ print }' filename
2、打印指定列的内容:
awk '{ print $1 }' filename
对于日志中的列,我们怎么知道是哪一列呢?下面这是一条完整的accesslog日志
180.76.143.72 - - [21/Jul/2022:19:04:48 +0800] "POST /staticRoute/quick/vehiclePosition HTTP/1.1" 200 1395 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_66)
其实是按空格来分割的 包括大括号内,只要有空格都是单独的一列。第一列是IP
,第二列是-
,第三列也是-
,第四列是[21/Jul/2022:19:04:48
以此类推。
打印第1列:打印第7列:
3、对于我们分析日志来说,常用的有以下几个需求:
查看访问最频繁的前十个IP和次数:
awk '{print $1}' result.txt | sort -n |uniq -c | sort -rn | head -n 10
查看访问最频繁的前十个接口和次数:查找所有访问
/webroot/*
接口的日志(模糊查询),并重定向至新文件:
awk '//webroot/*/ {print}' access.log-20230817 >>result2.txt
查找所有访问指定接口/webroot/decision/remote/design/channel
的日志:
awk '/webroot/decision/remote/design/channel/ {print}' access.log
查找某个IP的访问的所有接口:
grep ^112.224.166.198 access.log | awk '{print $1,$7}'
查找某个IP的访问的请求列表,按请求的访问次数降序:
grep '112.224.166.198' access.log-20230817 |awk '{print $7}'|sort |uniq -c |sort -rn |head -n 10
awk还具有很多强大的功能,这里仅介绍了一些在溯源中可以常用的几条命令,供师傅们参考,其他的命令 各位师傅请自行百度查询。
原文始发于微信公众号(洪椒攻防实验室):HW蓝队技巧—日志分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论