利用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 相关文章推荐
function foo的原型与prototype属性解惑
Nov 19 Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
Oct 13 Javascript
Textarea与懒惰渲染实现代码
Jan 04 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
Jan 23 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
Jun 17 Javascript
在web中js实现类似excel的表格控件
Sep 01 Javascript
Vue.js 父子组件通讯开发实例
Sep 06 Javascript
微信小程序实战之自定义抽屉菜单(7)
Apr 18 Javascript
详解微信小程序 相对定位和绝对定位
May 11 Javascript
JS实现的文字间歇循环滚动效果完整示例
Feb 13 Javascript
js this 绑定机制深入详解
Apr 30 Javascript
微信小程序自定义支持图片的弹窗
Dec 21 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)
2010/09/04 PHP
如何把php5.3版本升级到php5.4或者php5.5
2015/07/31 PHP
php使用CutyCapt实现网页截图保存的方法
2016/10/03 PHP
laravel 根据不同组织加载不同视图的实现
2019/10/14 PHP
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
2016/05/24 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
angularjs 源码解析之injector
2016/08/22 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
2018/12/05 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
小程序如何构建骨架屏
2019/05/29 Javascript
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
python使用str &amp; repr转换字符串
2016/10/13 Python
Python人脸识别初探
2017/12/21 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
2018/04/28 Python
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
python字典改变value值方法总结
2019/06/21 Python
django 简单实现登录验证给你
2019/11/06 Python
python做接口测试的必要性
2019/11/20 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
python列表切片和嵌套列表取值操作详解
2020/02/27 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
SQL数据库笔试题
2016/03/08 面试题
小学新教师培训方案
2014/02/03 职场文书
《飞向蓝天的恐龙》教学反思
2014/04/09 职场文书
户外活动总结范文
2014/04/30 职场文书
2014年艾滋病防治工作总结
2014/12/10 职场文书
离婚律师函范本
2015/05/27 职场文书
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis