XSS小游戏通关秘籍:从Level14的EXIF注入到Level19的Flash XSS实战解析

XSS小游戏通关秘籍:从Level14的EXIF注入到Level19的Flash XSS实战解析 1. Level14通关秘籍图片EXIF注入实战第一次遇到Level14这个关卡时我盯着上传按钮看了半天——这明明是个图片上传功能怎么和XSS扯上关系直到发现页面底部会显示图片的EXIF元数据才恍然大悟这是个隐藏的注入点。1.1 EXIF数据注入原理每张JPEG图片都像个小档案袋里面除了图像数据还藏着拍摄设备、时间、GPS位置等元数据这就是EXIF信息。关键点在于这些文本字段没有经过任何过滤就直接显示在网页上我用手机随手拍了张测试照片用exiftool查看原始数据exiftool test.jpg输出中的这些字段都可以修改Artist : 摄影师名字 Copyright : 版权信息 ImageDescription: 图片描述1.2 构造恶意图片实操先在Linux终端安装工具sudo apt-get install libimage-exiftool-perl然后分三步制作武器准备基础图片我用的是1x1像素的透明gif注入JS代码到描述字段exiftool -ImageDescriptionimg srcx onerroralert(document.domain) innocent.jpg上传图片后当页面读取EXIF时我们的代码就会被执行避坑指南PHP环境需要启用php_exif扩展测试时发现GD库会清除EXIF建议用原生PHP函数处理某些CMS会自动转义引号可以尝试Unicode编码绕过2. Level19深度破解Flash XSS的降维打击这个关卡让我重温了Flash技术史——虽然2020年后Flash已退役但理解其漏洞对学习安全原理仍有价值。关卡中的swf文件使用了sIFR技术这是一种用Flash渲染文本的古老方案。2.1 反编译实战步骤首先用FFDec反编译swf文件下载FFDec工具GitHub开源拖入xsf03.swf文件在ActionScript中搜索关键字符串VERSION_WARNING找到关键代码片段getURL(_loc4_, _self); // 漏洞点这个getURL函数会直接执行我们控制的链接地址。2.2 构造Flash XSS的三大要点版本欺骗修改arg01versionarg02436保持版本校验通过链接注入通过arg02参数注入JS代码arg02a hrefjavascript:alert(document.cookie)点击/a事件触发有些浏览器需要用户交互可以结合onclick事件a href# onclickevilJS.../a现代替代方案虽然Flash已死但类似漏洞可能存在于PDF文件中的JS执行SVG向量图形中的脚本WebAssembly模块交互3. 高级技巧从漏洞利用到防御思维在反复测试这两个关卡时我总结出几个通用法则3.1 输入点的三维探测法显式输入表单字段、URL参数隐式输入文件元数据、HTTP头信息衍生输入反序列化数据、模板渲染比如Level14就属于典型的隐式输入漏洞开发人员容易忽略非核心数据字段的过滤。3.2 防御方案对比攻击类型错误做法正确方案EXIF注入仅过滤图片内容使用exif_imagetype()验证文件头Flash XSS简单黑名单过滤内容安全策略(CSP)限制4. 工具链推荐这些年我积攒的私藏工具包EXIF处理ExifTool Python的Pillow库Flash分析FFDec JPEXS Free Flash Decompiler流量拦截Burp Suite的Decoder模块做Payload变形举个实际用例——用Python自动化检测EXIF漏洞from PIL import Image img Image.open(test.jpg) if exif in img.info: print(存在EXIF元数据风险)5. 从靶场到实战的思考在真实渗透测试中遇到类似Level19的Flash漏洞时我会优先检查目标用户群中Flash Player的安装率是否有非Web的攻击途径如诱骗打开本地swf文件能否将漏洞转化为存储型XSS有个有趣的案例某次在测试中发现虽然前端过滤了恶意标签但后台的图片处理服务却保留了EXIF数据最终通过CDN缓存投递实现了持久化攻击。