最近在做安全测试相关的工作时,明显感觉到一个趋势:漏洞挖掘正在从纯手工向“AI 辅助 + 自动化”转型。传统渗透测试中,很多时间花在翻代码、找参数、试 payload、看日志上,而现在借助大模型和自动化工具,可以把其中一部分重复工作交给脚本和 AI 完成,人工只负责判断方向和验证结果。

这篇文章不打算讲那种“AI 全自动破解一切”的夸张内容,而是从实际可落地的角度,拆解 AI 自动化漏洞挖掘的完整链路:概念、环境、工具、代码审计、自动化检测、常见问题与合规边界。无论你是刚开始接触网络安全,还是已经在做渗透测试但想引入 AI 提效,都可以照着本文的思路搭建自己的学习路线。

1. AI 自动化漏洞挖掘到底是什么

1.1 漏洞挖掘与渗透测试的关系

漏洞挖掘(Vulnerability Discovery)和渗透测试(Penetration Testing)经常被混着说,但两者侧重点不同。

  • 漏洞挖掘:更偏向在目标系统、源码、协议中找到潜在的安全缺陷,比如 SQL 注入、XSS、越权访问、敏感信息泄露。
  • 渗透测试:更偏向通过模拟攻击路径,验证这些缺陷是否真的能被利用,以及能造成多大影响。

可以这样理解:漏洞挖掘负责“发现问题”,渗透测试负责“证明问题”。实际工作中两者是互相嵌套的,挖到疑似漏洞后,要用渗透的思路去验证;渗透过程中发现某个功能点异常,也可能牵连出新的漏洞。

AI 自动化漏洞挖掘,指的是用大模型、机器学习、规则引擎、自动化脚本等能力,辅助甚至部分替代人工完成信息收集、代码审计、参数测试、漏洞验证等环节。注意“辅助”这个词很关键,当前阶段 AI 还不是全自动挖洞神器,它更大的价值是压缩重复工作的时间。

1.2 AI 在漏洞挖掘中解决了什么痛点

传统漏洞挖掘的痛点非常明显:

  • 代码量大:一个中大型应用几百万行代码,人工审计不可能逐行看。
  • 信息收集耗时长:子域名、端口、目录、指纹、接口,每一步都可能要跑很久。
  • 低水平重复劳动多:同一个接口换着参数测注入、测越权,来回操作非常机械。
  • 知识覆盖面宽:Web 漏洞、二进制漏洞、云原生安全、供应链安全,一个人的经验总会有盲区。

AI 在这些场景中的价值比较明确:

  • 代码语义理解:大模型可以阅读一段函数,快速指出疑似危险调用。
  • 测试用例生成:根据接口参数定义生成边界值、畸形输入、攻击 payload 变体。
  • 日志与报错分析:扫描器跑出来的大量报错,AI 可以帮忙归类,过滤掉无效信息。
  • 漏洞报告撰写:把验证结果整理成结构化的报告,减少人工整理时间。

在实际实验中,AI 辅助渗透测试和 AI 自动化漏洞挖掘已经很常见了。比如用大模型辅助分析一段 Java 代码里的反序列化入口,或者让模型解释某个 WAF 拦截日志背后的绕过思路,这些都不是天方夜谭。

1.3 AI 安全与漏洞挖掘的关系

AI 安全目前有两个方向需要区分:

  • AI for Security:用 AI 技术去做安全分析和攻击模拟,也就是本文讲的核心。
  • Security for AI:保护 AI 系统本身的安全,比如提示注入攻击、模型窃取、训练数据投毒、对抗样本攻击等。

这两者在 CTF 比赛和实战中都会出现。比如有的 CTF 赛题会专门设计“AI 安全题目”,让选手通过构造特殊的 Prompt 让模型输出系统提示词,或者利用 RAG 应用中的注入漏洞获取目标文件。如果你准备走网络安全方向,AI 安全题目是一个值得专门练习的细分领域。

2. 环境准备:搭一套漏洞挖掘实验台

要做 AI 辅助漏洞挖掘,不需要一开始就配高配服务器。比较实用的方式是一台普通电脑 + 本地靶场 + Python 环境 + 一个大模型 API 或本地模型即可。

2.1 操作系统与基础软件

推荐使用 Linux 环境做安全测试,原因很实际:大量安全工具原生支持 Linux,命令行环境更干净,权限控制也比 Windows 更接近真实服务器场景。

如果你没有 Linux 基础,建议装 VMware 或 VirtualBox,跑一个 Kali Linux。Kali 自带大量渗透测试工具,比如 Nmap、Burp Suite、Dirb、Sqlmap、Metasploit 等,省去很多安装配置的时间。

常见实验环境如下:

宿主机:Windows 10/11 或 macOS
虚拟机:Kali Linux 2024.x(或其他更新版本)
本地靶场:Pikachu、DVWA、sqli-labs 等
Python:3.10+(本机或 Kali 内均可)
IDE:Visual Studio Code / PyCharm

2.2 本地漏洞靶场是学习的关键

学习漏洞挖掘最怕两件事:一是没有合法目标,二是对真实业务系统造成不可逆影响。本地靶场能同时解决这两个问题。

Pikachu 是一个开源的 PHP 漏洞靶场,内置了 SQL 注入、XSS、CSRF、RCE、越权、文件上传等常见漏洞场景,页面风格接近真实业务,非常适合做自动化漏洞挖掘演练。DVWA 也是经典靶场,它有安全级别设置,可以从 low 到 impossible 逐级挑战,很适合理解漏洞的成因和防御方式。

靶场部署方式一般为 Docker 或 PHP 集成环境,具体部署步骤在不同版本下略有差异。建议自己查一下对应靶场的最新安装文档,不要死记命令。重点是把环境跑起来,能访问到靶场首页。

2.3 Python 环境与依赖

Python 是在自动化漏洞挖掘中最常用的语言,原因是生态丰富、requests/urllib 写脚本快、可以直接调用很多安全库。

学习阶段建议安装以下 Python 包:

pip install requests
pip install beautifulsoup4
pip install urllib3

写自动化脚本时,requests 负责发送 HTTP 请求,BeautifulSoup 负责解析返回的 HTML 页面。更高级的漏洞指纹识别可以配合 whatweb 、 wappalyzer 等工具。

2.4 AI 辅助工具的选择

目前可用的 AI 辅助工具主要分三类。

第一类是通用大模型聊天产品,比如 ChatGPT、Claude、文心一言、通义千问、DeepSeek 等。它们适合做代码审计思路分析、payload 原理讲解、报错信息解读。你不需要把完整源码贴进去,只需要把关键函数或报错片段发过去,让模型帮你分析。

第二类是代码分析平台,比如 GitHub Copilot、Cursor、CodeQL 这类工具。它们可以直接在编辑器里对代码做静态分析,适合审计大型开源项目。

第三类是自己编写 Prompt 工程脚本,把大模型 API 接入到自动化检测流程中。例如一个脚本先跑 SQL 注入检测,发现疑似注入点后,自动调用大模型生成对应的绕过 payload,再把 payload 发回给目标接口验证。这种方式最贴近“AI 自动化漏洞挖掘”的实战场景。

需要说明的是,AI 工具迭代速度快,不同版本的能力差异很大,本文不绑定某一个具体产品。重点是教你建立思路,然后用你手头已有的 AI 工具落地。

3. AI 辅助漏洞挖掘的四种核心思路

3.1 代码审计加速

代码审计是漏洞挖掘的高价值环节。以前人工审计依赖经验和精力,现在可以先让 AI 做第一遍粗筛。

具体做法是把有风险嫌疑的代码文件交给大模型,让它找出以下内容:

  • 直接将用户输入拼接到 SQL、命令、模板中的位置。
  • 文件上传、文件下载功能中的路径可控点。
  • 反序列化入口和危险的 eval 、 exec 调用。
  • 越权风险:接口是否校验当前用户身份和资源归属。
  • 敏感信息泄露:硬编码密码、Token、OSS 密钥。

一个比较实用的方法是将代码审计 Prompt 模板固定下来,把每个文件都按模板过一遍,AI 输出的可疑点再人工复核。这样能在短时间内覆盖大量代码。

3.2 模糊测试与参数变异

模糊测试(Fuzzing)是自动生成大量异常输入并观察目标行为的技术。AI 在其中的作用是生成更“聪明”的测试数据。

传统 Fuzzing 生成的 payload 往往是随机字符串,命中率有限。大模型可以根据接口参数的含义,生成更合理的边界值、畸形数据、编码绕过变体。比如一个参数期望是数字,模型可以生成负数、极大值、浮点数、字符串、Unicode 数字、SQL 注入变体等,覆盖更全面。

这种测试思路可以用于 Web 接口,也可以用于命令行工具、API、文件解析器。

3.3 流量分析与日志排查

扫描器、爬虫、手工测试都会产生大量流量和日志。漏洞挖掘很多时候就是在这些日志里找“异常”。

AI 在日志分析中的优势在于模式识别。比如你可以把一段 WAF 日志发给大模型,让它解释攻击者试图做什么、payload 是什么编码方式、是否可能绕过当前规则。这样比人工逐个解码快很多。

在自动化链路中,可以让脚本先做常见攻击检测,把命中的请求保存为日志文件,再定时让 AI 汇总日志,输出高优先级问题清单。

3.4 渗透测试中的智能助手

AI 在渗透测试中更像一个“老手在旁边提醒”,而不是全自动攻击系统。

比如你正在测试一个登录接口,不知道从哪里下手。可以让 AI 给一个测试清单:用户名枚举、弱口令、验证码绕过、登录接口是否限速、忘记密码逻辑、JWT Token 校验等。也可以让 AI 根据 HTTP 请求包推断接口的后端逻辑,指出可能存在的业务逻辑漏洞。

这类使用方式对新手特别友好,相当于把一个经验库带在身上,随时查询。

4. 实战案例一:用 AI 辅助审计一段存在注入风险的代码

4.1 准备一段代码

假设我们拿到了一段 Flask 编写的登录接口代码,这是很典型的存在 SQL 注入风险的写法。

# 文件路径:app.py(存在安全问题的示例)
from flask import Flask, request
import sqlite3

app = Flask(__name__)

def get_db():
    conn = sqlite3.connect('user.db')
    return conn

@app.route('/login', methods=['POST'])
def login():
    username = request.form.get('username')
    password = request.form.get('password')

    conn = get_db()
    cursor = conn.cursor()
    sql = "SELECT * FROM users WHERE username = '%s' AND password = '%s'" % (username, password)
    cursor.execute(sql)
    user = cursor.fetchone()
    conn.close()

    if user:
        return "Login Success"
    return "Login Failed"

if __name__ == '__main__':
    app.run(debug=True)

这段代码的问题非常明显:字符串拼接 SQL、未使用参数化查询、异常处理缺失。但在一个大型项目中,这类代码往往埋在几万行代码里,人工不一定能快速定位。

4.2 给 AI 设计审计 Prompt

把上面的代码交给大模型,可以设计如下 Prompt:

请对下面这段 Python Flask 代码做安全审计,重点检查:
1. 是否存在命令注入、SQL 注入、路径遍历、文件上传风险。
2. 是否有敏感信息硬编码。
3. 修复建议是什么。
4. 给出一个可利用的测试输入示例。

代码:
【粘贴代码】

模型通常能回答出 SQL 注入风险,并指出 username 和 password 参数未做任何过滤,也没有使用参数化查询。它还会告诉你,可以构造 admin' or '1'='1 来绕过登录验证。

4.3 人工验证 AI 结论

AI 给出的结论只能作为参考,最终要以实际测试结果为准。在本地靶场中,我们可以构造一个真实的测试请求来验证:

curl -X POST http://127.0.0.1:5000/login \
  -d "username=admin' or '1'='1' -- &password=anything"

如果目标确实存在 SQL 注入,返回值很可能是 Login Success 。这就证明 AI 审计结论正确,接下来的修复方案也就有了明确方向。

这个案例的意义在于:AI 不是替你写漏洞报告,而是帮你缩小范围、提示风险点,最终验证和决策还是要靠人。

5. 实战案例二:编写 AI 辅助的 SQL 注入检测脚本

5.1 明确测试目标与合法性

在实际项目里做自动化检测,必须确认你有权利对这个目标进行测试。对授权范围内的目标进行验证是安全测试的基本底线。本文的示例只针对本地靶场或你自己搭建的实验环境。

建议统一使用 Pikachu 等靶场环境,把接口跑通后再迁移到更复杂的环境。

5.2 编写基础检测脚本

下面是一个简单的 SQL 注入检测脚本,核心思路是给参数添加单引号、布尔条件、延时 payload,通过响应差异判断是否存在注入点。

# 文件路径:sqli_detect.py
import requests

def check_sqli(url, param, base_data):
    results = []

    payloads = {
        "single_quote": "'",
        "boolean_true": "1' or '1'='1",
        "boolean_false": "1' and '1'='2",
        "time_based": "1' AND SLEEP(3) -- ",
    }

    for name, payload in payloads.items():
        data = base_data.copy()
        data[param] = payload
        try:
            resp = requests.post(url, data=data, timeout=10)
            results.append({
                "payload": name,
                "status_code": resp.status_code,
                "length": len(resp.text),
                "time_cost": resp.elapsed.total_seconds()
            })
        except Exception as e:
            results.append({
                "payload": name,
                "error": str(e)
            })

    return results

if __name__ == "__main__":
    target_url = "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php"
    test_param = "name"
    test_data = {"name": "admin", "submit": "查询"}

    result_list = check_sqli(target_url, test_param, test_data)

    for item in result_list:
        print(item)

这个脚本的输出会展示每个 payload 对应的状态码、响应长度和耗时。当某个 payload 的响应长度和其他明显不同,或者耗时显著增加,就说明可能存在注入点。

5.3 让 AI 解释检测结果

脚本跑完后,你可以把结果粘贴给大模型,例如:

我向某个参数提交了 paylaod,响应长度如下,请分析哪些结果说明存在注入可能:
【粘贴输出结果】

AI 的典型分析逻辑是: boolean_true 和正常请求的响应长度一致,但 boolean_false 响应长度明显变化,说明布尔注入条件生效,大概率存在 SQL 注入。这种“AI 解读 + 人工复核”的流程比人工看一堆扫描日志高效。

5.4 进阶:接入大模型 API 自动生成测试用例

如果你希望检测脚本更自动,可以设计一个小型工作流:基础探测发现疑似注入点后,调用大模型 API,让模型基于当前参数和响应特征生成更高级的绕过 payload。

伪代码如下:

# 文件路径:ai_sqli_assist.py(伪代码示例,需按实际 API 调整)
import requests
import json

def call_llm(prompt):
    # 这里填写你实际使用的大模型 API 配置
    # 不同平台的请求格式不一样,需要根据官方文档调整
    response = requests.post(
        "http://your-llm-api-endpoint",
        json={"prompt": prompt},
        timeout=30
    )
    return response.json().get("output", "")

def generate_payloads(feature):
    prompt = f"""
    根据以下 SQL 注入检测特征,生成 5 个不同的绕过 payload。
    要求:覆盖大小写绕过、注释符绕过、URL 编码绕过等思路。
    检测特征:{feature}
    只输出 payload 列表,不要解释。
    """
    result = call_llm(prompt)
    payload_lines = [line.strip() for line in result.splitlines() if line.strip()]
    return payload_lines

if __name__ == "__main__":
    feature = "参数 name 存在布尔注入,or 条件返回正常页面,and 条件返回空页面"
    payloads = generate_payloads(feature)
    for p in payloads:
        print(p)

这是一个非常实用的思路。模型不需要知道目标系统的全部细节,只需根据你提供的注入特征,生成候选测试输入,再交给检测脚本去验证。这样就形成了一个“自动化产生用例 → 自动化验证 → 人工复核”的闭环。

6. 实战案例三:自动化信息收集与敏感路径初筛

6.1 信息收集是漏洞挖掘的起点

渗透测试和 SRC 漏洞挖掘中,信息收集直接决定后续测试的范围和方向。常见的信息收集内容包括子域名、端口、Web 指纹、目录路径、JS 文件中的接口泄露等。

AI 在这里的用途主要有两类:

  • 根据目标网站的首页内容和响应头,自动判断网站使用的 CMS、框架、中间件,并映射常见漏洞点。
  • 将常见路径字典结合响应特征,筛选出可能存在的后台、备份文件、未授权接口。

6.2 编写路径扫描脚本

下面是一个简单的 Python 路径扫描脚本,利用多线程快速检查常见敏感路径。

# 文件路径:path_scanner.py
import requests
from concurrent.futures import ThreadPoolExecutor

COMMON_PATHS = [
    "/admin",
    "/login",
    "/api",
    "/swagger-ui.html",
    "/actuator",
    "/.git/config",
    "/backup.zip",
    "/phpinfo.php",
    "/robots.txt",
    "/.env",
    "/api/docs",
]

def check_path(base_url, path):
    url = base_url.rstrip("/") + path
    try:
        resp = requests.get(url, timeout=5, allow_redirects=False)
        if resp.status_code == 200:
            return {
                "url": url,
                "status": resp.status_code,
                "length": len(resp.text),
                "title": extract_title(resp.text)
            }
    except Exception:
        pass
    return None

def extract_title(html):
    import re
    match = re.search(r"<title>(.*?)</title>", html, re.IGNORECASE)
    return match.group(1) if match else ""

def scan(base_url, paths):
    results = []
    with ThreadPoolExecutor(max_workers=5) as executor:
        futures = [executor.submit(check_path, base_url, p) for p in paths]
        for f in futures:
            result = f.result()
            if result:
                results.append(result)
    return results

if __name__ == "__main__":
    base_url = "http://127.0.0.1/pikachu"
    found = scan(base_url, COMMON_PATHS)
    for item in found:
        print(item)

运行后,脚本会输出返回 200 的路径,以及每个路径的响应长度和页面标题。接下来你要做的不是盲目访问,而是把结果交给 AI 分析。

6.3 用 AI 生成检测优先级报告

把扫描结果贴给 AI,Prompt 可以写成:

我扫描了一个测试站点的敏感路径,结果如下:
【粘贴扫描结果】

请帮我:
1. 按“最值得优先测试”排序。
2. 每个路径说明潜在风险点。
3. 给出下一步测试建议。

模型会告诉你: /phpinfo.php 可能泄露配置信息, /.git/config 可能导致源码泄露, /actuator 如果存在可能暴露大量运行时信息,建议优先深入测试。AI 会把路径、风险等级和测试思路串起来,等于帮你生成了一份初步的攻击面分析报告。

7. AI 自动化漏洞挖掘的高频问题与排查思路

实践过程中,很多人会卡在一些看似简单的问题上。下面整理几个常见问题和排查方向。

问题现象 常见原因 解决思路
扫描脚本一直报超时 目标站点响应慢、WAF 拦截了检测请求、线程数过高 先降低并发数;确认目标是否在授权范围内;给请求增加随机 UA 和延时
AI 分析结果与实际不符 模型产生幻觉,或输入给它的代码/日志不完整 把关键线索单独提取出来再问;让 AI 给出依据和修复建议,人工复核
靶场搭建后访问异常 PHP 版本不兼容、数据库未初始化、端口占用 查看靶场官方文档,按对应版本的部署说明操作
检测到疑似漏洞但无法利用 修复了注入点、WAF 拦截、权限不足 确认漏洞是否存在的前提条件,检查请求是否完整模拟业务逻辑
大模型 API 请求总失败 网络问题、接口格式不对、密钥失效 先确认官方 API 文档的请求格式,用最简单的请求测试连通性
脚本扫描出的路径很多无意义 路径字典太宽泛,没有结合目标指纹 先做指纹识别,再针对不同 CMS 选择对应字典

AI 工具本身也会形成新的攻击面,比如有人在 CTF 赛题中专门设计“提示注入”和“模型窃取”类题目,这提醒我们:用 AI 做漏洞挖掘的同时,也要了解 AI 系统自身的安全风险,比如对话历史是否包含敏感信息、上传的代码片段是否有保密要求、大模型 API 的 Token 是否有泄露风险。

8. 最佳实践与工程建议

8.1 授权边界是第一条红线

在任何形式的漏洞挖掘、渗透测试、漏洞验证开始之前,先确认授权书面文件或明确授权记录。这个底线对任何人都适用,无论技术多高、工具多强,都不能越过合法边界。学习阶段尽量使用本地靶场、CTF 题目平台和有授权的 SRC 项目。

8.2 数据脱敏与隐私保护

在 AI 辅助漏洞挖掘中,你经常会把代码片段、日志、请求包内容发送给大模型。要注意:

  • 不要把真实业务系统的敏感数据直接粘贴给外部模型。
  • 日志中的密码、Token、身份证号、手机号要先脱敏。
  • 如果企业内部有合规要求,优先使用私有化部署的模型或经过审批的 AI 平台。
  • AI 对话记录可能被留存,生产环境的数据要谨慎处理。

8.3 把 AI 当“副驾驶”而不是“自动驾驶”

AI 生成的 payload、审计结论、测试用例,天然存在误报和漏报,不能直接当成攻击结果。

正确的处理方式:

  • AI 输出的结果要做复现验证。
  • 修复建议要结合业务场景判断。
  • 测试脚本要在测试环境跑通后再考虑是否迁移。
  • 漏洞报告需要人工补充影响范围和利用条件。

8.4 建立自己的自动化工作流

从学习阶段开始,就可以积累一套标准的自动化工作流。推荐的分层结构:

第一层:信息收集
  域名 / IP / 指纹 / 端口 / 目录 / JS 文件
第二层:漏洞探测
  常见漏洞检测脚本 + 大模型生成测试用例
第三层:验证与利用
  人工确认 + 漏洞复现 + 影响评估
第四层:报告输出
  AI 辅助生成报告 + 人工审核

每层之间可以通过脚本传递数据。比如第一层扫描到某个 CMS 版本,第二层自动加载这个 CMS 的已知漏洞测试用例,第三层验证成功后,第四层自动生成一条漏洞记录。这样的体系可以帮助你在 SRC 漏洞挖掘中极大提升效率。

9. 学习路线与下一步

如果你是完全零基础,我建议按以下顺序推进:

  • 第一阶段:掌握 Web 基础,理解 HTTP 协议、前后端交互、Cookie 和 Session 机制。
  • 第二阶段:学习常见漏洞的原理,在 Pikachu、DVWA 等靶场中手动复现 SQL 注入、XSS、CSRF、文件上传等漏洞。
  • 第三阶段:学习 Python 脚本编写,用 requests 库写自动化检测脚本,把第二阶段的手工操作脚本化。
  • 第四阶段:学习使用 Burp Suite 抓包改包,理解请求和响应的完整链路。
  • 第五阶段:引入 AI 辅助,用大模型做代码审计、日志分析、payload 生成,尝试构建自己的自动化工作流。
  • 第六阶段:参与 CTF 个人赛,尤其是包含 AI 安全题目的比赛,检验前置学习成果,扩展对新型攻击面的认知。

CTF 是一个很好的练兵场,它不需要授权,题目本身就是一个合法的测试目标。通过模拟 CTF 个人赛,你可以练习 Web 漏洞利用、命令执行、代码审计等能力,也能接触一些现实中不常见的攻击技巧。

整个 AI 自动化漏洞挖掘方向的核心,不是学会某一个工具,而是建立一套“思路 + 脚本 + AI + 验证”的方法论。工具会过时,模型会迭代,但方法论可以不断复用。希望这篇文章能帮你找到切入点,尽快搭建起自己的学习环境和自动化检测体系。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐