Resolviendo jangow01 usando solo Bash
¡Resolví jangow01 usando solo Bash!
En esta serie de posts trato de usar solo Bash y algunas herramientas externas solo si es extremadamente necesario.
Empezemos con jangow01!!! puedes descargar jangow01 desde vulnhub.com
Este post tambien tiene un resumen en video:
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/cPuF2RIrnNE?autoplay=0&controls=1&end=0&loop=0&mute=0&start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
</div>
Enumeración
Hagamos un script para encontrar hosts en línea:
|
|
Pero demora mucho, hagamos que sea más rápido usando la asincronia
|
|
El script encontró 3 ips
Aquí 192.168.56.118 es el objetivo (la máquina jangow01)
Obtieniendo puertos abiertos
Ahora que encontramos el objetivo, buscamos puertos abiertos, para esta tarea hacemos otro script usando /dev/tcp/$ip/$port
|
|
Después de ejecutar el script, este muestra los puertos abiertos en 192.168.56.118
Analizando los puertos abiertos
Usé la herramienta curl para verificar las respuestas del servidor
|
|
Genial!. pero solo necesitamos ver hrer y src para obtener enlaces
|
|
Analizando la salida, encontramos el enlace “site/”, comprobando…
|
|
Pero retorna mucho código, de nuevo buscamos las propiedades src y dst solo para obtener enlaces
|
|
La salida muestra una solicitud que podria ser interesante:
|
|
buscando alguna respuesta interesante encontramos RCE
|
|
Explotación
Para ahorrarme escribir mucho, hice un script para ayudarme con el RCE
|
|
Obteniendo más información
Verificamos si tenemos permisos de escritura
Archivo de configuración de WordPress
¿Archivos ocultos?
Si vemos el directorio “/home” obtenemos esto:
Shell inversa
Genial!! tenemos el usuario su flag y credenciales, ahora usamos una shell inversa simple
|
|
Aquí tenemos algunos problemas:
- todos los puertos salientes no funcionan
- fallan las pruebas con conexiones salientes (ping)
- herramientas como dig, nslookup también fallan
Script para probar puertos salientes (outgoing ports)
Al replicar el mismo comportamiento en un servidor ubuntu, descubrí que todos o algunos puertos están filtrados por el firewall, al verificar /var/log en la vm de Jangow01, encontré el archivo ufw.log, esto indica que ufw está activo. ahora vamos a encontrar puertos salientes abiertos (si existen) para eso uso la utilidad telnet (en este caso para puertos salientes)
|
|
192.168.56.11 es una ip fuera de linea en la misma red
timeout 5s elimina telnet si tarda más de 5 segundos en mostrar el mensaje de error, esto indica si un puerto está abierto o cerrado
¿Cómo subir este script? tenemos dos opciones:
- usando el servicio ftp y las credenciales encontradas antes (fácil)
- o vía rce (fácil también)
Prefiero usar RCE
- Convertimos testPort.sh a base64 para obtener una sola línea
|
|
- Subiendo por RCE
|
|
- El script ya esta en la maquina Jangow01, finalmente lo ejecutamos
|
|
- Comprobamos si se creó el archivo “open”
|
|
- Y obtenemos el puerto magico
|
|
Ahora abrimos una conexion en el puerto 443 con nc
|
|
¡¡¡Genial!!!. ya tenemos una shell remota
Escalada de privilegios
La flag está en el directorio “/root”, pero ¿Tenemos una shell de inicio de sesión o no? por supuesto que no, no hemos iniciado ninguna sesión
Necesitamos una shell para iniciar sesión como usuario. probando algunas técnicas solo python3 funcionó
|
|
Ahora iniciamos sesión con las credenciales “jangow01” y “abygurl69”
Obtener root
Vi que en muchos blogs para ser root en Jangow01 usan diferentes exploits para kernel pero usar estos exploits no son la mejor manera de ser root porque es posible causar fallas en el sistema y podriamos perder todo el progreso hecho hasta ahora
Para jangow01 probé algunas técnicas de escalada de privilegios pero solo encontré una vulnerabilidad SUID
|
|
Revisando en https://gtfobins.github.io/#+sudo encontré una posible opción
pkexec
Pero esto no funcionó
|
|
Encontré que pkexec tiene el cve-2021-4034, una versión vulnerable que se encuentra en este repo, después de descargar PwnKit, ya no es posible subir el archivo en la máquina de jangow01 usando base64 como antes, para esto usé nc en el puerto 443
- Primero iniciamos nc en el puerto 443 y enviamos PwnKit a través de un pipe
|
|
- En la máquina Jangow01 usando el RCE descargamos el archivo PwnKit
|
|
- Ahora ejecutamos PwnKit
Finalmente obtenemos root
Enlaces útiles
- ufw in ubuntu 20.04
- bash especial characters
- Privilege escalation in Linux
- Awesome Privilege escalation
- pkexec | gtfobins
- CVE-2021-4034
- Outgoing port tester
- port scanning whit nc
- nc listener
- Privilege escalation
- base64 encode decode
- bash/zsh sockets
- spawing tty shells
- tr lilnux command
- privesc-linux
- bash sockets