Saltar al contenido
Volver al Blog

hackthebox · 4 min de lectura

Retos HackTheBox – Web: HDC

Primer reto web de la serie HackTheBox retirados. Aprendemos a bypassar un login hardcoded en JavaScript, descubrir un área secreta con una lista de emails y usar Intruder (ZAP o Burp) para encontrar la dirección especial que revela la flag.

· Manuel López Pérez · hackthebox

Primer reto web de la serie HackTheBox retirados. Aprendemos a bypassar un login hardcoded en JavaScript, descubrir un área secreta con una lista de emails y usar Intruder (ZAP o Burp) para encontrar la dirección especial que revela la flag.

Retos HackTheBox – Web: HDCEste es el primer post resolviendo retos de HackTheBox. Vamos a intentar resolver la mayoría de los retos retirados de la plataforma y en esta ocasión toca un reto web llamado HDC. Es un reto de nivel sencillo, pero nos servirá para ir viendo cómo son los retos a los que nos enfrentaremos en los próximos días. En él tendremos que bypassear una página de login y finalmente, con ayuda del Intruder de ZAP, encontrar la flag.

Mi nick en HackTheBox es: manulqwerty. Si tenéis alguna proposición o corrección no dudéis en dejar un comentario, así aprendemos todos.

Enunciado

Creemos que cierto individuo utiliza este sitio web para asuntos turbios. ¿Puedes averiguar quién es y enviarle un correo electrónico para que lo compruebe, usando la funcionalidad del sitio web? Nota: La bandera no es una dirección de correo electrónico.

Solución

Primeramente abrimos la página web en el navegador:

A continuación revisamos el código fuente:

[...]
<script src="jquery-3.2.1.js"></script>
<script src="myscripts.js"></script>
[...]
<form id="formaki" name="formaki" action="./main/index.php" method="post">
  <p align="center">
    Enter Username / Password <input type="text" name="name1" size="20" /> <input type="text" name="name2" size="20" />
  </p>

  <p align="center">
    <input type="hidden" value="name" ="name1" /> <input type="hidden" value="name" ="name2" />

    <input type="button" value="Submit" onclick="doProcess()" />
  </p>
</form>
[...]

Se incluyen el javascript de los ficheros “myscripts.js” y “jquery-3.2.1.js”. Vamos a ver el código de “myscripts.js”:

function doProcess() {
  document.forms['formaki'].submit();
}

La función doProcess hace submit en el formulario. Vamos a buscar qué hace .submit():

The submit() method submits the form (same as clicking the Submit button).

Como veis, hace lo mismo que al clickar en el botón, busquemos si en el jQuery hay alguna función doProcess():

function doProcess() {
  var form = document.createElement('form');
  form.setAttribute('method', 'post');
  form.setAttribute('action', 'main/index.php');
  form.setAttribute('target', 'view');
  var hiddenField = document.createElement('input');
  hiddenField.setAttribute('type', 'hidden');
  hiddenField.setAttribute('name', 'name1');
  hiddenField.setAttribute('value', 'TXlMaXR0bGU');
  var hiddenField2 = document.createElement('input');
  hiddenField2.setAttribute('type', 'hidden');
  hiddenField2.setAttribute('name', 'name2');
  hiddenField2.setAttribute('value', 'cDB3bmll');
  form.appendChild(hiddenField2);
  form.appendChild(hiddenField);
  form.appendChild(hiddenField2);
  document.body.appendChild(form);
  window.open('', 'view');
  form.submit();
}

En la función hay unas credenciales: TXlMaXR0bGU:cDB3bmll con las que accedemos a la plataforma.

En este portal encontramos dos tareas: “Send EMail” y “Mailbox of Special Customers”.

En el código de la segunda encontramos algo interesante:

 </head><body><font size="6"><span lang="en-us">Special Customers' Mailbox</span></font><b><font size="6">&nbsp;&nbsp;&nbsp; </font></b>

<img src="./secret_area_/mails.webp" width="21" height="20" border="1"><hr><p> </p> <p>Up to now we have 5 special customers who will help us to achieve our goals.<br> <br> This list will soon be expanded with the new 'expansion program' for our corporate goals.<br> <br> It is planned that within the next six months we will have reached 20 dedicated Special Customers.<br> </p> <p><span lang="us"><a href="main.htm">���������</a></span></p>

La imagen mails.webp se encuentra en el directorio /secretarea, veamos si hay algo más:

En mails.txt encontramos:

All good boys are here… hehehehehehe! ---------------------------------------- Peter Punk CallMePink@newmail.com Nabuchodonosor BabyNavou@mailpost.gr Ilias Magkakos imagkakos@badmail.com Nick Pipshow NickTheGreek@mail.tr.gr Don Quixote Windmill@mail.gr Crazy Priest SeVaftise@hotmail.com Fishroe Salad fishroesalad@mail.com TaPanta Ola OlaMaziLeme@mail.gr Laertis George I8aki@mail.gr Thiseas Sparrow Pirates@mail.gr Black Dreamer SupaHacka@mail.com Callme Daddy FuckthemALL@mail.com Aggeliki Lykolouli FwsStoTounel@Traino.pourxetai Kompinadoros Yannnnis YannisWith4N@rolf.com Serafino Titamola Ombrax@mail.gr Joe Hard Soft@Butter.gr Bond James MyNameIsBond@JamesBond.com Endof Text EndOfLine@mail.com

Ahora que tenemos la lista de emails, vamos a repasar el enunciado: “¿Puedes averiguar quién es y enviarle un correo electrónico para que lo compruebe, usando la funcionalidad del sitio web?”

Parece que tenemos que utilizar la funcionalidad de “Send EMails” con las direcciones de esta lista. Con un script de Python obtenemos la lista de los mails y lo escribimos en un fichero para utilizarlo en el Intruder de ZAP:

import re
raw = """Peter Punk CallMePink@newmail.com Nabuchodonosor BabyNavou@mailpost.gr Ilias Magkakos imagkakos@badmail.com Nick Pipshow NickTheGreek@mail.tr.gr Don Quixote Windmill@mail.gr Crazy Priest SeVaftise@hotmail.com Fishroe Salad fishroesalad@mail.com TaPanta Ola OlaMaziLeme@mail.gr Laertis George I8aki@mail.gr Thiseas Sparrow Pirates@mail.gr Black Dreamer SupaHacka@mail.com Callme Daddy FuckthemALL@mail.com Aggeliki Lykolouli FwsStoTounel@Traino.pourxetai Kompinadoros Yannnnis YannisWith4N@rolf.com Serafino Titamola Ombrax@mail.gr Joe Hard Soft@Butter.gr Bond James MyNameIsBond@JamesBond.com Endof Text EndOfLine@mail.com"""
with open("mails.txt", "w") as f: f.write('\\n'.join(re.findall(r'[\\w\\.-]+@[\\w\\.-]+', raw)))

Añadimos la lista al Intruder:

Ejecutamos el ataque y ordenamos según el tamaño de la respuesta. Esto lo hacemos para detectar fácilmente si el servidor nos responde de forma distinta a algunas peticiones. Obtenemos una respuesta distinta con “fishroesalad@mail.com”:

Revisemos el output de la petición:

El flag es HTB{FuckTheB3stAndPlayWithTheRest!!}

Volver al Blog

Posts Relacionados

Ver Todos los Posts »
WriteUp – Cascade (HackTheBox)

hackthebox · 5 min

WriteUp – Cascade (HackTheBox)

Write-up de Cascade (HackTheBox): máquina Windows media que explota LDAP para enumerar usuarios y atributos ocultos, obtiene credenciales de VNC en registro, revierte binario .NET para clave AES, y recupera contraseña de admin de objetos eliminados en Active Directory Recycle Bin.

· Manuel López Pérez

WriteUp – Bounty (HackTheBox)

hackthebox · 3 min

WriteUp – Bounty (HackTheBox)

Write-up de Bounty (HackTheBox). Máquina Windows fácil que explota una vulnerabilidad en IIS permitiendo subir un web.config malicioso para ejecutar código ASP y obtener RCE. Luego escalamos privilegios con Metasploit (MS10-092).

· Manuel López Pérez

WriteUp - Canape (HackTheBox)

hackthebox · 4 min

WriteUp - Canape (HackTheBox)

Write-up de Canape (HackTheBox). Máquina Linux intermedia que explota una deserialización insegura de pickle en un sitio Flask + CouchDB. Incluye RCE vía XXE-like en pickle, enumeración de CouchDB y escalada a root abusando de sudo pip install.

· Manuel López Pérez