基于ChatGPT打造安全脚本工具流程

前言

以前想要打造一款自己的工具,想法挺好实际上是难以实现,第一不懂代码的构造,只有一些工具脚本构造思路,第二总是像重复造轮子这种繁琐枯燥工作,抄抄改改搞不清楚逻辑,想打造一款符合自己工作的自定义的脚本工具难度倍增,但是随着AI的兴起极大的改变了我们的生活工作方式,只需利用ChatGPT即可打造自己的专属自定义工具,下面作者以自己的几个脚本工具的案例为例,讲述一下如何利用ChatGPT开发安全脚本工具。(注:作者专注安全其他方向,非正儿八经的安全开发,纯粹讲解思路,工具简陋之际,纯粹不入流勿喷)

案例一 漏洞简报生成

工具前景

作者是一名渗透测试工程师,在工作中避免不了写漏洞报告,为了提高工作效率,避免繁琐的文档工作,所以有一下脚本工具诞生,工具潦草但实用,快速生成一份漏洞简报,只需填写对应的漏洞成果,避免了上网查询漏洞相关细节和修复方式,基于web.xlsx表格内容为存储漏洞信息,有一定局限性,但工具目前可塑性很强,有待提高。

工具名称

本工具为《Bug_writer》漏洞报告辅助工具,该工具旨在提高渗透测试人员,和网络安全从业者,爱好者等人群的工作效率,使得更快速准确地填写更多的漏洞报告,虽然作者不是专业开发,但作为一名安全从业者,作者在用心制作这个工具来解决自己的工作需求,之前Github有更新本项目,后来参加HVV大意了没有闪被溯源了,Github废弃了,马甲相关信息均废弃(还不是因为丢人)。

工具结构

工具结构
Bug_writer:
│  
│  main.py
│  README.md
│  requirements.txt
│
├─config
│  │  WEB.docx
│  │  WEB.xlsx
│  │
│  └─漏洞模版
│          简报模版一.docx
│          默认模板.docx
│
└─output说明:主目录 mian.py为脚本文件
│  README.md 为使用说明
│  requirements.txt 为需要安装的第三方库
│  config文件夹下
│    WEB.docx 简报模版
│    WEB.xlsx 漏洞库
│    漏洞模版文件夹下,为模版样式
│  output文件夹为输出的简报文件

工具思路

在此之前我们是参考xlsx漏洞模板,用于填写漏洞报告,后来转念一想,可以把漏洞里面的信息直接填充就好了,随机一发不可收拾的开始搞这个脚本工具,现将模版修改如下所示,然后开始构思流程

图片.png

首先我的工具定位是可以生成简报的脚本,其次我对它要求为代码简单快速生成且可塑性强,然后如下所示

图片.png

考虑python语言较为方便,使用python作为脚本工具开发语言,优点在于它的第三方库和语言通用性

第一步

1.先将xlsx模版放在config文件夹中,首先需要生成pyhton脚本模糊查询漏洞名称,假设为sql注入,我们输入注入,该工具会在xlsx表格中查询漏洞名称列,如果没有查询到存在注入二字结果,直接结束返回命令行页面告知未查询结果,如果有该漏洞名存在,进行下一步,根据上述的思路,编写文案,在Chatgpt上执行,会得出初代源码,根据初代源码进行修改不足,完成上述所示需求。

图片.png

图片.png

第二步

2.当初代源码可以调用模糊查询时,我们就需要将其他列的信息按照格式展示在命令行,如何展示可以在ChatGpt上完善我们第二步需求,如下所示,这里已经完善了上述需求.

图片.png

代码如下

import argparse
import os
import pandas as pdclass VulReportGenerator:def __init__(self):self.parser = argparse.ArgumentParser(description='漏洞报告生成器')self.parser.add_argument('-c', type=str, help='指定模糊查询漏洞名称.')self.parser.add_argument('-t', action='store_true', help='生成报告')self.args = self.parser.parse_args()self.df = pd.read_excel('./config/WEB.xlsx')def search_vuls(self):search_name = self.args.c.lower()result = self.df[self.df['漏洞名称'].str.lower().str.contains(search_name)]result_count = result.shape[0]if result.empty:print('<<这里并没有发现结果--您可以去查看是否输入错误>>')else:print(f'查询到 {result_count} 条记录:')for index, row in result.iterrows():print('漏洞名称:  {}\n风险级别: {}\n漏洞描述:\n\t {} \n加固建议: \n\t {}\n\n\n'.format(row['漏洞名称'], row['风险级别'], row['漏洞描述'], row['加固建议']))if self.args.t:self.generate_report(result)def generate_report(self, data):# 在这里编写生成报告的逻辑,例如将结果输出到文件或者其他操作print("生成报告:" + str(data))if __name__ == '__main__':generator = VulReportGenerator()generator.search_vuls()

第三步

这一步的时候,我们可以看到,样式有些难看,我们可以使用图形化字符工具生成一个字符图形,然后再完善增加颜色样式。

图片.png

图片.png

代码如下

import argparse
import os
import pandas as pd# 创建命令行参数解析器
print('''\033[31m  ____                              _ _            \033[0m\033[31m | __ ) _   _  __ _  __      ___ __(_| |_ ___ _ __ \033[0m\033[31m |  _ \| | | |/ _` | \ \ /\ / | '__| | __/ _ | '__|\033[0m     \033[31m | |_) | |_| | (_| |  \ V  V /| |  | | ||  __| |   \033[0m     \033[31m |____/ \__,_|\__, |   \_/\_/ |_|  |_|\__\___|_|   \033[0m     Version: \033[33m公测版本 \033[0m\033[31m              |___/\033[0m                                     Tools: \033[33m漏洞报告辅助工具\033[0m      \033[34mgithub.com/yichensec/Bug_writer\033[0m     一款面向用于安服,渗透测试人员,网络安全从业者等人群的漏洞报告辅助工具可以生成漏洞测试简报,可自己私人定制。''')
print('''\033[33m================================== 渗透漏洞报告书写员的开始 =========================================\033[0m''')class VulReportGenerator:def __init__(self):self.parser = argparse.ArgumentParser(description='漏洞报告生成器')self.parser.add_argument('-c', type=str, help='指定模糊查询漏洞名称.')self.parser.add_argument('-t', action='store_true', help='生成报告')self.args = self.parser.parse_args()self.df = pd.read_excel('./config/WEB.xlsx')def search_vuls(self):search_name = self.args.c.lower()result = self.df[self.df['漏洞名称'].str.lower().str.contains(search_name)]result_count = result.shape[0]if result.empty:print('<<这里并没有发现结果--您可以去查看是否输入错误>>')else:print(f'查询到 {result_count} 条记录:')for index, row in result.iterrows():print('\033[0m\033[33m漏洞名称:\033[0m\033[32m  {}\n\033[0m\033[33m风险级别:\033[0m\033[31m  {}\033[0m\n\033[33m漏洞描述:\033[0m  \n\t\033[34m  {}\033[0m\n\033[33m加固建议:\033[0m\033[35m \n\t {}\033[0m\n\n\033[33m=====================================================================================\033[0m\n'.format(row.漏洞名称, row.风险级别, row.漏洞描述, row.加固建议))if self.args.t:self.generate_report(result)def generate_report(self, data):# 在这里编写生成报告的逻辑,例如将结果输出到文件或者其他操作print("生成报告:" + str(data))if __name__ == '__main__':generator = VulReportGenerator()generator.search_vuls()

第四步

这时候我们可以添加其他模块功能,这里我们生成一个list模块,展示漏洞类型,并生成,-p 和-s 模块展示出分页和数量展示,便于展示,当模块多了后,我们需要设置一个-h帮助模块,将内置所以功能的模块展示出来,这里每次生成的代码需要多次调试,代码有一些不足问题,需要人工识别并指出使用ChatGpt进行辅助修改。

图片.png

图片.png

图片.png

第五步

最后就是简报生成模块,-t,这里使用-t模块指定生成,如何生成指定到简报中?可以参考下面替换法

图片.png

这个是简报模板,可以看到%S1,%S2,....,这种,分别对应着漏洞xlsx表格中的漏洞名称,风险等级,漏洞描述,加固建议,采用替换的方式,将识别到的漏洞信息,采用替换对应的%值进行输出,另存到output文件中,为了方便也是怕导出的名称重复出现覆盖报错问题,采用递归方式001.docx,002.docx,....等方式进行命令,这里生成-t模块,将识别到的漏洞信息指定从web.docx简报文档中进行替换%值,另存到output文件夹中的docx文件中,这样即可完成该模块需求。

图片.png

图片.png

到此,我们的工具思路大致如上所述。

完整代码如下

当前版本提供两个功能1.调用本地漏洞库查询漏洞、2.批量输出漏洞简报模版

import argparse
import os
import pandas as pd
from docx import Document# 创建命令行参数解析器
print('''\033[31m  ____                              _ _            \033[0m\033[31m | __ ) _   _  __ _  __      ___ __(_| |_ ___ _ __ \033[0m\033[31m |  _ \| | | |/ _` | \ \ /\ / | '__| | __/ _ | '__|\033[0m     \033[31m | |_) | |_| | (_| |  \ V  V /| |  | | ||  __| |   \033[0m     \033[31m |____/ \__,_|\__, |   \_/\_/ |_|  |_|\__\___|_|   \033[0m     Version: \033[33m公测版本 \033[0m\033[31m              |___/\033[0m                                     Tools: \033[33m漏洞报告辅助工具\033[0m      \033[34mgithub.com/yichensec/Bug_writer\033[0m     一款面向用于安服,渗透测试人员,网络安全从业者等人群的漏洞报告辅助工具可以生成漏洞测试简报,可自己私人定制。''')
print('''\033[33m================================== 渗透漏洞报告书写员的开始 =========================================\033[0m''')
class VulReportGenerator:def __init__(self):self.parser = argparse.ArgumentParser(description='\033[33m漏洞报告生成器\033[0m')self.df = pd.read_excel('./config/WEB.xlsx')def parse_args(self):self.parser.add_argument('-c', type=str, help='指定模糊查询漏洞名称.')self.parser.add_argument('-t', action="store_true", help='指定生成漏洞报告')self.parser.add_argument('-list', action='store_true', help='列出漏洞名称')self.parser.add_argument('-p', type=int, default=5, help='指定页面数量')self.parser.add_argument('-s', type=int, default=10, help='指定每页显示的项目数')self.args = self.parser.parse_args()def run(self):self.parse_args()if self.args.list:self.list_vul_names()elif self.args.c:self.search_vuls()else:print('\033[31m<<无效的参数--您可以输入"-h"查看使用说明>>\033[0m')def search_vuls(self):search_name = self.args.c.lower()result = self.df[self.df['漏洞名称'].str.lower().str.contains(search_name)]result_count = result.count()[0]if result.empty:print('\033[31m<<这里并没有发现结果--您可以去查看是否输入错误>>\033[0m')else:print(f'\033[31m查询到 {result_count} 条记录:\033[0m')total_count = result_countpage_count = self.args.prows_per_page = self.args.scurrent_page = 1while True:page_result = result[(current_page-1) * rows_per_page : current_page * rows_per_page]if page_result.empty:breakprint(f'\033[0m\033[33m第{current_page}页:\033[0m')for row in page_result.itertuples(index=False):print('\033[0m\033[33m漏洞名称:\033[0m\033[32m  {}\n\033[0m\033[33m风险级别:\033[0m\033[31m  {}\033[0m\n\033[33m漏洞描述:\033[0m  \n\t\033[34m  {}\033[0m\n\033[33m加固建议:\033[0m\033[35m \n\t {}\033[0m\n\n\033[33m=====================================================================================\033[0m\n'.format(row.漏洞名称, row.风险级别, row.漏洞描述, row.加固建议))if self.args.t:self.generate_report(page_result)current_page += 1if current_page > page_count:breakdef list_vul_names(self):ld_names = self.df['漏洞名称']if not ld_names.empty:for index, ld_name in enumerate(ld_names):page_num = (index + 1) // self.args.s + 1if index % self.args.s == 0:print(f'\033[0m\033[33m第{page_num}页:\033[0m')print(f'{ld_name}\t', end='')if (index + 1) % self.args.s == 0:print()print()else:print('\033[31m<<这里并没有发现结果--您可以去查看是否输入错误>>\033[0m')def generate_report(self, page_result):doc_path = './config/web.docx'if os.path.exists(doc_path):doc_output_path = './output/001.docx'counter = 1while os.path.exists(doc_output_path):counter += 1doc_output_path = f'./output/{counter:03}.docx'doc = Document(doc_path)for index, row in page_result.iterrows():for para in doc.paragraphs:if '%S1' in para.text:para.text = para.text.replace('%S1', row['漏洞名称'])if '%S2' in para.text:para.text = para.text.replace('%S2', row['风险级别'])if '%S3' in para.text:para.text = para.text.replace('%S3', row['漏洞描述'])if '%S4' in para.text:para.text = para.text.replace('%S4', row['加固建议'])try:doc.save(doc_output_path)print(f'\033[33m已将查询结果写入到" {doc_output_path} "文件中\033[0m')except Exception as e:print(f'\033[31m写入文件"{doc_output_path}"时出错:{e}\033[0m')else:print(f'\033[31m指定的文件"{doc_path}"不存在\033[0m')
if __name__ == '__main__':generator = VulReportGenerator()generator.run()

工具使用

1.使用命令帮助
python main.py -h当前版本是5个参数-c C        指定模糊查询漏洞名称.-t          指定生成漏洞报告-list       列出漏洞名称-p P        指定页面数量-s S        指定每页显示的项目数

图片.png

2.漏洞查询
python main.py -c 查询漏洞这里-c参数是指定查询漏洞名称(可模糊查询)

图片.png

3.漏洞分页展示

python main.py -c 注入 -p 展示页数 -s 展示数量

图片.png

4.漏洞简报模版生成

python main.py -c 漏洞名 -p 展示页数 -s 展示数量 -t执行-t保存在output文件夹下的docx文件中,这里001.docx是默认名依次往后递归文件名002.docx....

图片.png

5.模版样式

打开文件夹会看到漏洞模版生成后的样式,如图下所示,(注模板可以更换自己公司的模板)

图片.png

6.漏洞数量

python main.py -list -s 1

图片.png

图片.png

原文链接:https://www.cnblogs.com/Yichensec/p/18141979/GJ_002

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day 25 组合(优化)216.组合总和III 17.电话号码的字母组合

组合&#xff08;优化&#xff09; 先给出组合问题的回溯部分代码&#xff1a; vector<vector<int>> result; // 存放符合条件结果的集合vector<int> path; // 用来存放符合条件结果void backtracking(int n, int k, int startIndex) {if (path.size() k) …

【opencv】dnn示例-person_reid.cpp 人员识别(ReID,Re-Identification)系统

ReID(Re-Identification&#xff0c;即对摄像机视野外的人进行再识别) 0030_c1_f0056923.jpg 0042_c5_f0068994.jpg 0056_c8_f0017063.jpg 以上为输出结果&#xff1a;result文件夹下 galleryLIst.txt queryList.txt 模型下载&#xff1a; https://github.com/ReID-Team/ReID_e…

OpenHarmony网络通信-socket-io

简介 socket.io是一个在客户端和服务器之间实现低延迟、双向和基于事件的通信的库。建立在 WebSocket 协议之上&#xff0c;并提供额外的保证&#xff0c;例如回退到 HTTP 长轮询或自动重新连接。 效果展示 下载安装 ohpm install ohos/socketio OpenHarmony ohpm 环境配置等更…

VulnHub靶机 DC-5 打靶 渗透测试详情过程

VulnHub靶机 DC-5 打靶 详细渗透测试过程 目录 VulnHub靶机 DC-5 打靶 详细渗透测试过程一、将靶机导入到虚拟机当中二、渗透流程主机发现端口扫描目录爆破文件包含getshell反弹shell提权 一、将靶机导入到虚拟机当中 靶机地址&#xff1a; https://download.vulnhub.com/dc/…

【云计算】云计算八股与云开发核心技术(虚拟化、分布式、容器化)

【云计算】云计算八股与云开发核心技术&#xff08;虚拟化、分布式、容器化&#xff09; 文章目录 一、什么是云计算&#xff1f;1、云计算的架构&#xff08;基础设施&#xff0c;平台&#xff0c;软件&#xff09;2、云计算的发展 二、如何做云计算开发&#xff1f;云计算的核…

量子时代加密安全与区块链应用的未来

量子时代加密安全与区块链应用的未来 现代密码学仍然是一门相对年轻的学科&#xff0c;但其历史却显示了一种重要的模式。大多数的发展都是基于几年甚至几十年前的研究。而这种缓慢的发展速度也是有原因的&#xff0c;就像药物和疫苗在进入市场之前需要经过多年的严格测试一样&…

心学从0开始学习rust-十万个为什么篇章(持续更新篇章)

问答环节 1.const x 1;和let x 1有何区别呢&#xff0c;const申请的是全局变量所以会一直有效对吗&#xff1f; const 声明的常量具有全局作用域&#xff0c;但它们不能直接在函数内部声明。常量通常用于定义整个程序中使用的值&#xff0c;如配置常量或数学常量。 let 声明…

tcp网络编程——2

1.一个服务器只能有一个客户端连接&#xff08;下面代码&#xff09; ​​​​​​​tcp网络编程&#xff08;基础&#xff09;-CSDN博客 2.一个服务器可以有多个客户端连接&#xff08;多线程&#xff09; server端创建多个线程&#xff0c;每个线程与不同的client端建立连…

浅写个登录(无js文件)

全部代码如下&#xff0c;无需编写wxss文件&#xff0c;渲染都在style里面&#xff1a; <view style"height: 250rpx;width: 100%;"> <!-- 背景图片 --><view style"position: absolute; background-color: antiquewhite; height: 250rpx;width…

IDEA中Docker相关操作的使用教程

一、引言 Docker作为当前最流行的容器化技术&#xff0c;极大地简化了应用的部署和管理。而IntelliJ IDEA作为一款强大的集成开发环境&#xff0c;也提供了对Docker的集成支持。本文将介绍如何在IDEA中配置和使用Docker&#xff0c;包括远程访问配置、服务连接、Dockerfile编写…

【C语言】冒泡排序算法详解

目录 一、算法原理二、算法分析时间复杂度空间复杂度稳定性 三、C语言实现四、Python实现 冒泡排序&#xff08;Bubble Sort&#xff09;是一种基础的排序算法。它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。遍历数列…

微信小程序开发笔记

微信小程序开发笔记 1 微信小程序的项目结构 2 页面组成 一个微信小程序是由一个或多个页面组成的&#xff0c;这些页面被存放在pages目录中。下面以pages 目录下的index页面为例展示其组成部分&#xff0c;index页面的组成部分如下图所示。 由上图可知&#xff0c;index页面…

hbase-2.2.7分布式搭建

一、下载上传解压 1.在官网或者云镜像网站下载jar包 华为云镜像站&#xff1a;Index of apache-local/hbase/2.2.7 2.上传到linux并解压 tar -zxvf hbase-2.2.7-bin.tar.gz -C /usr/locol/soft 二、配置环境变量 1. vim /etc/profile export HBASE_HOME/usr/local/soft/h…

前端三剑客 HTML+CSS+JavaScript ② HTML相关概念

他们这样形容我 是暴雨浇不灭的火 —— 24.4.18 学习目标 理解 HTML的概念 HTML的分类 HTML的关系 HTML的语义化 应用 HTML骨架格式 sublime基本使用 一、HTML初识 HTML指的是超文本标记语言&#xff0c;是用来描述网页的一种语言 超文本&#xff1a;暂且理解为“超级的文本”&…

【opencv】dnn示例-segmentation.cpp 通过深度学习模型对图像进行实时语义分割

模型下载地址&#xff1a; http://dl.caffe.berkeleyvision.org/ 配置文件下载&#xff1a; https://github.com/opencv/opencv_extra/tree/4.x/testdata/dnn 该段代码是一个利用深度学习进行语义分割的OpenCV应用实例。下面将详细解释代码的功能和方法。 引入库 引入了一些必要…

(最详细)关于List和Set的区别与应用

关于List与Set的区别 List和Set都继承自Collection接口&#xff1b; List接口的实现类有三个&#xff1a;LinkedList、ArrayList、Vector。Set接口的实现类有两个&#xff1a;HashSet(底层由HashMap实现)、LinkedHashSet。 在List中&#xff0c;List.add()是基于数组的形式来添…

内部类

一.概念 当一个事物内部&#xff0c;还有一个部分需要一个完整的结构进行描述&#xff0c;而这个内部的完整的结构又只为外部事物提供服务&#xff0c;那么将这个内部的完整结构最好使用内部类。在Java中&#xff0c;可以将一个类定义在另一个类或者一个方法内部&#xff0c;前…

将gdip-yolo集成到yolov9模型项目中(支持预训练的yolov9模型)

1、yolov9模型概述 1.1 yolov9 YOLOv9意味着实时目标检测的重大进步&#xff0c;引入了可编程梯度信息&#xff08;PGI&#xff09;和通用高效层聚合网络&#xff08;GELAN&#xff09;等开创性技术。该模型在效率、准确性和适应性方面取得了显著改进&#xff0c;在MS COCO数…

GNU Radio使用Python Block实现模块运行时间间隔获取

文章目录 前言一、timestamp_sender 模块二、timestamp_receiver 模块三、测试 前言 GNU Radio 中没有实现测量两个模块之间的时间测量模块&#xff0c;本文记录一下通过 python block 制作一个很简单的测时 block。 一、timestamp_sender 模块 使用 python block 做一个发送…

【python】super()函数的用法详解!

今天分享一个我在实际项目中用到过的super()函数&#xff0c;来说说该函数的主要功能是什么&#xff0c;简单来说&#xff0c;super()函数是用来做调用父类的一个方法。 super() 是用来解决多重继承问题的&#xff0c;直接用类名调用父类方法在使用单继承的时候没问题&#xf…