怎么编写自己的Web日志剖析脚本
由于平常总是触摸Web日志,可是苦于Web日志量大,windows下无法直接翻开,linux下又得一个一个的去找,太费事,算是偷闲,第一次用shell指令写这个剖析脚本,边写边改整理了将近1个星期,必定不如有UI界面的好,可是作为一个Web日志剖析小工具来说,也不是一无可取,各位看官也能够给点定见,能够一同帮助完善这个脚本。
nginx中间件剖析脚本 http://pan.baidu.com/s/1sjX33Hj
Web中间件剖析脚本 http://pan.baidu.com/s/1o74J2GU
主动剖析中间件日志,通过从Web日志中,找出存在的SQL注入、XSS脚本进犯等进犯行为,进行挑选。
Web中间件剖析脚本:现在仅支撑IIS、apache、weblogic中间件
nginx中间件剖析脚本:只支撑nginx中间件
新加入了针对getshell、灵敏文件、以及LFI文件包括进犯的HTTP呼应码200和500的剖析。并在屏幕输出时,显现每个进犯类型中,呈现频率最多的前20个IP地址,并对进犯呈现的次数进行计算。
全体脚本的思路:读取日志——->界说进犯特征—–>输出匹配到的含有进犯特征的记载——->输出
日志复制回来了,要处理的第一个问题便是读取,apahce日志命名格局为access.log、access_+时刻戳。例如:access_2019-04-14.log,而weblogic日志,则是access.log+时刻戳(access.log00914)。apache日志、weblog日志的共同点,便是都有access特征字符,知道了特征字符,就比较便利批量读取了。
一、读取文件
依照上面的思路,先处理读取问题。这儿我用了判别句子,起先我是想写出类似于 access=more /usr/access*.*,将这个途径悉数加到变量里,便利判别,由于在shell里,只能将固定文件、文件夹作为变量,变量中不能加*号(我是没找到其他办法,有知道大牛请提点下小弟),所以就想了个笨办法,用匹配关键词的办法来判别特定目录下,是apache日志,仍是weblogic日志,仍是IIS日志,详细判别办法如下:
if ls -l /usr/ | egrep "access";then
more /usr/access*.* | egrep "多个关键词"
else
more /usr/ex*.log | egrep “多个关键词”
fi
这样的办法来进行判别,可是这样判别有个缺陷,便是中间件日志在/usr/目录下,只能存在一种,比方一起存在apache和IIS的日志,就会优先判别apache的,从而不会履行IIS日志剖析的句子。并且,为了不跟之前的历史数据紊乱,在脚本履行开端,清空了下数据。
file=/usr/nmgxy/
if [ -e "$file" ];then
echo "日志目录存在,越过创立进程,该操作会清空/usr/nmgxy/目录下一切数据"
echo "按回车键开端清空数据,完毕请点击Ctrl+c"
read key
rm -r /usr/nmgxy/*
mkdir -p /usr/nmgxy/LFI/ /usr/nmgxy/exp/ /usr/nmgxy/sql/ /usr/nmgxy/scan/ /usr/nmgxy/xss/ /usr/nmgxy/getshell/ /usr/nmgxy/dir/
else
mkdir -p /usr/nmgxy/ /usr/nmgxy/LFI/ /usr/nmgxy/exp/ /usr/nmgxy/sql/ /usr/nmgxy/scan/ /usr/nmgxy/xss/ /usr/nmgxy/getshell/ /usr/nmgxy/dir/
fi
echo "剖析成果日志保存在/usr/nmgxy/目录下"
echo ---------------------日志方针文件---------------------------
if ls -l /usr/ | egrep "access";then
echo --------------------计算呈现次数最多的前20个IP地址-----------------
cat /usr/access*.* |awk '{print $1}' |sort |uniq -c |sort -rn |head -20 >/usr/nmgxy/top20.log
echo "计算完结"
二、界说进犯特征
日志读取的问题处理了,接下来便是界说进犯特征的事儿了,进犯特征比较好界说。例如,SQL注入进犯的判别:
echo ------------------------SQL注入进犯sql.log----------------
echo "开端剖析存在SQL注入的进犯行为,并将成果保存在/usr/nmgxy/sql/目录下"
more /usr/access*.* |egrep "%20select%20|%20and%201=1|%20and%201=2|%20exec|%27exec| information_schema.tables|%20information_schema.tables|%20where%20|%20union%20|%20SELECT%20|%2ctable_name%20|cmdshell|%20table_schema" >/usr/nmgxy/sql/sql.log
echo "剖析完毕"
awk '{print "共检测到SQL注入进犯" NR"次"}' /usr/nmgxy/sql/sql.log|tail -n1
echo "开端计算SQL注入进犯事情中,呈现频率最多的前20个IP地址"
cat /usr/nmgxy/sql/sql.log |awk -F "[" '{print $1}' |sort |uniq -c |sort -rn |head -20 >/usr/nmgxy/sql/top20.log
echo ----------------------------------------------------------
more /usr/nmgxy/sql/top20.log
echo "计算完毕"
我把一些常见的SQL注入进犯的特征写到了里边,去掉了MSSQL数据库存储进程以及MSSQL数据库才会呈现的一些注入句子。
三、输出匹配到的含有进犯特征的记载
将匹配到的进犯特征内容,从头输出到了别的一个log里边,相当于做了一次挑选/usr/nmgxy/sql/sql.log
[1] [2] [3] [4] [5] [6] 黑客接单网