domingo, 7 de abril de 2019

VAGO. Una tool para hackear servidores web de forma vaga

Esta era una tool que quería crear desde hace un tiempo, ya que en algún test que suelo realizar para obtener una shell reversa a un servidor u ordenador, me lleva un tiempo y lo quería automatizar un poco. Este es el resultado.



El nombre no era causal, es por esa característica que nos va a permitir lanzar y obtener la shell reversa estando nosotros tumbados en el sofá, de ahí el nombre de "vago". Pero veamos su funcionamiento.

Imaginemos que queremos atacar a un sitio web del cual hemos descubierto alguna vulnerabilidad como que nos permita subir archivos, ya sea con el método PUT o porque sabemos la password del FTP del sitio web. Whatever.

Una vez que sabemos eso, tendríamos que enviar la shell (por comandos a ser preferible o por GUI si no tenemos forma de enviarla) reversa al sitio web. Yo, para la PoC que he planteado ha sido por comandos a un Debian 9 con un Apache 2.24.

Las opciones que tenemos para atacar el sitio son:

--victim: Especificamos la IP de la víctima
--listener: Especificamos por el puerto en el que vamos a estar a la escucha esperando la shell reversa.

Obviamente, ni decir tiene que en la shell tendremos que cambiar la IP tal y como haríamos con metasploit. Aquí lo único es que tendríamos que acceder a la shell (escrita en PHP, por cierto) y cambiar la IP. Con Metasploit esto lo hacíamos directamente con LHOST. Aquí lo hacemos manual, aunque estoy pensando en automatizarlo aún más.


Y para ejecutarlo, indicamos con --victim la IP de la víctima y con --listener el puerto por el que vamos a escuchar.

Así pues, solamente tendríamos que irnos a nuestro navegador e introducir 

http://[URL a atacar o IP]/[Ruta de la shell]


Y ya tendremos una shell a la máquina donde se aloja el servidor web. Ojo, tendríamos permisos restringidos porque estaremos bajo www-data.

Sí es cierto que podremos ver los propios directorios que haya dentro del servidor web como algún documento, pero tenemos que ser más ambiciosos. Tenemos que aspirar a más. Tratemos de escalar privilegios.

Imaginad que antes de realizar el ataque en sí, nos hemos puesto a tratar de obtener los nombres de usuarios de los trabajadores de ese servidor web. Esto es lo que se suele hacer en un proceso de auditoría, conocido como la fase de fingerprinting. Esto nos permitiría conocer si hay más usuarios dentro de ese servidor.

Ya aviso que muchas veces, se crean usuarios en un servidor con el mismo nombre que, por ejemplo, los nombres de la dirección de correo. Por ejemplo, si yo me llamo Manu Alén y la política de nombres de la empresa es poner inicial del nombre seguido de un punto y el primer apellido (podrían tener perfectamente un script que genere esos usuarios de forma automática), mi nombre de usuario sería m.alen, y para el correo de empresa sería m.alen@miempresa.com

Esto es interesante porque podríamos probar, por ejemplo, un ataque de fuerza bruta contra ese/os usuarios que tengamos y que hayamos obtenido, por decir algo, con Theharvester. Las opciones son muchas.

Supongamos que conocemos solamente un usuario con su contraseña de los, por ejemplo, 100 empleados que haya. Puede no parecer mucho, pero tampoco necesitamos mucho más si se dan ciertas circunstancias.


Antes de seguir, solamente comentar que con

python -c "import pty; pty.spawn('/bin/bash')

Obtendremos una terminal de bash, ya que para determinados comandos necesitaremos de bash en lugar de sh que es la que teníamos.

Pues bueno, sea de la forma que sea, hemos obtenido la contraseña de un usuario, en este caso del usuario del sistema denominado "dev".


Con sudo -l hacemos una pregunta al usuario que es "Oye ¿Qué comandos puedes ejecutar como sudo?". En este caso nos responde que puede ejecutar como sudo (id de root) tanto el comando find, cat y python. Y este es el punto importante, ya que no nos pedirá contraseña y podremos ejecutar esos comandos como root y eso nos permitirá pasar entre procesos a escalar privilegios por la propia configuración del sistema y llegar a ser root.


Vamos a ejecutar, por ejemplo:

sudo find /home -exec sh -i \;

Para que nos devuelva una shell, pero en este caso, como vemos, bajo root. Ya hemos, por tanto, accedido al servidor web y escalado privilegios, por lo que ya podremos hacer lo que queramos, tenemos todos los permisos. Y sólo hemos necesitado conocer una contraseña y que ese usuario pudiese ejecutar algún comando como sudo.

Si queréis conocer más sobre escalación de privilegios, podéis utilizar esta guía, seguro que os ayuda mucho.

Pero podría parecer que nuestro trabajo ha terminado aquí, y no, tendríamos que hacer alguna cosa más.





Como somos root, podríamos camuflarnos un poco borrando logs para que, cuando le toque analizar lo ocurrido al sysadmin o al auditor, no sepan exacyamente lo que ha ocurrido. Por lo que estad pendientes.

¿Hackeamos el Mundo?

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...

Entrada destacada

El server me sabe a poco.

Soy un fanático del Rock y de Debian . (Creo que voy a inventar Rockbian, que suena bien y todo xD) Llevaba tiempo queriendo unir estos 2 c...