web安全评估|分享一个批量处理防火墙规则的脚本

【web安全评估|分享一个批量处理防火墙规则的脚本】最近比较忙,大概半个月前,有一名粉丝私信我说,他们的客户给了她一份长达数万条的防火墙log日志,里面记载了防火墙的规则、源ip、目的ip、防火墙行为、协议等信息,并要求她将这个log文件形成Excel表格,按照规则名字、规则下的行为、源ip、目的ip、协议给写出来,要是手动处理的话,不但容易出现披露,而且确实是一件很累人的事儿。
?说实话,那天我也挺忙的,但是出于LSP本能粉丝的事儿就是我的事儿的原则,我还是挑战了一下自己的软肋,因为我写的都是一些不算难的漏洞检测脚本,像这种纯功能性的东西我没写过。
首先看一下事件经过
web安全评估|分享一个批量处理防火墙规则的脚本
文章图片

web安全评估|分享一个批量处理防火墙规则的脚本
文章图片

也不知道我写出来她会不会打我,啊哈哈哈,log里面的内容大致是这个格式
web安全评估|分享一个批量处理防火墙规则的脚本
文章图片

可以很清晰的看出来,是有一定的规律性的,第一列基本就是策略名字,起的很是随意哈,然后就是address 信息、防火墙的动作和对应的协议类型了
理想化输出的表格应该是介个样子的
web安全评估|分享一个批量处理防火墙规则的脚本
文章图片

一开始的想法就是,先将这些日志读取,然后把我需要用的东西提取到另一个文件里方便我去做list,或者是数组,结果我万万没想到啊,他的策略名称真的就很随意,而且上千条策略名称,我还是年轻了,因为我一开始居然真的想通过手写来去掉重复的策略名称,只保留唯一的,但是几千条我咋写???giao,给大家看一下我设想的第一步,拿到我想要的数据

import os import xlwta = os.getcwd() #获取当前目录 os.chdir('E:/PyCharm 2020.1/new') #定位到新的目录,请根据你自己文件的位置做相应的修改with open('test.txt','r',encoding = 'utf-8') as fr, open('output.txt','a+',encoding= 'utf-8') as fd: for text in fr.readlines(): str = (text.split()[8:12])if "source-address" in str : trust_ip= (str[3]) celue = (str[0]) #print(celue+"\t"+"trust_ip"+"\t"+trust_ip) fd.write(celue+"\t"+"trust_ip"+"\t"+trust_ip+"\n") elif "destination-address" in str : untrust_ip = (str[3]) celue = (str[0]) #print(celue+"\t"+"untrust_ip"+"\t"+untrust_ip) fd.write(celue+"\t"+"untrust_ip"+"\t"+untrust_ip+"\n")if "application" in text.split() : xieyi = text.split()[-1:] #print("协议: " ,xieyi) fd.write("协议: %s" % (xieyi) + "\n" ) elif "then" in text.split() : xingwei = text.split()[-1:] #print("行为:", xingwei) fd.write("行为: %s" % (xingwei) + "\n")book = xlwt.Workbook(encoding='utf-8',style_compression=0) sheet = book.add_sheet('Output', cell_overwrite_ok=True)# 向表中添加数据标题 sheet.write(0, 0, '策略名称')# 其中的'0-行, 0-列'指定表中的单元, sheet.write(0, 1, 'trust_ip') sheet.write(0, 2, 'utrust_ip') sheet.write(0, 3, '协议类型') sheet.write(0, 4, '行为')

运行的结果就是,会生output.txt文件
web安全评估|分享一个批量处理防火墙规则的脚本
文章图片

是吧,完全没的说?,当然了,因为时间紧,任务重,我根本没有去考虑他的优化,能实现我能看懂就行了
然而当我知道后面的东西,我就知道这个方案得pass了,导致我写了四个不同的脚本,全部报废,白写了,错误的案例就不展示了,直接展示最终的结果
import os import xlwtos.chdir('E:/PyCharm 2020.1/new') #定位到新的目录,请根据你自己文件的位置做相应的修改book = xlwt.Workbook(encoding='utf-8',style_compression=0) sheet = book.add_sheet('Output', cell_overwrite_ok=True)# 向表中添加数据标题 sheet.write(0, 0, '策略名称')# 其中的'0-行, 0-列'指定表中的单元, sheet.write(0, 1, 'trust_ip') sheet.write(0, 2, 'utrust_ip') sheet.write(0, 3, '协议类型') sheet.write(0, 4, '行为')n=1#自循环anquansaomiao-per-trust_ip withopen('test.txt','r',encoding= 'utf-8') as fd: for text in fd.readlines(): celue=(text.split()[8:9])#定位策略的名称 #print(text.split()[8:12])#输出[policy anquansaomiao-per match source-address 10.10.2.66/32] ip_name=(text.split()[10:11])#定位ip来源名称、目的地名称、协议名称 ip = (text.split()[11:12])#定位ip地址、协议名称 then=(text.split()[9:10])#定位方法 if "source-address" in ip_name : #print(ip) sheet.write(n, 0, celue) sheet.write(n,1,ip) elif "destination-address" in ip_name: #print(ip) sheet.write(n, 0, celue) sheet.write(n,2,ip) elif "application" in ip_name: #print(ip) sheet.write(n, 0, celue) sheet.write(n, 3, ip) elif "then" in then: #print(ip_name) sheet.write(n, 0, celue) sheet.write(n,4,ip_name) n=n+1book.save('Output.xls')

首先先形成一个空的xls表格,在表格里也是有坐标的
web安全评估|分享一个批量处理防火墙规则的脚本
文章图片

?如上图所示,以此类推
book = xlwt.Workbook(encoding='utf-8',style_compression=0) sheet = book.add_sheet('Output', cell_overwrite_ok=True) ? # 向表中添加数据标题 sheet.write(0, 0, '策略名称')# 其中的'0-行, 0-列'指定表中的单元, sheet.write(0, 1, 'trust_ip') sheet.write(0, 2, 'utrust_ip') sheet.write(0, 3, '协议类型') sheet.write(0, 4, '行为')

运行结束后,会生成一个表格,表格的第一行就是我需要的数据标题
web安全评估|分享一个批量处理防火墙规则的脚本
文章图片

而后进入我的下一步骤,建立一个完整的循环体,直接读取我想要的三要素,由于他的(trust_ip)source-address?、(utrust_ip)destination-address、协议都是在一个下标,这就导致数据必然会重复,当然了,这里指的是获取的时候会需要我自己去识别,可能会多出几个语句
n=1#自循环anquansaomiao-per-trust_ip withopen('test.txt','r',encoding= 'utf-8') as fd: for text in fd.readlines(): celue=(text.split()[8:9])#定位策略的名称 #print(text.split()[8:12])#输出[policy anquansaomiao-per match source-address ] ip_name=(text.split()[10:11])#定位ip来源名称、目的地名称、协议名称 ip = (text.split()[11:12])#定位ip地址、协议名称 then=(text.split()[9:10])#定位方法 if "source-address" in ip_name : #print(ip) sheet.write(n, 0, celue) sheet.write(n,1,ip) elif "destination-address" in ip_name: #print(ip) sheet.write(n, 0, celue) sheet.write(n,2,ip) elif "application" in ip_name: #print(ip) sheet.write(n, 0, celue) sheet.write(n, 3, ip) elif "then" in then: #print(ip_name) sheet.write(n, 0, celue) sheet.write(n,4,ip_name) n=n+1 ? ? book.save('Output.xls')

首先需要将log文件移动到E:/PyCharm 2020.1/new目录下,这个目录你可以按照自己的来,只需要将脚本里的地址同步一下就可以,而后重命名为test.txt;
text.split()[8:9]定位下标第八位开始第9为截止,下标从0开始计算,这是一个切片

for循环的目的是,能一行一行的读取test.txt文件,直至把他读完,并且每读一次就会在xls表格插入相应的内容。需要注意的是,Output.xls若是存在会报错,所以用过一次需要将生成的内容重命名或者拿走;
sheet.write(n, 0, celue)将celue插入倒表格中第n行第0列d? 位置

生成效果如下:
web安全评估|分享一个批量处理防火墙规则的脚本
文章图片

虽然不是理想状态,但是也算是能看哈?,记录这个东西没别的意思,就是告诉我的广大粉丝朋友们,有什么问题,放心大胆的留言,我看到能解决的会一一答复,毕竟我也不是万能的,你弄个我不会的我也是没招,还有些粉丝朋友在底下骂人的哈,虽然只有那么一个,还是上上上上个月骂得我,但是这个仇我记着呢,天天嘀咕你。最近网安圈风气不太正,希望大家保护好自己,别一时冲动给人当枪使
目前已解决部分粉丝的要求,例如有些粉丝朋友私信我要基线,我也都一一回复并分享了,还有一些报告模板,一些不太难的渗透测试相关的问题,漏洞的复现脚本,复现过程之类的,大家有什么问题和对这个公众号的建议可以在公众号留言哈,留言功能开不起来是因为留言功能在2015年后注册的公众号都取消了这个功能,所以很遗憾没有办法让大家及时互动,另现在我们也有一个小网安圈子,大家若是想进来探讨的可以私信我,我拉大家进群,平时互相吹捧相互进步啥的
最后还是那句话,本人一直以来以公益性分享为主,不会在任何平台向大家索要任何东西,谨防诈骗哦?

    推荐阅读