前言
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、+?C+;
????????? Struts的:ognl、java
????????? webshell常見的:base64、eval、excute
使用正則逐行匹配,將命中的日志復制到單獨的文件。
實現代碼
代碼如下:
# -*-coding: utf-8 -*- import os,re,sys if len(sys.argv) != 2 : print 'Usage : python logaudit.py' 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()
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
