🧠 Web 漏洞分析:Reflected / Stored / DOM XSS 实战(完整翻译)
原始来源:Medium XSS Writeup + Hacklido 实战博客整理 ([Medium][1])
📄 1. 实验背景(Overview)
🔹 原文核心
该实验展示了一种基础的 Web 漏洞 ------ 反射型 XSS(Reflected XSS),漏洞存在于 Web 应用的搜索功能中。 ([Medium][1])
🔹 中文翻译
在本实验中,我们分析一种经典 Web 安全漏洞:
跨站脚本攻击(XSS)
该漏洞出现在应用的"搜索功能"中:
- 用户输入内容
- 被服务器直接返回到页面
- 没有任何过滤或编码
👉 这就导致用户输入可以被当作代码执行
🧠 技术解读
这是 XSS 最典型的触发条件:
text
用户输入 → 服务端返回 → 浏览器执行
如果没有处理:
html
?q=<script>alert(1)</script>
浏览器就会执行 JS
📄 2. 漏洞原理(Vulnerability Explanation)
🔹 原文核心
Reflected XSS occurs when user input is immediately returned without validation. ([Medium][1])
🔹 中文翻译
反射型 XSS 的本质:
- 用户输入被立即返回
- 没有过滤 / 编码
- 浏览器解析为 HTML / JS
🧠 技术解读
例如:
html
<h1>Search: user_input</h1>
如果输入:
html
<script>alert(1)</script>
变成:
html
<h1>Search: <script>alert(1)</script></h1>
👉 浏览器执行 JS
📄 3. 漏洞利用步骤(Exploit Steps)
🔹 原文步骤(简化翻译)
-
打开目标 Web 应用
-
找到搜索框
-
输入恶意 payload:
html<script>alert(1)</script> -
提交搜索
-
页面执行 JS
([Medium][1])
🔥 中文逐段翻译 + 扩展
Step 1:访问目标网站
进入存在搜索功能的页面
👉 通常 URL 类似:
/search?q=test
Step 2:输入恶意代码
html
<script>alert(1)</script>
👉 这是最基础的 XSS payload
Step 3:触发漏洞
点击搜索后:
- 页面返回你的输入
- 浏览器执行 JS
🧠 技术关键点
✔ 成功条件:
- 输入被反射
- 没有 HTML 编码
- 在 HTML 上下文中执行
📄 4. Stored XSS(存储型 XSS)
🔹 原文核心
Stored XSS occurs when input is stored and later executed. ([Medium][1])
🔹 中文翻译
存储型 XSS:
- 用户输入被存储(数据库)
- 其他用户访问时触发
🧠 示例场景
评论区:
html
<script>alert(document.cookie)</script>
被存储后:
👉 所有用户访问页面都会执行
⚠️ 危害
- 窃取 cookie
- 会话劫持
- 钓鱼攻击
👉 比反射型更危险
📄 5. DOM XSS(前端型 XSS)
🔹 原文核心
DOM XSS happens in browser JavaScript (document.write / innerHTML). ([Medium][1])
🔹 中文翻译
DOM XSS:
- 不经过服务器
- 发生在前端 JS
🔥 示例漏洞代码
javascript
document.write(location.search)
如果 URL:
?q=<script>alert(1)</script>
👉 浏览器直接执行
🧠 技术本质
text
漏洞 = 不安全 DOM 操作
常见危险函数:
- innerHTML ❌
- document.write ❌
安全替代:
- textContent ✅ ([Pentest-Tools.com][2])
📄 6. XSS 类型总结
| 类型 | 特点 | 危险性 |
|---|---|---|
| Reflected | 即时返回 | ⭐⭐ |
| Stored | 存储触发 | ⭐⭐⭐⭐ |
| DOM | 前端执行 | ⭐⭐⭐ |
📄 7. 漏洞利用思路(攻击方法)
🔹 原文总结
攻击者通过构造 payload 并诱导用户点击触发攻击 ([Pentest-Tools.com][2])
🔥 常见攻击方式
1️⃣ 诱导点击(Reflected)
text
http://site.com?q=<script>steal()</script>
2️⃣ 存储 payload
html
评论区注入
3️⃣ DOM 注入
javascript
location.search → innerHTML
🎯 攻击目标
- 窃取 cookie
- 劫持 session
- 执行任意 JS
([Vulnify][3])
📄 8. 防御方法(Defense)
🔹 原文核心
Use input validation and output encoding ([Vulnify][3])
🔥 实战防御
✅ 1. 输入过滤
text
过滤 <script>
✅ 2. 输出编码
html
< → <
✅ 3. 安全 DOM API
javascript
element.textContent = input
✅ 4. CSP(内容安全策略)
限制 JS 执行来源
📄 9. 总结(Conclusion)
🧠 核心一句话
XSS 的本质是:用户输入被当作代码执行
🔥 渗透测试思路总结
text
1. 找输入点
2. 看是否回显
3. 构造 payload
4. 绕过滤
5. 提权利用