文章目录
一、什么是XSS?二、XSS分类与场景三、XSS攻击实战流程四、CTF中的XSS利用五、XSS防御方案六、绕过过滤的常见技巧七、实战练习资源
一、什么是XSS?
XSS(Cross-Site Scripting) 是一种通过向网页注入恶意脚本(JavaScript、HTML等),在用户浏览器中执行的攻击方式。攻击者可窃取用户Cookie、会话令牌,甚至控制用户浏览器行为。
二、XSS分类与场景
存储型XSS(Stored XSS)
特点:恶意脚本永久存储在目标服务器(如评论区、用户资料页)。影响范围:所有访问受影响页面的用户。示例: // 提交到评论区,所有用户加载时触发弹窗
反射型XSS(Reflected XSS)
特点:恶意脚本通过URL参数传递,服务端返回时直接嵌入页面。触发条件:用户需点击构造的恶意链接。示例: http://victim.com/search?q=`
DOM型XSS(DOM-Based XSS)
特点:漏洞位于客户端JavaScript代码中,不经过服务端处理。
常见场景:通过location.hash、document.write等动态修改DOM。
示例:
// 假设页面JS代码:document.write(location.hash.substring(1)); 恶意URL:http://victim.com#
三、XSS攻击实战流程
目标场景:某博客平台的评论功能存在存储型XSS漏洞。
步骤1:探测注入点
在评论区提交测试Payload:
若页面弹窗,确认漏洞存在。
步骤2:窃取用户Cookie
构造Payload将Cookie发送至攻击者服务器:
攻击者服务器(attacker.com)记录窃取的Cookie,用于会话劫持。
步骤3:钓鱼攻击
伪造登录表单诱导用户输入密码:
步骤4:键盘记录
监听用户输入并回传数据:
四、CTF中的XSS利用
窃取管理员Cookie获取Flag
题目场景:留言板存在XSS,管理员会查看留言。
Payload:
攻击者服务器接收管理员Cookie中的Flag。
DOM型XSS绕过过滤
题目过滤了
编码绕过:
HTML实体编码:
JavaScript Unicode编码:
\u0061\u006c\u0065\u0072\u0074(1)
利用标签属性:
七、实战练习资源
PortSwigger XSS Labs
地址:https://portswigger.net/web-security/cross-site-scripting XSS挑战游戏
XSS Game(Google):https://xss-game.appspot.com CTF平台
Hack The Box, CTFlearn中的Web题目。
总结:XSS攻击的核心在于控制用户浏览器执行恶意脚本。防御需结合输入过滤、输出编码、CSP等多层措施。在CTF中,灵活构造Payload并理解上下文过滤规则是解题关键。