langchain+xray:prompt控制漏洞扫描

写在前面

xray是长亭推出的一款漏洞扫描工具。

langchain是调用LLM大模型完成自动化任务的框架。

本篇文章是对langchain自定义工具的探索,通过编写一个xray调用的工具,联合ChatGPT对xray进行调用,实现对目标的漏洞扫描。

xray功能分析

首先分析一下xray的功能

爬虫扫描

xray webscan --basic-crawler http://example.com --html-output vuln.html

主动扫描

xray webscan --url http://example.com/?a=b --html-output single-url.html

指定插件扫描

xray webscan --plugins cmd-injection,sqldet --url http://example.com

分析之后,因为我想用一个工具实现,而不用每个功能都写一个工具。于是,设想了三个参数

target:扫描目标
vul_type:扫描漏洞类型
mode:扫描方式

工具编写

直接上tools的代码

from typing import Any
from langchain.tools import BaseToolimport subprocessclass XrayScanTool(BaseTool):name = "xray_vul_scan"description = "使用Xray漏洞扫描器,对目标(参数 target)进行漏洞扫描,可以指定全漏洞扫描,也可以针对性指定(参数vul_type)。" \"漏洞类型包含:xss, sqldet, cmd-injection, dirscan, path-traversal, xxe, phantasm, upload, brute-force," \"jsonp, ssrf, baseline, redirect, crlf-injection, xstream。通过list传入" \"还可以指定扫描方式(参数mode),爬虫扫描crawler,还是非爬虫扫描scan"# 指定xray的路径XRAY_PATH = "./xray_windows_amd64.exe"return_direct = Truedef _run(self, target, vul_type=["all"], mode="scan") -> Any:if mode == "crawler":base_cmd = f"{self.XRAY_PATH} webscan --basic-crawler {target} "else:base_cmd = f"{self.XRAY_PATH} webscan --url {target} "if "all" not in vul_type:base_cmd += "--plugins "for vul in vul_type:base_cmd += vul + ","base_cmd = base_cmd.rstrip(",")base_cmd += " --html-output vuln.html"if os.path.exists("vuln.html"):os.remove("vuln.html")result = subprocess.run(base_cmd.split(" "))return result.returncodeasync def _arun(self, *args: Any, **kwargs: Any,) -> Any:raise NotImplementedError("This tool does not support async")

可以看到,我在描述中说的很详细,主要是为了能让ChatGPT可以准确的传入我需要的参数,只要描述足够详细,剩下的你可以完全相信ChatGPT!

然后,下面开始创建agent对工具进行调用

from langchain.chat_models import ChatOpenAI
from langchain.agents import initialize_agent, AgentTypefrom xray_tools import XrayScanToolllm = ChatOpenAI(model_name="gpt-3.5-turbo-0613",temperature=0,# 填入自己的ChatGPT APIopenai_api_key=API_KEY,openai_api_base=BASE_ADDRESS
)# 构建工具列表
tools = [XrayScanTool()]# 初始化agent
agent = initialize_agent(agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,tools=tools,llm=llm,verbose=True
)

这部分不多赘述,下面进行测试

resp = agent.run("扫描一下http://127.0.0.1/,看看有没有敏感文件目录")print(resp)

可以看到,完美传入了我们所需的参数,并进行了执行。

写在后面

这个demo只是一次对langchain tools的一次实践探索,还是很成功的,只能说魔法加在子弹上,不可估量。

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

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

相关文章

3 款最好的电脑硬盘数据迁移软件

您将从本页了解 3 款最好的 SSD硬盘数据迁移软件,磁盘供应商提供的软件和可靠的第三方软件。仔细阅读本文并做出您的选择。 什么是数据迁移? 数据迁移是将数据移动到其他计算机或存储设备的过程。在日常工作活动中,常见的数据迁移有三种&…

应用宝 <危害支付安全>

游戏未收到任何通知被应用宝下架,问了客服 客服:应用危害支付安全, 我:什么是危害支付安全, 客服:存在非腾讯的支付方式 我:应用没有非腾讯的支付方式,都是用的米大师支付 过去很久。…

KAFKA节点故障的容错方案

KAFKA节点故障的容错方案 1. broker启动加载逻辑1.1 日志组成和分析1.2 snapshot文件1.3 broker启动流程1.4 LogManager的初始化和启动过程 2. controller高可用1.1 选主逻辑1.2 HA切换1.3 controller的职责 3. partition高可用3.1 ISR列表3.1 选举Leader 4. 疑问和思考4.1 如果…

mysql优化之语句调优

SQL优化技巧 使用group by 分组查询是,默认分组后,还会排序,可能会降低速度,在group by 后面增加 order by null 就可以防止排序.有些情况下,可以使用连接来替代子查询。因为使用join,MySQL不需要在内存中…

安卓开发转鸿蒙开发到底有多简单?

前言 相信各位搞安卓的同学多多少少都了解过鸿蒙了,有些一知半解而有些已经开始学习起来。那这个鸿蒙到底好不好搞?要不要搞? 安卓反正目前工作感觉不好找,即便是上海这样的大城市也难搞,人员挺饱和的。最近临近年关…

23年12月-24年1月工作笔记整理(前端)

目录 一、css知识二、js知识三、需求技术 一、css知识 1.css实现文字描边(白底黑边) -webkit-text-stroke: 1px #000; color: #fff; font-weight: 900;2.css子元素平分父元素的宽度 父元素{ display:flex;} 子元素{flex:1}二、js知识 1.dayjs拿月份…

发布技术路线图!美国量子计算公司QuEra公开三年OKR

​编辑丨慕一 编译/排版丨琳梦 卉可 深度好文:1100字丨8分钟阅读 近期,美国量子计算公司QuEra Computing宣布了一系列关于容错量子计算机的战略路线图,该路线图从2024年开始,最终目标是打造具有100纠错逻辑量子比特的系统。 在…

银行数据仓库体系实践(10)--汇总指标层和集市模型设计

建立多层次的数据访问服务体系,有力提升数据仓库的价值。基于指标汇总层、集市层、可以提供面向业务人员的即席数据查询、以及面向应用开发者的数据接口、应用访问接口,满足不同类型应用的需要。 1、汇总指标层模型设计原则及步骤 1.1建设目标&#xff…

Blender教程(基础)-面的细分与删除、挤出选区-07

一、Blender之面的细分 新建一个立方体,在编辑模式下、选中一个面。 在选中的面上单击右键弹出细分选项,选择细分。 在选中细分后、会默认细分1次。修改细分次数在左下角 二、Blender之面的删除 选择中需要操作的面,在英文状态下按X键弹…

Flutter开发2:安装Flutter

在本篇博客中,我们将详细介绍如何安装Flutter开发环境。安装Flutter是开始使用Flutter进行跨平台移动应用开发的第一步。让我们开始吧! 官方安装文档 步骤1:下载Flutter SDK 打开浏览器,访问Flutter官方网站:https://…

SSRF靶场实践(作业)

Pikachu靶场 进入ssrf的页面,点击连接,发现url中记载了另一个url的内容 通过加载百度的网址发现可以返回内容 利用伪协议进行读取本地文件powershell.exe;不能执行,只能读取 查看源码,发现是通过curl_exec()读取网页/…

uniapp的安卓升级功能说明

目录 1.实现思路 2.app代码示例 3.说明 1.实现思路 ①将安装包存储在后台服务器。 创建版本信息表,存储安装包的相关信息。保存安装包的名称,版本号,网络地址,是否强制升级,发布时间信息及升级内容等。表结构如下&…

如何在Excel中清除单元格的格式?这里有详细步骤

Microsoft Excel提供了大量样式选项来自定义电子表格的外观。但是,如果你需要删除格式,则可以很容易地删除选定单元格和整个工作表的格式。我们将向你展示如何操作。 ​注意:清除格式只会删除文本的样式;将保留你的实际文本。 如…

java.util.LinkedHashSet cannot be cast to java.util.List 的解决方案

出现 “java.util.LinkedHashSet cannot be cast to java.util.List” 的错误,通常是因为你试图将一个 LinkedHashSet 对象直接强制转换为 List 类型。在 Java 中,LinkedHashSet 和 List 是两种不同的集合类型,不能直接进行转换。LinkedHashS…

USB清理软件USBclean轻松清理.DS_Store,Thumbs.db,.Spotlight文件

USBclean for Mac是一款Mac上的USB清理工具,USBclean mac版能够帮助我们快捷方便地为你清理外部磁盘垃圾文件,它支持将.DS_Store, Thumbs.db, .Spotlight 以及回收站中的垃圾文件进行清理。操作也十分简单,只需要将要清理的外部磁盘拖拽到USB…

Linux编辑器之vim的使用

文章目录 一、vim简介二、vim的基本概念三、vim的基本操作四、vim正常模式命令集移动光标删除文字复制替换撤销上一次操作更改跳至指定的行vim末行模式命令集列出行号跳到文件中的某一行查找字符保存文件离开vim 五、进阶vim玩法打开文件批量注释代码执行shell命令指定注释窗口…

harmony开发ohpm mac环境配置

Mac电脑 安装 Ohpm |HarmonyOS 安装 Ohpm ohpm环境配置好后,执行ohpm会报如下的错 ohpm has not been initialized yet. Execute the init script to initialize it first. 解决办法 鸿蒙OS开发,解决报错“ohpm has not been initialized yet…

关于Gitlab用户登录提示无限重定向循环ERR_TOO_MANY_REDIRECTS

#工作笔记# 查阅了网上所有相关的记录,都没有解决gitlab登录/users/sign_up/welcome提示ERR_TOO_MANY_REDIRECTS,好在最终解决了,记录在此。 先说下起因: github哼哼不想用了,原因太多,所以内部讨论用git…

3D人体运动重建

目录 MotioNet FLEX 人格网格重建: VirtualMarker 虚拟人体网格重建 GraMMaR 数据集: MotioNet https://github.com/Shimingyi/MotioNet FLEX https://github.com/BrianG13/FLEX 人格网格重建: CVPR2023:IDEA与清华提出首…

远程访问@HttpExchange

提示:这是SpringBoot3以上的新特性。 远程访问HttpExchange 一、webClient二、Http 服务接口的方法定义三、声明式 HTTP 远程服务1.组合使用注解2.使用单个注解3.定制 HTTP 请求服务 四、总结1.部分方法过时2.过时的方法详解 远程访问是开发的常用技术,一…