利用python分析access日志的方法


Posted in Javascript onOctober 26, 2016

前言

WAF上线之后,处理最多的是误报消除。

产生误报有多种原因,比如web应用源码编写时允许客户端提交过多的cookie;比如单个参数提交的数值太大。

把误报降低到了可接受的范围后,还要关注漏报。WAF不是神,任何WAF都可能被绕过。所以还需要定位漏过的攻击,明确漏报的原因,才能update WAF的策略。

要定位漏报,就必须分析Web应用的访问日志了。一个站点,每天产生的access日志大概接近1GB,显然靠肉眼看是不现实的。这就需要用python帮助自动分析。

实现思路

拿我司某Web系统举例:

     apache开启了access日志记录

     日志规则是每小时生成一个日志文件,以站点名称为文件名,以日期+时间为后缀。例如:special.XXXXXX.com.cn.2016101001

要分析这些散碎的日志文件,我的思路如下:

     1、根据用户命令行输入获取日志文件所在目录;

     2、遍历目录下所有文件,合并到一个文件;

     3、定义web攻击常见payload的字符串:

          SQLi的:select、union、+?+;

          Struts的:ognl、java

          webshell常见的:base64、eval、excute

使用正则逐行匹配,将命中的日志复制到单独的文件。

实现代码

代码如下:

# -*-coding: utf-8 -*-
import os,re,sys
if len(sys.argv) != 2 :
  print 'Usage : python logaudit.py <path>'
  sys.exit()
logpath = sys.argv[1]
#获取输入参数的文件路径'
merge = re.compile(r'.*(\d[10])')
for root , dirs , files in os.walk(logpath):
  for line in files:
    #遍历日志文件夹,合并所有内容到一个文件
    pipei = merge.match(line)
    if pipei != None:
      tmppath = root + '\\' +line
      logread1 = open(tmppath,'r')
      logread = logread1.read()
      log2txt = open('.\\log.txt','a')
      log2txt.write(logread)
      log2txt.close()
      logread1.close()
    else:
      exit
log = open('.//log.txt','r')
logread = log.readlines()
auditString = re.compile(r'.*[^_][sS][eE][lL][eE][cC][tT][^.].*|.*[uU][nN][iI][Oo][nN].*|.*[bB][aA][sS][eE][^.].*|.*[oO][gG][nN][lL].*|.*[eE][vV][aA][lL][(].*|.*[eE][xX][cC][uU][tT][eE].*')
writelog = open('.//result.txt','a')
for lines in logread:
  auditResult = auditString.match(lines)
  if auditResult != None:
    writelog.write(auditResult.group())
    writelog.write('\n')
  else:
    exit
writelog.close()
log.close()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
JavaScript自定义DateDiff函数(兼容所有浏览器)
Mar 01 Javascript
再谈querySelector和querySelectorAll的区别与联系
Apr 20 Javascript
js中function()使用方法
Dec 24 Javascript
window.location不跳转的问题解决方法
Apr 17 Javascript
javascript每日必学之运算符
Feb 16 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
Mar 02 Javascript
BootStrap的Datepicker控件使用心得分享
May 25 Javascript
详解基于webpack和vue.js搭建开发环境
Apr 05 Javascript
Vue.js实现模拟微信朋友圈开发demo
Apr 20 Javascript
原生JS实现微信通讯录
Jun 18 Javascript
Vue 请求传公共参数的操作
Jul 31 Javascript
Vue项目打包编译优化方案
Sep 16 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
Oct 26 #Javascript
关于Jquery中的事件绑定总结
Oct 26 #Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
Oct 25 #Javascript
理解JavaScript原型链
Oct 25 #Javascript
Ztree新增角色和编辑角色回显问题的解决
Oct 25 #Javascript
jQuery+json实现动态创建复杂表格table的方法
Oct 25 #Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
Oct 25 #Javascript
You might like
php编写的抽奖程序中奖概率算法
2015/05/14 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
2015/12/10 PHP
php合并数组并保留键值的实现方法
2018/03/12 PHP
php实现session共享的实例方法
2019/09/19 PHP
JavaScript Archive Network 集合
2007/05/12 Javascript
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
用jquery修复在iframe下的页面锚点失效问题
2014/08/22 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
2015/09/26 Javascript
深入探讨前端框架react
2015/12/09 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
2016/01/19 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
2019/07/09 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
js实现筛选功能
2020/11/24 Javascript
Python版的文曲星猜数字游戏代码
2013/09/02 Python
python实现可逆简单的加密算法
2019/03/22 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
利用Python实现某OA系统的自动定位功能
2020/05/27 Python
如何通过python检查文件是否被占用
2020/12/18 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
亚马逊印度站:Amazon.in
2017/10/15 全球购物
澳大利亚礼品篮网站:Macarthur Baskets
2019/10/14 全球购物
寒假实习自荐信
2014/01/26 职场文书
中学清明节活动总结
2014/07/04 职场文书
英语四级考试作弊检讨书
2014/09/29 职场文书
考试作弊检讨书怎么写?
2014/12/21 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
调解书格式范本
2015/05/20 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书
Python如何识别银行卡卡号?
2021/06/10 Python