利用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对象的property和prototype是什么一种关系
Aug 06 Javascript
javascript globalStorage类代码
Jun 04 Javascript
jquery 简短右键菜单 多浏览器兼容
Jan 01 Javascript
javascript 模拟点击广告
Jan 02 Javascript
jquery 与NVelocity 产生冲突的解决方法
Jun 13 Javascript
javascript中数组的冒泡排序使用示例
Dec 18 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
Apr 10 Javascript
wap浏览自动跳转到wap页面的js代码
May 17 Javascript
javascript实现获取cookie过期时间的变通方法
Aug 14 Javascript
Jquery实现动态切换图片的方法
May 18 Javascript
js实现京东轮播图效果
Jun 30 Javascript
javascript基本常用排序算法解析
Sep 27 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 多线程上下文中安全写文件实现代码
2009/12/28 PHP
php中常用字符串处理代码片段整理
2011/11/07 PHP
10个php函数实用却不常见
2015/10/13 PHP
php常量详细解析
2015/10/27 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
图片完美缩放
2006/09/07 Javascript
javascript Keycode对照表
2009/10/24 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
深入理解js中this的用法
2016/05/28 Javascript
jQuery Plupload上传插件的使用
2017/04/19 jQuery
js指定步长实现单方向匀速运动
2017/07/17 Javascript
Vue2几种常见开局方式详解
2017/09/09 Javascript
Nuxt.js 数据双向绑定的实现
2019/02/17 Javascript
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
[07:26]2015国际邀请赛第二日TOP10集锦
2015/08/06 DOTA
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
20招让你的Python飞起来!
2016/09/27 Python
python 开发的三种运行模式详细介绍
2017/01/18 Python
python实现单线程多任务非阻塞TCP服务端
2017/06/13 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
Python实现繁体中文与简体中文相互转换的方法示例
2018/12/18 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
wxPython多个窗口的基本结构
2019/11/19 Python
使用Python求解带约束的最优化问题详解
2020/02/11 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值
2014/09/15 面试题
乡镇总工会学雷锋活动总结
2014/03/01 职场文书
《美丽的田园》教学反思
2014/03/01 职场文书
岗位说明书范文
2014/05/07 职场文书
党校毕业心得体会
2014/09/13 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
医院志愿者活动总结
2015/05/06 职场文书
2019学校请假条格式及范文
2019/06/25 职场文书