Blog técnico Entelgy Innotec Security
images/banners/security-garage-banner-04_300.png

Página por defecto Apache

Después de unas breves pruebas nos encontramos con el directorio /flag donde sale un simple mensaje (You really thought it would be that easy? Keep digging!).

Directorio flag

Volviendo al [enunciado] (https://www.hackerone.com/blog/hack-your-way-to-nyc-this-december-for-h1-212) nos damos cuenta que se se hace referencia a un panel de administración para la organizacion de “acme.org”:

Pista sobre panel de admin

Con lo cual intuimos que el servidor puede presentar varios virtual hosts, por lo que se realizan varias pruebas en la cabecera hasta dar con el host correcto.

host: admin.acme.org

Buscando el host correcto

Al realizar la petición nos percatamos que en la respuesta se fija el valor de una cookie (admin=no). Nuestro instinto más primario nos llevar a cambiar ese valor a “yes”.

Cambio de cookie admin

Tampoco iba a ser tan fácil y seguimos poco a poco con las pruebas. En este punto apreciamos que no acepta el método GET ya que nos da un error 405 por lo que lo cambiamos por el otro método “POST”.

Cambio método POST

Ahora obtenemos el error 406. Después de “fuzzear” durante un rato ficheros encontramos read.php que nos devuelve en la respuesta un error diferente. Hemos avanzamos hasta el error 418, junto a lo que parece ser una respuesta a una consulta de JSON.

Respuesta JSON

A partir del error que ha devuelto el servidor, formamos una petición JSON con el valor que espera ”row”. Ahora nos pide el valor “domain”.

Respuesta JSON, domain required

Volvemos a formar la petición JSON con el valor domain y vemos que nos faltan valores que vamos añadiendo.

Respuesta JSON, falta valor .com

Llegamos a formar la peticion 212.dominio.com que nos devuelve el siguiente directorio:

Respuesta JSON, campo data vacío

Vemos que nos devuelve un campo data vacío, y a cada petición que hacemos con un nuevo dominio nos crea un id nuevo id=0,id=1,id=2…

Respuesta JSON, nuevo id

Si en el dominio ponemos un dominio válido vemos que nos resuelve el contenido del mismo en base64, para hacer la prueba usamos el dominio borjmz.com que apunta a 127.0.0.1:

Petición borjmz.comRespuesta página inicio

Nos devuelve la página de inicio de Apache con lo cual imaginamos que podríamos estar ante un SSRF. Nos disponemos a escanear y encontramos un servidor nginx en el puerto 1337:

Posible SSRFServidor nginx en puerto 1337

Decodificamos la cadena base64 y nos encontramos con la siguiente frase:

  • Hmm, where would it be?
Mensaje decodificado

Parece que vamos por buen camino….

Nos da a entender que puede estar en el archivo /flag pero no podemos leer el directorio ya que tenemos el problema que la petición incluye un .com, con lo cual al realizar la petición queda de la siguiente manera 212.borjmz.com:1337/flag.com (127.0.0.1:1337/flag.com) con lo cual necesitamos realizar un bypass de la cadena “.com”.

Probamos con varios caracteres pero están prohibidos:

Pruebas bypass del .com

Se hacen varias pruebas para lograr el bypass:

Prueba con netcatPrueba con salto de línea

Finalmente se ha conseguido hacer el bypass con las siguiente petición:

[{"domain" :
"212.borjmz.com/flag\\nFake:.com"}]{style="background: #f9f2f4"}

Nos llega la respuesta correctamente en base64 y al descifrar obtenemos la flag.

Flag decodificada
{"data":"RkxBRzogQ0YsMmRzVlwvXWZSQVlRLlRERXBgdyJNKCVtVTtwOSs5RkR7WjQ4WCpKdHR7JXZTKCRnN1xTKTpmJT1QW1lAbmthPTx0cWhuRjxhcT1LNTpCQ0BTYip7WyV6IitAeVBiL25mRm5hPGUkaHZ7cDhyMlt2TU1GNTJ5OnovRGg7ezYK"}

FLAG:

CF,2dsV\\/\]fRAYQ.TDEp\`w"M(%mU;p9+9FD{Z48X\*Jtt\{\%vS(\$g7\\S):f%=P\[Y@nka=<tqhnF<aq=K5:BC@Sb\*{\[%z"+@yPb/nfFna<e\$hv{p8r2\[vMMF52y:z/Dh;{6

Gracias por el reto!

Compartir

S5 Box

Este sitio web utiliza cookies propias y de terceros para el correcto funcionamiento y visualización del sitio web por parte del usuario, así como la recogida de estadísticas. Si continúa navegando, consideramos que acepta su uso. Puede cambiar la configuración u obtener más información consultando nuestra Política de Cookies.