Spartan Exploit Kit分析
之前都是调试flash的漏洞,相关的样本接触较少,碰巧看到一篇不错的分析,尝试了一下,留个记录。
调试flasher样本一般建议使用调试版的flash player,在调试版本下可以输出swf文件运行时的相关日志,便于进行相关的分析,安装之后会在家目录(C:\User\<your name>mm.cfg)生成该文件(早期的flash调试版本不会生成该文件,需要手动生成)。

文件中包含以下配置选项,手动生成的话红色框中的选项为必选项,用于告诉flash生成错误日志及trace日志(对应的日志文件保存在C:\Users\<your name>\AppData\Roaming\Macromedia\Flash Player\Logs目录下)。

该样本在运行之后含有多层解密(以下以此分析)。
Sample1
通过JPEXS反编译之后,该样本只有两个主要的类
- Base64 传统的base64算法
- MainTimeline 样本的功能类
MainTimeline的入口函数frame1中首先对组合出第一个请求地址,当请求结束,调用TteNDbdn函数。

通过trace可以获取该请求的地址

请求之后会报错,因为该cc已经失效,好处是该样本通信的过程记录在fiddler的包中,我们将这次请求的页面保存到本地,在fiddler中设置对这两个地址的自动回复,回复的文件使用本地保存好的两个页面。
http://zaleimneviskivgorlo.website/crossdomain.xml
http://zaleimneviskivgorlo.website/XVsiAHhqXHV1TT8nPEB_Tgc.xml

此时再运行该样本,trace记录如下,输出的地址如下:

现在回到样本的分析,对应请求完成后启用函数TteNDbdn,该函数会解析其中返回的xml文件,获取两个参数,并完成解密,之后解密的内容通过addChlid函数加载起来,这个地方很容易就明白该解密的内容应该就是接下来的运行样本。

该xml及对应的两个变量如下:

这个地方可能会想到通过trace的方式直接打印出该解密内容,通过上面给出的代码是不行的,因为此处的_loc4_并不是一个普通的变量或常量,其类型为一个对象。

为了获取第二层的样本,可以通过python脚本手动解密该xml文件中包含的sample2,这个地方注意读取的时候不要使用python中的ET.ElmentTree的方式去读取,至少我在通过该方式读取的数值解密之后,JPEXS无法反编译。

可以使用以下代码:

解密之后为标准的swf文件格式。

Sample2
反编译之后的主方法如下所示:其中比较重要的有yYJREHXgUy,和TPbsJhbquQh

首先是函数yYJREHXgUy,运行之后实际上是将字符串”G5GH……..”直接附加到exec之后,并以LoaderContext的类型返回,这时很容易想到该返回的结果有可能是作为一个参数。

然后是函数TPbsJhbquQh,该函数会调用dMbRyCRIPq进行实际的解密,这个地方的param1,_loc3_值得关注。

通过trace直接获取这两个参数的数值。

对应的值如下,可以看到这两个参数分别为一个长的加密序列content,和一个秘钥key:4d07059cb79e3545dcf7f0cf5bc33baa。


可以发现加密序列content实际就是sample2中的二进制数据文件。

使用之前的脚本即可解密出sample3。
Sample3
通过JPEXS对该样本进行反编译,如下图所示,可以看到相比于前两个样本该样本中有多个类。

加载运行该swf文件,程序报错,错误出现在class_7中。

直接查看class_7,其代码会检测exec之后的参数是否为空,而之前直接加载sample3并不是通过样本直接运行的,所以没有传送参数,因此报错。

此时直接修改函数,把相关的校验部分去掉之后,替换成右侧的代码,可以看到最后会调用到class_1.init()函数

函数class_1.init中首先会检测当前版本是否小于19.207,只有小于该版本才往后执行,函数之后值得关注的有asfsgrggvxyb,_loc_4,及extLoaded函数

从以上的代码可以得知,_loc4_应该是一个json文件,如下图所示通过trace函数直接获取该参数。

不出所料,此处为一个json文件,在json中的vari42即为对应漏洞利用代码(此处为了便于显示将vari42的值简略了)

之后解析好的json内容会被赋值给变量§_-q§,然后获取其中的vari42域,即json中的加密字符串,作为class_11.method72的参数,实际上,该函数只是简单的base64解码操作,同样通过trace获取该解密的结果。

运行样本,可以看到输出的结果如下,一个标准的swf文件,这个就是漏洞利用的swf文件了。

由于之前已经获取了对应的json文件,这里直接通过pyton脚本做一下处理就能获取对应的漏洞利用代码。

如下图所示,CVE-2015-7645漏洞的利用代码,该漏洞为一个writeExternal对象的类型混淆漏洞。

回到之前的init函数,漏洞利用函数解密加载之后,会调用exloaded函数,如下图所示:

此时该类下的EXP_try通过JPEXS反编译的效果并不好,可以尝试换AS3 Sorcerer(as3有多个反编译工具,可以交替使用,JPEXS的好处在于打trace很方便)。

进入class_4.EXP_try函数,在该函数中会调用到Load函数。

在load中完成shellcode的解码,最后通过_safe_Str_10类的函数exec执行shellcode,此处的shellcode除了解密出来的部分外还包括asfsgrggvxvb中返回的数值(该值来之于sample2中作为sample3的启动参数)。

进入exec函数可以看到flash中经典的获取virtualprotect函数地址,分配可以执行内存,并执行shellcode的操作。

在以下两图中通过修改jit字节码,将对应的shellcode替换成一系列的CC中断指令。


运行之后可以看到,flash player在windgb中确实中断下来了。

编写loader
此时可以通过修改sample3的部分代码,实现仅仅通过一个html页面加载该样本的功能,这个地方主要需要注意的是shellcode的问题,通过上面的分析可以发现,最终sample3漏洞触发之后使用到的shellcode来自两部分。
- 来自sample2启动sample3时传入的参数exec
- load中硬编码的shellcode2
传入的exec参数会在asfsgrggvavb中进行处理,通过分析我们知道该函数仅仅是将传入的数值附加到”exec”之后,该功能可以在html页面中直接实现,因此通过修改字节码直接将该函数的功能去掉,以方便在html中增加我们的shellcode接口。


我们的shellcode通过html传入,因此直接把sample3中load中硬编码的shellcode2删除。


通过一个html加载运行。

之后点击之后直接运行。

总流程
整个kit的运行过程如下所示:

参考
http://vulnerablespace.blogspot.co.uk/2016/04/malware-analysing-and-repurposing.html
Spartan Exploit Kit分析的更多相关文章
- Exploit Kit——hacker入侵web,某iframe中将加载RIG EK登录页面,最终下载并执行Monero矿工
RIG Exploit Kit使用PROPagate注入技术传播Monero Miner from:https://www.4hou.com/technology/12310.html 导语:Fire ...
- 使用NB Exploit Kit攻击的APT样本分析——直接看流程图,就是网页挂马,利用java和flash等漏洞来在你主机安装和运行恶意软件
使用NB Exploit Kit攻击的APT样本分析 from:https://cloud.tencent.com/developer/article/1092136 1.起因 近期,安恒工程师在某网 ...
- RIG exploit kit:恶意活动分析报告——像大多数exploit kit一样,RIG会用被黑的网站和恶意广告进行流量分发
RIG exploit kit:恶意活动分析报告 from:https://www.freebuf.com/articles/web/110835.html 在过去的几周里,我们曾撰文讨论过Neutr ...
- MS Office CVE-2015-1641 恶意 Exploit 样本分析
MS Office CVE-2015-1641 恶意 Exploit 样本分析 在对最近的一个恶意 MS Office 文档样本进行分析时,我们发现了一些有趣的特性.这个文档利用 CVE-2015-1 ...
- vmware漏洞之三——Vmware虚拟机逃逸漏洞(CVE-2017-4901)Exploit代码分析与利用
本文简单分析了代码的结构.有助于理解. 转:http://www.freebuf.com/news/141442.html 0×01 事件分析 2017年7月19 unamer在其github上发布了 ...
- miniSpartan6, another Spartan 6 Kit
http://thehardwarer.com/2013/05/minispartan-6-another-spartan-6-kit/ miniSpartan6 is an Opens Source ...
- 新型勒索软件Magniber正瞄准韩国、亚太地区开展攻击
近期,有国外研究人员发现了一种新型的勒索软件,并将其命名为Magniber,值得注意的是,这款勒索软只针对韩国及亚太地区的用户开展攻击.该勒索软件是基于Magnitude exploit kit(简称 ...
- IE安全系列之——RES Protocol
IE安全系列之--RES Protocol res Protocol用于从一个文件里面提取指定资源.语法为:res://sFile[/sType]/sID 各Token含义: sfile:百分号编码. ...
- Hacking Tools
Hacking Tools 种各样的黑客工具浩如天上繁星,这也让许多刚刚入门安全技术圈的童鞋感到眼花缭乱,本文整理了常用的安全技术工具,希望能够给你带来帮助.以下大部分工具可以在 GitHub 或 S ...
随机推荐
- sql server 字符串转成日期格式
在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...
- [转]socket 通俗解释
socket是网络编程的基础,本文用打电话来类比socket通信中建立TCP连接的过程. socket函数,表示你买了或者借了一部手机. bind函数,告诉别人你的手机号码,让他们给你打电 ...
- 耿丹CS16-2班第三次作业汇总
-- Deadline: 2016-10-12 22:48 -- 作业内容: 1.实验2-6 猜数字游戏 2.实验2-7 判断能否为三角形 3.实验2-8 个人所得税计算器 -- 第三次作业总结: 1 ...
- Android Duplicate files copied in APK
今天调试 Android 应用遇到这么个问题: Duplicate files copied in APK META-INF/DEPENDENCIES File 1: httpmime-4.3.2.j ...
- python基础七
subprocess subprocess是专门用来替代os.system;os.spawn更加的先进. 但是subprocess.run()是在python3.5之后才出现的 实例 >> ...
- sql查询删除重复数据
数据库UserInfo 删除重复数据 即删除重复的用户名手机号 同一个用户名手机号只保留一个用户 01.根据多个字段查询重复数据 with data1 as( select MobilePhone,N ...
- [正则表达式]PCRE环视功能
设想一下这个问题,假设为了方便长串数字的阅读性,需要为其添加逗号作为分隔,需要怎么做呢? 2569836495 => 2,569,836,495 正则表达式的匹配通常是从左往右的,这导致无法使用 ...
- 备份了我的CSDN博客
刚用cnblogs的“博客搬家”功能把我此前在csdn发的所有文章都备份过来了. 发现cnblogs的博客备份功能比较好的一点是——文章的发表时间和原来的一致! 上次在CSDN发博客的时间是2015- ...
- js_面向对象
面向对象的语言有一个标志,即拥有类的概念,抽象实例对象的公共属性与方法,基于类可以创建任意多个实例对象,一般具有封装.继承.多态的特性!但JS中对象与纯面向对象语言中的对象是不同的,ECMA标准定义J ...
- linux commands
abrt-cli --since ;查看abrt捕捉的异常 alias ;别名,alias rm='rm -i':使用“ \rm ” 使用原命令 alsamixer ;图形音量调节,q 增加左声道, ...