Emdee five for life - Hack The Box

ENUMERACIÓN
- Como podemos ver este
Challengesolo es accesible a través de una instancia remota así que echemos un vistazo:

- Nos esta devolviendo una
stringy nos quiere decir que la encriptemos y se la pasemos por el cuadro de texto, lo que pasa que cuando hacemos eso nos devuelve el siguiente error:

SOLUCIÓN
- Tenemos que enviar una petición GET para leer la cadena que se nos pide cifrar a MD5.
- Encriptar dicha cadena.
- Enviar una petición POST con la solución.
- Obtener el resultado.
PASO 1: IMPORTAR LIBRERIAS
#!/usr/bin/env python3
import requests
import hashlib
import re
-
requests: Para hacer peticiones HTTP (GETyPOST) a la web. -
hashlib: Para calcular el hash MD5 de la cadena que nos da la web. -
re: Para buscar patrones en el HTML con expresiones regulares (regex).
PASO 2: CREAR UNA SESION HTTP
# URL de la web
url = "http://IP:PORT"
# Iniciar sesión HTTP
s = requests.Session()
- Crea una sesión persistente, lo que permite reutilizar cookies y optimizar conexiones HTTP.
PASO 3: HACER UNA PETICION GET
# Obtener la página
rget = s.get(url)
-
Envía una solicitud
GETa la URL para obtener el código fuente de la web. -
rget.textcontiene el HTML de la página en formato texto. -
rget.contentes lo mismo, pero en bytes (útil para manipular datos binarios).
PASO 4: EXTRAER LA CADENA
# Buscar la cadena dentro del HTML
encode_this = rget.content.split(b"<h3 align='center'>")[1].split(b'<')[0]
-
Busca el texto dentro de
<h3 align='center'>...</h3>. -
split(b"<h3 align='center'>")[1]→ Divide el HTML y toma la parte después de<h3 align='center'>. -
split(b'<')[0]→ Luego, corta el texto justo antes del siguiente<(el fin del<h3>). -
encode_thisahora contiene la cadena que debemos encriptar.
PASO 5: CALCULAR EL HASH MD5
# Generar el hash MD5
res = hashlib.md5(encode_this).hexdigest()
-
Convierte la cadena a MD5 usando
hashlib.md5(). -
.hexdigest()devuelve el hash en formato hexadecimal.
PASO 6: ENVIAR EL HASH AL SERVER
# Enviar el hash mediante POST
rpost = s.post(url, data={'hash': res})
-
Hace una petición
POSTa la misma URL. -
Envía el hash en un formulario con
data={'hash': res}. -
El servidor lo valida y responde con el resultado.
PASO 7: PRINTEO DE FLAG POR PANTALLA
# Mostrar la respuesta del servidor
match = re.search(r"<p align='center'>(HTB\{.*?\})</p>", rpost.text)
if match:
print(f"🚩 Bandera encontrada: {match.group(1)}")
else:
print("No se encontró la bandera en la respuesta del servidor.")
-
Usa una expresión regular para buscar el texto dentro de
<p align='center'>...</p>. -
HTB\{.*?\}busca cualquier texto que empiece conHTB{y termine con}. -
Si la bandera está en la respuesta,
match.group(1)contendrá el resultado.
SCRIPT
#!/usr/bin/env python3
import requests
import hashlib
import re
# URL de la web
url = "http://IP:PORT"
# Iniciar sesión HTTP
s = requests.Session()
# Obtener la página
rget = s.get(url)
# Buscar la cadena dentro del HTML
encode_this = rget.content.split(b"<h3 align='center'>")[1].split(b'<')[0]
# Generar el hash MD5
res = hashlib.md5(encode_this).hexdigest()
# Enviar el hash mediante POST
rpost = s.post(url, data={'hash': res})
# Mostrar la respuesta del servidor
match = re.search(r"<p align='center'>(HTB\{.*?\})</p>", rpost.text)
if match:
print(f"🚩 Bandera encontrada: {match.group(1)}")
else:
print("No se encontró la bandera en la respuesta del servidor.")