【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')
'''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值