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 如果…

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

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

发布技术路线图!美国量子计算公司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()读取网页/…

如何在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…

远程访问@HttpExchange

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

方法阻塞的解决方案之一

1、简单使用 一个h一个cpp文件 #pragma once #include <iostream> #include <thread> #include <atomic> #include <chrono> #include <string>class Person {public:struct dog {std::string name;int age;};public:void a(std::atomic<bo…

设计模式篇---备忘录模式

文章目录 概念结构实例总结 概念 备忘录模式&#xff1a;在不破坏封装的前提下捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;像这样可以在以后将对象恢复到原先保存的状态。 就好比我们下象棋&#xff0c;下完之后发现走错了&#xff0c;想要回退…

Unity 自动轮播、滑动轮播

如图所示&#xff0c;可设置轮播间隔&#xff0c;可左右滑动进行轮播 1.在UGUI创建个Image&#xff0c;添加自动水平组件 2.添加并配置脚本 3.代码如下&#xff0c;都有注释 using UnityEngine; using UnityEngine.UI;public class IndicatorManager : MonoBehaviour {public …

【乳腺肿瘤诊断分类及预测】基于LVQNN学习向量量化神经网络

课题名称&#xff1a;基于LVQ神经网络的乳腺肿瘤诊断&#xff08;类型分类&#xff09; 版本日期&#xff1a;2023-03-10 运行方式: 直接运行0501_LVQ0501.m 文件即可 代码获取方式&#xff1a;私信博主或QQ&#xff1a;491052175 模型描述&#xff1a; 威斯康辛大学医学院…

(HAL)STM32F407ZGT6——10-4 高级定时器 PWM 输入模式实验

一、高级定时器简介 高级定时器的框图和通用定时器框图很类似&#xff0c;只是添加了其它的一些功能&#xff0c;如&#xff1a;重复计数器、带死区控制的互补输出通道、断路输入等。 高级定时器的时钟来自APB2, 而PCLK2 168Mhz, 我们设置PPRE2不分频, 因此高级定时器时钟 …