看我如何用20行代码做日志分析

责声明">
不管是渗透测试、应急响应还是运维,日志分析都万分重要。而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】
  • 发表于 2017-07-29 08:00
  • 阅读 ( 578 )
  • 分类:黑客技术

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
黑客

2107 篇文章

作家榜 »

  1. 黑客 2107 文章