DeepSeek赋能Nuclei:打造网络安全检测的“超级助手”

news2025/5/13 22:59:53

引言

各位少侠,周末快乐,幸会幸会!

今天唠一个超酷的技术组合——用AI大模型给Nuclei开挂,提升漏洞检测能力!

图片

想象一下,当出现新漏洞时,少侠们经常需要根据Nuclei模板,手动扒漏洞文章、敲代码,而既然现在有了DeepSeek等AI大模型,让它们成为“智能小秘书”,喝口咖啡的工夫,模板就自动生成了!

值得注意的是,Github上也有各式各样的Nuclei的自建poc仓库,如何快速集成,确保自己的Nuclei背后使用的poc仓库最大最全最准确,也是需要思考的问题!

当然,隐侠也在构建面向业内的知识库、漏洞库,以及Github上的poc库,少侠们敬请期待,不日将会与大家见面。

接下来,就带大家看看刚刚描述的AI大模型与Nuclei的“神仙组合”到底是怎么玩转网络安全检测的!

为啥要让DeepSeek和Nuclei组CP?

Nuclei的模块化检测范式与工程瓶颈

作为漏洞检测标准工具,Nuclei通过YAML模板实现检测逻辑与引擎解耦,这种"检测即代码"(Detection as Code)的模式使其具备以下特性:

  • 原子化检测单元:每个模板对应CWE、CVE等漏洞特征,支持组合式检测策略。

  • 跨平台兼容性:基于HTTP/RAW协议层的抽象,实现从Web应用到IoT设备的统一检测。

  • 敏捷响应能力:无需重新编译即可动态加载新检测规则。

但模板编写存在显著工程瓶颈:

  • 知识转化延迟:人工分析漏洞报告→提取攻击向量→编码为匹配规则的平均耗时约37分钟/模板。

  • 特征覆盖盲区:2024年Log4j2漏洞爆发时,主流模板库覆盖率仅68%,导致企业暴露攻击面窗口期延长。

模版举例:

id: CVE-2023-25157

info:
  name: GeoServer OGC Filter - SQL Injection
  author: ritikchaddha,DhiyaneshDK,iamnoooob,rootxharsh
  severity: critical
  description: |
    GeoServer isanopensource software server written in Java that allows users to share andedit geospatial data. GeoServer includes support for the OGC Filter expression languageand the OGC Common Query Language (CQL) as part of the Web Feature Service (WFS) and Web Map Service (WMS) protocols. CQL is also supported through the Web Coverage Service (WCS) protocol for ImageMosaic coverages. Users are advised to upgrade to either version2.21.4, orversion2.22.2toresolve this issue. Users unable to upgrade should disable the PostGIS Datastore *encode functions* setting to mitigate ``strEndsWith``, ``strStartsWith`` and ``PropertyIsLike `` misuse and enable the PostGIS DataStore *preparedStatements* setting to mitigate the ``FeatureId`` misuse.
  reference:
    - https://twitter.com/parzel2/status/1665726454489915395
    - https://nvd.nist.gov/vuln/detail/CVE-2023-25157
    - https://github.com/win3zz/CVE-2023-25157
    - https://github.com/geoserver/geoserver/security/advisories/GHSA-7g5f-wrx8-5ccf
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
    cvss-score: 9.8
    cve-id: CVE-2023-25157
    cwe-id: CWE-89
    cpe: cpe:2.3:a:osgeo:geoserver:*:*:*:*:*:*:*:*
  metadata:
    verified: "true"
    shodan-query: title:"geoserver"
tags: cve,cve2023,geoserver,ogc,sqli,intrusive

http:
  - raw:
      - |
        GET /geoserver/ows?service=WFS&version=1.0.0&request=GetCapabilities HTTP/1.1
        Host: {{Hostname}}
      - |
        GET /geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typeName={{name}}&maxFeatures=50&outputFormat=csv HTTP/1.1
        Host: {{Hostname}}
      - |
        GET /geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typeName={{name}}&CQL_FILTER=strStartswith({{column}},%27%27%27%27)=true HTTP/1.1
        Host: {{Hostname}}
    stop-at-first-match: true
    iterate-all: true
    matchers-condition: and
    matchers:
      - type: word
        part: body_3
        words:
          - "SQL SELECT"

      - type: word
        part: header_3
        words:
          - text/xml

    extractors:
      - type: regex
        part: body_1
        group: 1
        name: name
        regex:
          - '<FeatureType><Name>(.*?)<\/Name><Title>'
        internal: true

      - type: regex
        part: body_2
        group: 1
        name: column
        regex:
          - 'FID,([aA-zZ_]+),'
        internal: true

以DeepSeek为代表的通用大模型,则可提升这一过程的效率。利用如下的结构化提示,将输出空间限制在有限维度,结合以下技术保障确定性:

  • 参数冻结机制:对HTTP方法、匹配条件等关键字段进行类型约束

  • 防御性解析:AI输出经语法树校验和沙箱验证

  • 知识蒸馏:基于漏洞数据库模型,提升CWE特征识别准确率

# 提示工程示例
prompt_template = """
基于漏洞报告生成Nuclei模板(JSON格式):
输入特征:
- 漏洞路径:{endpoint}
- 有效载荷样本:{payload_sample}
- CVSS评分:{cvss_score}

输出约束:
1. 必须包含{BaseURL}占位符
2. 匹配规则需包含状态码、关键词、正则三元组
3. 严重级别按CVSS v3.1划分
"""

典型场景:漏洞文摘->POC,从“手搓”到“秒产”

1. 漏洞文章“一键抓取”

本文基于Python做实现,基于requests库访问漏洞文章网址,再靠BeautifulSoup把网页“拆解”得明明白白。

要是遇到网站设的“反爬虫关卡”(返回403状态码),它还会“机智”地重试3次,绝不轻易放弃!最终把文章里的漏洞路径、攻击Payload这些关键信息全都“挖”出来。

实现代码:

def _crawl_article(self, url):
    for retry in range(3):
        try:
            resp = self.session.get(url, timeout=20)
            resp.raise_for_status()
            if resp.status_code == 403:
                raise RuntimeError("Anti-bot triggered")
            soup = BeautifulSoup(resp.text, 'lxml')
            return {
                'title': self._extract_title(soup),
                'cve': self._extract_cve(soup),
                'endpoint': self._find_vuln_path(soup),
                'payloads': self._extract_payloads(soup),
                'references': self._find_references(soup),
                'raw_html': resp.text[:5000] # Limit content size
            }
        except requests.RequestException as e:
            if retry == 2:
                raise RuntimeError(f"Request failed after 3 attempts: {str(e)}")
            self.logger.warning(f"Retrying ({retry+1}/3)...")

2. DeepSeek的“魔法翻译”

这里是DeepSeek大显身手的地方!我们给它“喂”一段精心设计的提示模板,就像给它下达任务指令:“根据这些漏洞信息,用JSON格式生成Nuclei模板参数!” 为了防止网络不稳定掉链子,同样设置了3次重试。DeepSeek接收到指令后,一顿“分析猛如虎”,很快就能返回包含漏洞ID、匹配规则等信息的参数。

prompt=f"""根据漏洞报告生成Nuclei模板(JSON格式):

输入特征:
- 漏洞路径:{content['endpoint']}
- 有效载荷:
{chr(10).join(f'- {p}'forp in content['payloads'][:2])}
- 参考链接:
{chr(10).join(content['references'][:2])}

输出要求:
1. 严重等级按CVSS评分划分
2. 必须包含{{{{BaseURL}}}}变量
3. 包含状态码、关键词、正则匹配

输出格式:
{{
"id": "漏洞ID",
"name": "漏洞名称",
"method": "HTTP方法",
"paths": ["攻击路径"],
"matchers": {{
    "status": 200,
    "keywords": ["特征关键词"],
    "regex": ["正则表达式"] 
  }},
"severity": "严重等级",
"references": ["参考链接"],
"description": "漏洞描述",
"fofa_query": "FOFA查询语句",
"tags": ["漏洞类型"]
}}
"""

def _analyze_with_ai(self, content):
    prompt = self._build_prompt(content)
    for attempt in range(3):
        try:
            response = self.client.chat.completions.create(
                model="deepseek-chat",
                messages=[
                    {"role": "system", "content": "严格使用JSON格式输出"},
                    {"role": "user", "content": prompt}
                ],
                temperature=0.2,
                max_tokens=2000,
                response_format={"type": "json_object"}
            )
            return self._process_ai_response(response.choices[0].message.content)
        except Exception ase:
            if attempt == 2:
                raise RuntimeError(f"API request failed: {str(e)}")
            self.logger.warning(f"Retrying API call ({attempt+1}/3)...")

3. 模板“拼装大师”上线

这个方法就像个“模板拼装大师”,把DeepSeek返回的参数“组装”成完整的Nuclei模板。

它会先把基本信息、请求方法这些“零件”摆好,要是参数里有正则匹配需求,还会自动添加对应的“正则匹配模块”。

最后把模板以YAML格式保存到指定文件夹,文件名还带着时间戳,方便管理!

def _build_template(self, ai_data):
        """构建Nuclei模板文件"""
        template = {
            "id": ai_data.get("id", "auto-generated"),
            "info": {
                "name": ai_data.get("name", "Unknown Vulnerability"),
                "author": "AutoPOCGenerator",
                "severity": ai_data.get("severity", "medium"),
                "description": ai_data.get("description", "Generated by DeepSeek AI"),
                "reference": ai_data.get("references", []),
                "tags": ai_data.get("tags", ["ai-generated"]),
                "metadata": {
                    "fofa-query": ai_data.get("fofa_query", "")
                }
            },
            "requests": [{
                "method": ai_data.get("method", "GET"),
                "path": ai_data.get("paths", ["{{BaseURL}}"]),
                "matchers-condition": "and",
                "matchers": [
                    {"type": "status", "status": [ai_data["matchers"]["status"]]},
                    {"type": "word", "words": ai_data["matchers"]["keywords"]}
                ]
            }]
        }

        # 添加正则匹配
        if ai_data["matchers"].get("regex"):
            template["requests"][0]["matchers"].append({
                "type": "regex", 
                "regex": ai_data["matchers"]["regex"]
            })

        # 生成文件名
        template_dir = Path(self.config['paths']['template_dir'])
        timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
        filename = template_dir / f"{template['id']}_{timestamp}.yaml"

        # 写入文件
        with open(filename, 'w', encoding='utf-8') as f:
            yaml.dump(template, f, allow_unicode=True, sort_keys=False)
        
        self.logger.info(f"Template saved: {filename}")
        return str(filename.resolve())

如此这番,从一篇漏洞文章变成一个可利用的nuclei poc的工作就完成了。

值得注意的是,AI输出毕竟有其不稳定性,一是需要人工确认poc内容是否与漏洞文章中的描述一致,二是可以使用如下命令,检测poc能否正常运行:

./nuclei -t ./nuclei_templates/path-traversal-vite-project_20250417_2313.yaml -validate

图片

Nuclei的“私人定制”更新与扫描

1.带配置的“智能更新”

读取相关配置,找到Nuclei可执行文件的位置。要是配置里开了代理,它会自动在更新命令里加上代理参数,就像给Nuclei更新加上“专属通道”。执行完更新命令,还会把结果详细记录到日志里,更新出问题了一眼就能发现。

def update_nuclei():
    try:
        config = load_config()
        nuclei_binary = Path(config["paths"]["nuclei_binary"])
        ifnot nuclei_binary.exists():
            raise FileNotFoundError(f"Nuclei可执行文件不存在:{nuclei_binary}")
        cmd = [str(nuclei_binary.resolve()), "-update"]
        if config["proxy"]["enable"]:
            cmd.extend(["-proxy", config["proxy"]["address"]])
            logging.info("已启用代理更新")
        result = subprocess.run(
            cmd,
            check=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT,
            text=True
        )
        logging.info(f"模板更新成功\n{result.stdout}")
    except subprocess.CalledProcessError as e:
        error_msg = f"更新失败:{e.output if e.output else '无错误详情'}"
        logging.error(error_msg)
    except Exception as e:
        logging.error(f"未知错误:{str(e)}")

图片

2. 扫描命令“私人订制”

build_command函数能根据我们的需求,生成Nuclei扫描命令。不管你是想扫描单个目标,还是指定多个POC模板路径,它都能搞定!它会先检查POC路径是不是真的存在,再把代理、速率限制这些参数按配置加上,就像给扫描任务穿上“定制装备”。

def build_command(config, target_file, pocs):
    cmd = [
        './'+str(NUCLEI_BINARY),
        '-list', str(target_file),
        '-rate-limit', '100',
        '-timeout', '30'
    ]
    if pocs:

        validated_pocs = [ ]

        for poc_path in pocs:
            path = Path(poc_path).resolve()
            if not path.exists():
                raise FileNotFoundError(f"POC路径不存在: {path}")
            validated_pocs.append(str(path))
        cmd.extend(['-t', ','.join(validated_pocs)])
    if config['proxy'].get('enable', "True"):
        cmd.extend(['-proxy', config['proxy']['address']])
    print(cmd)
    return cmd

由此,我们的Nuclei就像不断被磨砺过的利剑,始终保持锋利的模样。

企业级模板管理:模板的“智能仓库”

1. 模板仓库“自动补货”

这里构建的代码,就像个“仓库管理员”,定期从GitHub上找最新的Nuclei模板仓库。通过GitHub API搜索,筛选出30天内更新的仓库,用异步操作批量克隆或更新到本地,保证我们的模板库永远“新鲜”。

async def dynamic_repo_discovery(self):
    if not self.config['ENABLE_STAGE1']:
        print(f"\n{'='*30} 已跳过仓库同步阶段 {'='*30}")
        return
    print(f"\n{'='*30} 阶段1: 动态仓库同步 {'='*30}")
    new_repos = await self._fetch_github_repos()
    self._update_repo_registry(new_repos)
    with open(REPO_FILE) as f:
        urls = {line.strip() for line in f if line.strip()}
    tasks = [self._async_git_ops(url) for url in urls]
    batch_size = self.config['GIT_PARALLEL'] * 2
    for i in range(0, len(tasks), batch_size):
        await asyncio.gather(*tasks[i:i+batch_size])

2. 模板“去重分类”大作战

通过计算文件的SHA256哈希值,把重复的模板“揪”出来删掉,避免做无用功。并根据模板里的标签信息,把模板自动分到不同文件夹,下次想用某个类型的模板,直接去对应文件夹找就行,超方便!

3. 模板“质量检测”与索引生成

基于Nuclei的-validate选项给模板“体检”,把有问题的模板淘汰掉。最后生成一个索引文件poc.txt,记录所有有效模板的位置,就像一本模板“导航手册”。

图片

实战效果:真的能打!

我们在模拟环境和公开漏洞靶场做了测试。生成模板速度比人工快了好几倍,而且93%的模板直接使用或者微调后都能准确检测到漏洞。

这波DeepSeek和Nuclei的组合,绝对是安全检测的“王炸”!

结语

本文向少侠们介绍了AI大模型如何助力Nuclei更好使用,从poc生成、公开poc收集和使用参数优化等方面进行逐一讲解。

后面我们打算继续优化DeepSeek的提示模板,让生成的模板更精准;探索把这套思路用到更多安全场景里;再研究研究怎么让扫描速度更快。相信以后这套技术还能解锁更多“隐藏技能”,一起期待吧!

少侠们,快试试这套DeepSeek赋能Nuclei的方案,让你的漏洞学习与漏洞检测工作轻松又高效!要是在使用过程中有啥新想法、新发现,欢迎一起交流,咱们共同把网络安全防线筑得更牢!

代码已上传Github:https://github.com/EastSword/XuanyuanSword_AINuclei

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

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

相关文章

从0到1彻底掌握Trae:手把手带你实战开发AI Chatbot,提升开发效率的必备指南!

我正在参加Trae「超级体验官」创意实践征文&#xff0c; 本文所使用的 Trae 免费下载链接&#xff1a; www.trae.ai/?utm_source… 前言 大家好&#xff0c;我是小Q&#xff0c;字节跳动近期推出了一款 AI IDE—— Trae&#xff0c;由国人团队开发&#xff0c;并且限时免费体…

opencv图片颜色识别,颜色的替换

图片颜色识别 1. RGB颜色空间2. 颜色加法2.1使用numpy对图像进行加法2.2使用opencv加法&#xff08;cv2.add&#xff09; 3 颜色加权加法&#xff08;cv2.addWeighted()&#xff09;4. HSV颜色空间5. 制作掩膜4. 与运算&#xff08;cv2.bitwise_and&#xff09;5.颜色的替换7 R…

B实验-12

需要注意版本、页面源代码 两个文件一个目录&#xff1a;phpinfo robots phpmyadmin 实验12 靶机1 一个key在phpmyadmin&#xff0c;一个key在回收站 用两个扫描目录的工具扫&#xff0c;nmap给python版 情况1&#xff1a;弱口令 root root root 123456 …

【网工第6版】第5章 网络互联②

目录 ■ IPV6 ▲ IPV6报文格式 ◎ IPV6扩展报头&#xff08;RFC2460&#xff09; ◎ IPv6相关协议 ▲ IPV6地址分类 ◎ IPv6地址基础 ◎ IPv6地址举例 ◎ IPv6地址分类 ◎ 特殊地址对比IPv4 vs IPv6 ▲ 过渡技术 本章重要程度&#xff1a;☆☆☆☆☆ ■ IPV6 与IPv4…

单页面应用的特点,什么是路由,VueRouter的下载,安装和使用,路由的封装抽离,声明式导航的介绍和使用

文章目录 一.什么是单页面应用?二.什么是路由?生活中的路由和Vue中的路由 三.VueRouter(重点)0.引出1.介绍2.下载与使用(5个基本步骤2个核心步骤)2.1 五个基本步骤2.2 两个核心步骤 四.路由的封装抽离五.声明式导航1.导航链接特点一:能跳转特点二:能高亮 2.两个高亮类名2.1.区…

STM32---外部中断EXTI

目录 一、中断向量表 二、EXTI工作原理图 三、NVIC模块 四、GPIO设置为EXTI的结构 五、C语言示例代码 在STM32中&#xff0c;中断是一个非常重要的结构&#xff0c;他能让我们在执行主函数的时候&#xff0c;由硬件检测一些外部或内部产生的中断信号&#xff0c;跳转到中断…

Itext进行PDF的编辑开发

这周写了一周的需求&#xff0c;是制作一个PDF生成功能&#xff0c;其中用到了Itext来制作PDF的视觉效果。其中一些功能不是很懂&#xff0c;仅作记录&#xff0c;若要学习请仔细甄别正确与否。 开始之前&#xff0c;我还是想说&#xff0c;这傻福需求怎么想出来的&#xff0c…

Hibernate的组件映射

在实际的开发中,使用的是非常多的&#xff0c;还有几种比较特殊的关系映射: 组件映射继承映射 先看一下组件映射: 组件映射中, 组件也是一个类, 但是这个类它不独立称为一个实体, 也就是说, 数据库中没有一个表格单独的和它对应, 具体情况呢, 看演示&#xff1a;

C++ 操作符重载Operator

C可以重载大多数操作符&#xff0c;如算术运算符号&#xff0c;-号。 位操作符<<,>> 下标符号[]等都可以重载。 重载的意思&#xff0c;是让这些符号&#xff0c;按你定义的行为来执行代码&#xff0c;但是这种自定义&#xff0c;是有限制的&#xff0c;必须有一…

Docker 镜像、容器和 Docker Compose的区别

前言&#xff1a;Docker 的镜像、容器和 Docker Compose 是容器化技术的核心组件&#xff0c;以下是对它们的详细解析及使用场景说明。 ​​1、Docker 镜像&#xff08;Image&#xff09;​​ ​​定义​​&#xff1a; 镜像是只读模板&#xff0c;包含运行应用程序所需的代码、…

Linux深度探索:进程管理与系统架构

1.冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系。 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是由⼀个个的硬件组件组成。 输入设备&#xff1a;键盘&#xff0c;鼠标…

一段式端到端自动驾驶:VAD:Vectorized Scene Representation for Efficient Autonomous Driving

论文地址&#xff1a;https://github.com/hustvl/VAD 代码地址&#xff1a;https://arxiv.org/pdf/2303.12077 1. 摘要 自动驾驶需要对周围环境进行全面理解&#xff0c;以实现可靠的轨迹规划。以往的方法依赖于密集的栅格化场景表示&#xff08;如&#xff1a;占据图、语义…

4月21日星期一今日早报简报微语报早读

4月21日星期一&#xff0c;农历三月廿四&#xff0c;早报#微语早读。 1、女子伸腿阻止列车关门等待同行人员&#xff0c;被深圳铁路警方行政拘留&#xff1b; 2、北理工再通报&#xff1a;开除宫某党籍&#xff0c;免去行政职务&#xff0c;解除聘用关系&#xff1b; 3、澳门…

Kubeflow 快速入门实战(二) - Pipelines / Katib / KServer

承接前文博客 Kubeflow 快速入门实战(一) Kubeflow 快速入门实战(一) - 简介 / Notebooks-CSDN博客文章浏览阅读441次&#xff0c;点赞19次&#xff0c;收藏6次。本文主要介绍了 Kubeflow 的主要功能和能力&#xff0c;适用场景&#xff0c;基本用法。以及Notebook&#xff0c…

【JavaEE初阶】多线程重点知识以及常考的面试题-多线程进阶(一)

本篇博客给大家带来的是多线程中常见的所策略和CAS知识点. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; 要开心要快…

SAP系统生产跟踪报表入库数异常

生产跟踪报表入库数异常 交库21820,入库43588是不可能的 原因排查: 报表的入库数取值,是取移动类型321 (即系检验合格后过账到非限制使用)的数. 查凭证,101过账2次21807,321过账了2次21794,然后用102退1次21794.就是说这批物料重复交库了. 解决&#xff1a; 方案一:开发增强设…

Kubernetes控制平面组件:调度器Scheduler(一)

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…

08-DevOps-向Harbor上传自定义镜像

harbor创建完成&#xff0c;往harbor镜像仓库中上传自定义的镜像&#xff0c;包括新建项目、docker配置镜像地址、镜像重命名、登录harbor、推送镜像这几个步骤&#xff0c;具体操作如下&#xff1a; harbor中新建项目 访问级别公开&#xff0c;代表任何人都可以拉取仓库中的镜…

极验4滑块笔记:整理思路--填坑各种问题

最近在研究某验4逆向分析&#xff0c;以前没弄过这种&#xff0c;所以爬了很多坑&#xff0c;就是把分享给大家~ 1.这个gcaptcha4.js需要逆向&#xff0c;我的方法很笨就是将_ᕶᕴᕹᕶ()这个蝌蚪文打印处来&#xff0c;全局替换一下&#xff0c;然后Unicode这种代码&#xff0…

LX3-初识是单片机

初识单片机 一 什么是单片机 单片机:单片微型计算机单片机的组成:CPU,RAM(内存),flash(硬盘),总线,时钟,外设…… 二 Coretex-M系列介绍 了解ARM公司与ST公司ARM内核系列: A 高性能应用,如手机,电脑…R 实时性强,如汽车电子,军工…M 超低功耗,如消费电子,家电,医疗器械 三…