🎯 一、反射型 XSS 的目的
反射型 XSS 是指攻击者将恶意 JavaScript 代码嵌入到 URL 参数中,当用户点击该链接并访问页面时,恶意脚本被浏览器执行,从而实现以下攻击目标:
✅ 1. 窃取敏感信息
- 如:Cookie、Session ID、Token 等
- 用于模拟用户登录,实现账户接管
✅ 2. 恶意跳转
诱导用户点击链接跳转到钓鱼页面
比如伪装成登录页面窃取账号密码
✅ 3. 执行任意操作
利用当前用户身份发起操作(CSRF + XSS 联合)
比如:更改密码、发送请求、删除数据
✅ 4. 浏览器端数据篡改
动态篡改页面显示内容,诱导用户操作
伪造按钮、表单、输入框等 UI 元素
🔐 二、为何叫“反射型”?
- 因为恶意脚本不是存储在服务器上,而是临时“反射”在响应页面中
- 脚本来自 URL 参数,服务端直接原样返回
- 一旦页面刷新或用户跳转,攻击就失效(非持久)
📍三、DVWA测试
1.拉取 DVWA 镜像并运行:docker run --rm -it -p 8080:80 vulnerables/web-dvwa
打开浏览器访问:
http://localhost:8080
2.默认登录账号:
- 用户名:admin
- 密码:password
3.设置数据库(第一次登录会提示):
点击左侧的 “DVWA Setup”(或顶部菜单),然后点击页面中的 “Create / Reset Database” 按钮。
4.点击左侧的 “XSS (Reflected)” 功能。
你会看到一个简单的表单,只有一个输入框,提示类似:
What’s your name?
🧪 Step 1:输入测试 Payload
在输入框里输入:
<script>alert('XSS')</script>
然后点击 Submit。
✅ 预期效果:
页面会刷新,同时浏览器会弹出一个提示框,显示内容为 XSS。
🔁 Step 2:确认漏洞是“反射型”
反射型 XSS 的特征是——你注入的脚本被立即反射回页面,例如你访问:
http://localhost:8080/vulnerabilities/xss_r/?name=<script>alert('XSS')</script>
你会发现你的输入直接出现在页面上,说明页面未做过滤/编码处理。
💡 Step 3:尝试其他 Payload
有些浏览器或安全等级会拦截
图片 onerror:
<img src=x onerror=alert('XSS')>
SVG onload:
<svg/onload=alert('XSS')>
JS URL 方案(有时配合链接):
<a href="javascript:alert('XSS')">Click me</a>