利用python分析access日志的方法
前言
WAF上線之后,處理最多的是誤報(bào)消除。
產(chǎn)生誤報(bào)有多種原因,比如web應(yīng)用源碼編寫(xiě)時(shí)允許客戶(hù)端提交過(guò)多的cookie;比如單個(gè)參數(shù)提交的數(shù)值太大。
把誤報(bào)降低到了可接受的范圍后,還要關(guān)注漏報(bào)。WAF不是神,任何WAF都可能被繞過(guò)。所以還需要定位漏過(guò)的攻擊,明確漏報(bào)的原因,才能update WAF的策略。
要定位漏報(bào),就必須分析Web應(yīng)用的訪問(wèn)日志了。一個(gè)站點(diǎn),每天產(chǎn)生的access日志大概接近1GB,顯然靠肉眼看是不現(xiàn)實(shí)的。這就需要用python幫助自動(dòng)分析。
實(shí)現(xiàn)思路
拿我司某Web系統(tǒng)舉例:
apache開(kāi)啟了access日志記錄
日志規(guī)則是每小時(shí)生成一個(gè)日志文件,以站點(diǎn)名稱(chēng)為文件名,以日期+時(shí)間為后綴。例如:special.XXXXXX.com.cn.2016101001
要分析這些散碎的日志文件,我的思路如下:
1、根據(jù)用戶(hù)命令行輸入獲取日志文件所在目錄;
2、遍歷目錄下所有文件,合并到一個(gè)文件;
3、定義web攻擊常見(jiàn)payload的字符串:
SQLi的:select、union、+–+;
Struts的:ognl、java
webshell常見(jiàn)的:base64、eval、excute
使用正則逐行匹配,將命中的日志復(fù)制到單獨(dú)的文件。
實(shí)現(xiàn)代碼
代碼如下:
# -*-coding: utf-8 -*-
import os,re,sys
if len(sys.argv) != 2 :
print 'Usage : python logaudit.py <path>'
sys.exit()
logpath = sys.argv[1]
#獲取輸入?yún)?shù)的文件路徑'
merge = re.compile(r'.*(\d[10])')
for root , dirs , files in os.walk(logpath):
for line in files:
#遍歷日志文件夾,合并所有內(nèi)容到一個(gè)文件
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()
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
相關(guān)文章
node中短信api實(shí)現(xiàn)驗(yàn)證碼登錄的示例代碼
這篇文章主要介紹了node中短信api實(shí)現(xiàn)驗(yàn)證碼登錄的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Node.js中的文件系統(tǒng)(file system)模塊詳解
Node.js文件系統(tǒng)模塊提供了豐富的方法,用于讀取、寫(xiě)入、操作文件和目錄,文件系統(tǒng)模塊是Node.js強(qiáng)大而靈活的一部分,為文件操作提供了方便的API,本文給大家介紹Node.js中的文件系統(tǒng)(file system)模塊,感興趣的朋友一起看看吧2023-11-11
express express-session的使用小結(jié)
這篇文章主要介紹了express express-session的使用小結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
nodejs連接ftp上傳下載實(shí)現(xiàn)方法詳解【附:踩坑記錄】
這篇文章主要介紹了nodejs連接ftp上傳下載實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了node.js使用ftp模塊實(shí)現(xiàn)針對(duì)ftp上傳、下載相關(guān)操作的方法,并附帶記錄了傳輸速度慢的解決方法,需要的朋友可以參考下2023-04-04
關(guān)于node+mysql數(shù)據(jù)庫(kù)連接池連接
這篇文章主要介紹了關(guān)于node+mysql數(shù)據(jù)庫(kù)連接池連接,mysql有兩種連接方式:一種是直接連接 另一種是池化連接,我們這篇講的是池化連接,需要的朋友可以參考下2023-04-04
node pnpm修改默認(rèn)包的存儲(chǔ)路徑(操作方法)
PNPM是一個(gè)新的包管理工具,也是NPM的另一個(gè)替代方案,與NPM不同,PNPM使用符號(hào)鏈接(symlink)而不是復(fù)制文件來(lái)安裝包,這篇文章主要介紹了node pnpm修改默認(rèn)包的存儲(chǔ)路徑,需要的朋友可以參考下2024-05-05
詳解electron如何攔截網(wǎng)絡(luò)請(qǐng)求并處理響應(yīng)
這篇文章主要為大家詳細(xì)介紹了electron如何攔截網(wǎng)絡(luò)請(qǐng)求并處理響應(yīng),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
使用PM2實(shí)現(xiàn)高效的應(yīng)用監(jiān)控與管理功能
PM2?是一個(gè)流行的進(jìn)程管理器,用于?Node.js?應(yīng)用程序,它支持應(yīng)用程序的負(fù)載均衡、自動(dòng)重啟、日志管理、監(jiān)控以及多環(huán)境管理等功能,本文給大家介紹了如何使用PM2實(shí)現(xiàn)高效的應(yīng)用監(jiān)控與管理功能,需要的朋友可以參考下2024-02-02

