PentestGPT:A GPT-empowered penetration testing tool
一、What is PentestGPT?
PentestGPT是一种由大型语言模型(LLMs)赋能的渗透测试工具。它旨在自动化渗透测试过程。它基于ChatGPT构建,并以交互模式运行,以指导渗透测试人员在整体进展和具体操作上。
General Design
PentestGPT提供了一个统一的终端输入处理程序,并由三个主要组件支持:
- 测试生成模块(generation module),用于生成用户执行的确切渗透测试命令或操作。
- 测试推理模块(reasoning module),用于对测试进行推理,指导渗透测试人员下一步要做什么。
- 解析模块(parsing module),用于解析渗透工具的输出和WebUI上的内容。
Function Design
处理程序是渗透测试工具的主要入口点。它允许渗透测试人员执行以下操作:
- 使用预先设计的prompt提示初始化自身。
- 通过提供目标信息启动新的渗透测试会话。
- 获取todo-list待办列表,并获取下一步执行的步骤。
- 渗透测试人员完成实际操作后,将渗透结果信息传递给PentestGPT,这些结果信息包括:
- 工具输出
- 网页内容
- 人类对当前测试结果的描述
- 生成模块还可以启动连续模式,帮助渗透测试人员深入研究特定任务。
Logic Flow Design
- 用户初始化所有会话。
- 用户通过以下几个步骤完成初始化任务。
- 用户向ReasoningSession提供目标信息。
- ReasoningSession根据目标信息生成任务树。
- ReasoningSession决定下一步要做的事情,并将信息传递给GenerationSession。
- GenerationSession生成用户执行的确切命令,并将其传递给用户。
- 进入主循环。用户可以选择以下几个步骤:
- 向PentestGPT提供todo-list待办列表执行结果。
- 用户将工具的输出提供给ParsingSession。
- ParsingSession解析输出,并将信息传递给ReasoningSession。
- ReasoningSession根据信息更新任务树。
- 重复执行步骤3.2.1-3.2.3。
- 询问待办事项。
- ReasoningSession分析任务树。它决定下一个待办事项,包括(1)自然语言描述和(2)要执行的确切命令。
- ReasoningSession将信息传递给GenerationSession进行进一步验证。
- GenerationSession生成用户执行的确切命令,并将其传递给用户。
- 通过提供任意信息与PentestGPT讨论。
- 用户将信息提供给ParsingSession。
- ParsingSession解析信息: 如果信息太长,进行摘要。 否则,重新表述。
- ReasoningSession分析信息并更新任务树。
- 向PentestGPT提供todo-list待办列表执行结果。
- 退出程序。
下面显示了一个流程图:
参考链接:
https://github.com/GreyDGL/PentestGPT/blob/main/PentestGPT_design.md https://github.com/GreyDGL/PentestGPT
二、关于LLM赋能安全领域的必要组成条件思考
- 历史操作过程(status db)需要以某种形式记录,并且LLM的token窗口能够允许每次请求时status db作为context。
- 值得注意的是,需要记录哪些信息,以什么样的格式记录,这部分需要领域专家进行人工定义,属于领域先验知识的部分。
- 任务必须能够被分解为多个子步骤。
- 最好通过领域专家通过few-shot的方式预先定义好任务步骤分解的套路,这部分也属于领域先验知识的部分。
- 涉及到工具调用和返回结果解析和具体垂直领域和具体的工具强相关,协议解析和信息格式提取是一个重工作量的领域。
三、通过GPT进行多步骤Webshell生成