Python复用脚本统计word报告里的高危漏洞
Posted Web3Ao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python复用脚本统计word报告里的高危漏洞相关的知识,希望对你有一定的参考价值。
文章目录
综述
date:2022-09-28
按照版本号报告漏洞的扫描器有点搞,人工统计高危漏洞像是一种折磨,考虑编写脚本。
提取对象:word文件里的紧急和高危漏洞。(需要筛选)
提取数据:漏洞名称+影响主机,不统计漏洞类型是 SSH漏洞 和 数据库漏洞的记录。
思路:首先删除所有无关信息,只保留紧急和高危部分的内容,如图
源码和使用说明
word报告准备:删除所有无关信息,只保留紧急和高危部分的表格内容。(脚本逐个读取表格内容)
定制需要修改的字段:Word文件名称(fn变量)、源excel文件名称(excel变量)、调用select_from_excel()函数时的表序和列序。
txt文件效果:漏洞名称—ip—归属部门,然后使用 excel 直接导入 txt 文件即可。
# coding: utf-8
import docx
import xlrd
import xlwt
def select_from_excel(excel, ip, sheet, belong_col): # 从 excel 中查询 IP 的资产归属情况,并把 ip:归属中心 数据对保存到 belong.txt
data = xlrd.open_workbook(excel) # 打开 excel 文件
sheet_1 = data.sheets()[sheet] # 选择在哪张表里进行查询,此处是第一张表
nrows = sheet_1.nrows # 获取该sheet中的有效行数
ncols = sheet_1.ncols # 获取该sheet中的有效列数
# 读取文件数据
belong_list = []
result = ""
for rowNum in range(0, nrows):
tep1 = []
for colNum in range(0, ncols):
tep1.append(sheet_1.row(rowNum)[colNum].value)
if ip in str(sheet_1.row(rowNum)[colNum].value):
# local = fileName.split('.')
# result.append("文件:" + fileName + " 的表 " + worksheets[filenum] + " 找到了 ")
result = ip + "---" + str(sheet_1.row(rowNum)[belong_col].value)
return result
# fn = r'./xxx.docx'
# fn = r'./xxx.docx'
fn = r'./py_text.docx'
excel = "D:\\\\xx\\\\汇总.xlsx" # 根据ip查询归属部门
doc = docx.Document(fn) # 按段落读取全部数据
# 获取文档的表格个数,得到126个
table_num = len(doc.tables)
# print(table_num)
# 遍历表格0-125,按表格读取全部数据
result = []
ip_list = []
with open("result.txt", "w") as f:
for index in range(0, table_num): # 遍历每张表格
if ("SSH漏洞" not in doc.tables[index].rows[2].cells[1].text) and (
"数据库漏洞" not in doc.tables[index].rows[2].cells[1].text):
vul_name = doc.tables[index].rows[0].cells[1].text
host_all = doc.tables[index].rows[1].cells[1].text[1:-1] # 此时是字符串,去掉首尾的 []
host_list = host_all.split(",") # 转换成列表
# print(host_list)
host_write = ""
for host in host_list: # 筛选出有效ip
host = host.strip() # 去空格
host = host[0:host.find(":")] # 去端口
if host not in host_write:
host_write = host_write + host + ","
# # 根据ip查询归属部门
# ip_belong = select_from_excel(excel, host, 3, 2)
# ip_belong = select_from_excel(excel, host, 0, 5)
ip_belong = select_from_excel(excel, host, 1, 5)
# 每条漏洞记录
single_result = vul_name + "---" + ip_belong + "\\n"
result.append(single_result)
f.write(single_result)
# print(result)
f.close()
'''
说明:
报错情况:数据量大的时候,漏洞名称会缺失一些内容。还报了一次错是,列表超出索引范围。
需求替代:excel可以直接导入 txt 文件,使用分隔符分开即可,不需要用脚本向 excel 里面写内容。
#创建一个workbook对象,相当于创建一个Excel文件
book = xlwt.Workbook(encoding='utf-8',style_compression=0)
# 创建一个sheet对象,一个sheet对象对应Excel文件中的一张表格。
sheet = book.add_sheet('其他部门主机统计', cell_overwrite_ok=True)
# 其中的Output是这张表的名字,cell_overwrite_ok,表示是否可以覆盖单元格,其实是Worksheet实例化的一个参数,默认值是False
# 向表中添加数据标题
sheet.write(0, 0, '漏洞名称') # 其中的'0-行, 0-列'指定表中的单元,'X'是向该单元写入的内容
sheet.write(0, 1, 'ip')
sheet.write(0, 2, '归属部门')
#对文本内容进行多次切片得到想要的部分
n=1
for record in result:
vul_name = record.split('---')[0]
vul_ip = record.split('---')[1]
vul_belong = record.split('---')[2]
sheet.write(n, 0, vul_name.split('w')[0])#往表格里写入X坐标
sheet.write(n, 1, vul_ip.split('w')[0])#往表格里写入Y坐标
sheet.write(n, 2, vul_belong.split('w')[0]) # 往表格里写入Y坐标
n = n+1
# 最后,将以上操作保存到指定的Excel文件中
book.save('高危统计.xls')
'''
以上是关于Python复用脚本统计word报告里的高危漏洞的主要内容,如果未能解决你的问题,请参考以下文章