不管是渗透测试、应急响应还是运维,日志分析都万分重要。而linux下日志分析最好的工具那就是linux自带的各种命令了。本文将从一个小例子来介绍"如何用linux命令做日志分析"。 0x00 源码 #…
无论是渗透测试,应急响应还是操作和维护,日志分析都非常重要。在Linux下进行日志分析的最佳工具是Linux附带的各种命令。本文将从一个小例子中介绍“如何使用linux命令进行日志分析”。
0x00源代码

#!/斌/庆典
如果ls ./*.result&>的/dev/null的
然后
Rm * .result
网络连接
触摸log.result
对于我在www - * .log
做
回声$ i .
awk'$ 9==200 {print $ 7}'$ i | grep -i'^/admin/upload /.* \ .html $'| sort | uniq -c | sed's/^ * //g'> $ i.result
Cat $ i.result>> log.result
Echo $ i.result完成了
完成
Echo final.log.result .
排序-k2 log.result | uniq -f1 --all-repeated=separate | ./log.awk | sort -rn> final.log.result
Echo final.log.result完成了
Log.awk
#!/usr/bin/awk -f
开始{
RS=''}
{
总和=0
对于(I=1; I&LT=NF;我++){
如果((I%2)!=0){
总和+=$ i}
}
打印金额,2美元
}
0x01 Apache日志
以apache日志为例。这是三个常见的apache日志记录。
58.40.124.211 - - [25/Jul/2017: 08: 53: 12 +0800]'GET /vulApps_plat/pentest/e31010629c1cb5aa4252c3832f77ed77/index.html HTTP/1.1'200 4649' - ''Mozilla/5.0(Windows NT 6.1; WOW64; rv: 54.0)Gecko/20100101 Firefox/54.0'
58.40.124.211 - - [25/Jul/2017: 08: 53: 12 +0800]'GET /vulApps_plat/pentest/e31010629c1cb5aa4252c3832f77ed77/js/jquery-2.2.4.min.js HTTP/1.1'200 85578'http://121.43。 182.76/vulApps_plat/pentest/e31010629c1cb5aa4252c3832f77ed77/index.html''Mozilla/5.0(Windows NT 6.1; WOW64; rv: 54.0)Gecko/20100101 Firefox/54.0'
58.40.124.211 - - [25/Jul/2017: 08: 53: 13 +0800]'GET /vulApps_plat/pentest/e31010629c1cb5aa4252c3832f77ed77/favicon.ico HTTP/1.1'200 1517' - ''Mozilla/5.0(Windows NT 6.1; WOW64; rv: 54.0)Gecko/20100101 Firefox/54.0'
58.40.124.211表示访问者IP,25/Jul/2017: 08: 53: 12 +0800表示时间,GET表示请求方法,vulApps_plat/pentest/e31010629c1cb5aa4252c3832f77ed77/index.html表示访问地址,HTTP/1.1表示使用HTTP协议版本1.1,200表示响应状态代码,Mozilla/5.0(Windows NT 6.1; WOW64; rv: 54.0)Gecko/20100101 Firefox/54.0表示访问者用户代理
我们分析的主要问题是:
- IP地址
- 访问地址
- 状态代码
这次,它只演示地址的访问量并对其进行排序,即流量地址
0x02想法
Apache日志文件格式的形状类似于201707029.log。文件格式设计的总体思路如下:
*处理每日日志并计算每日文章访问次数
*生成每月访问结果,计算每月访问量
*生成年度访问结果并计算年度访问量
0x03命令解析
0x03.1 awk
awk '$9 == 200 {print $7}' $i
Awk默认为空格作为分隔符,$ 9表示匹配为200,打印第七个字段
0x03.2 grep
grep -i '^/admin/upload/.*\.html$'
根据awk匹配的结果,匹配访问的地址是`/admin/upload /.* \ .html`的记录。我的意思是不区分大小写,`^ $`是正则表达式的开头。
0x03.3排序
sort -k2 log.result
由于合成记录是无序的,因此对其进行分类。但第一个字段是访问次数,因此使用`k2`参数按URL排序。
sort -rn > final.log.result
对awk脚本的处理结果进行排序,将默认值排序为使用第一个字段,参数r表示反向顺序,从大行到小行;参数n表示按数字形式排序
0x03.4 uniq
uniq -c
使用uniq过滤重复记录,使用-c表示添加记录的次数。
uniq -f1 --all-repeated=separate
参数`f1`表示忽略第一个字段(访问次数),仅考虑以下字段(URL)。参数`all-repeated=separate`意味着过滤掉只出现一次的所有记录,保留所有重复记录,并用空行分隔每个组。
0x03.5 sed
sed 's/^ *//g' > $i.result
由于uniq中的每个记录都以空格开头,因此必须先删除它。 sed命令是一个处理行文本的编辑器。 `s/^ * //g'`是一个正则表达式(^和*之间的空格),表示每行记录的空格被替换为null(即删除)。并将排序结果重定向到文件。
0x03.6>和>>
`>`表示重定向,即输出覆盖,'>>`也是重定向,但它意味着附加
0x03.7 log.awk
首先,默认情况下,awk使用'\ n'作为记录的分隔符。设置RS=''表示将空行更改为分隔符。 NF是一个awk内置变量,表示当前行中的字段总数。由于输入文件包含两个字段,第一个是访问号码,第二个是URL。所以这是一个有条件的判断。只要累积奇数场,就跳过偶数场。最后,每个记录输出一个累加值和一个由空格分隔的URL。
参考文章:
http://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html
http://blog.csdn.net/long2746004900/article/details/53367353
http://www.cnblogs.com/wangqiguo/p/5863266.html
http://blog.csdn.net/github_33736971/article/details/54286736
http://blog.csdn.net/wenxuechaozhe/article/details/52564394
http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html
【本文由 安全脉搏编辑w2n1ck 编写,转载请注明“转自安全脉搏”,并附上链接: https://www..com/?p=59608&preview=true】