En esta habitación vamos a ir paso a paso de manera guiada por la explotación de un blog mediante inyección SQL y, a partir de ahí, comprometer el servidor con inyección de comandos.

Cookies

Las cookies HTTP son pequeñas pedazos de datos enviados por una web y guardados en la máquina del usuario por el navegador.

Su función es recordar cosas, como tu información de acceso a sitios o los que has visitado. Algunas cookies son tan intrusivas que muchos antivirus las clasifican como spyware.

Puedes ver actualizar de manera dinámica tus cookies en el navegador. Para eso, pulsa F12 o haz clic derecho y selecciona Inspeccionar. Así abres las herramientas de desarrollador del navegador.

Una vez ahí, haces clic en Application y luego en Cookies. (Si estás en Firefox, como yo, los atajos son otros y las cookies están en Storage > Cookies)

En la máquina que desplegamos, obtenemos el valor de la bandera 1 en la cookie. ¿Cuál es?

cookie_secrets

Encabezados HTTP

Los encabezados HTTP permiten a cliente y servidor pasarse información con una petición o respuesta HTTP. Los nombres de cabeceras y valores están separados por «:» y son una parte integral del protocolo HTTP:

Encabezados HTTP

Los dos métodos HTTP principales son peticiones GET y POST.

  • El método GET se usa para pedir datos de un recurso.
  • El método POST se usa para enviar datos a un servidor.

Podemos ver las peticiones hechas a y desde nuestro navegador abriendo las herramientas de desarrollo de nuevo y navegando a la pestaña Network.

Ten esta pestaña abierta y refresca la página para ver todas las peticiones, podrás ver la petición que hace tu navegador al servidor web.

Mira a los encabezados de la respuesta HTTP y obtén la bandera 2.

Para eso, en Firefox nos vamos a la pestaña Network, miramos la primera petición GET del tipo HTML, hacemos doble clic y en la nueva pantalla que sale, elegimos Headers.

Hay un valor flag2 ahí.

headers_are_important

Enumeración y FTP

Vamos a escanear la máquina con Nmap y acceder al servicio FTP usando credenciales reutilizables.

Para escanear:

nmap IP_Objetivo -v

Esto escanea los puertos abiertos y encontramos el 21 (ftp), el 22 (ssh) y el 80 (HTTP).

Ahora accedamos al servicio FTP. Si leemos la página, veremos que Rocket ha escrito un post pidiendo a Groot que cambie la contraseña, el post incluye también la contraseña antigua.

Al conectar por FTP nos preguntará usuario (groot) y contraseña (iamgroot). Deberíamos poder identificarnos con eso.

ftp IP_Objetivo

Echemos un vistazo por el FTP y consigamos la bandera 3.

8fc651a739befc58d450dc48e1f1fd2e

Gobuster

En esta fase, usamos una herramienta de descubrimiento de directorios llamada Gobuster. Este programa localizará un directorio que puedes usar para identificarte en el portal Tarvis de Mister Starks.

Gobuster es una herramienta de fuerza bruta para directorio, subdominos DNS y host names virtuales. Aquí nos centramos en directorios.

gobuster dir -u IP_Objetivo -w /usr/share/wordlists/dirb/common.txt

¿Cuál es el directorio que tiene la página de autenticación?

portal

Inyección SQL

Vamos a explotar la autenticación de esta página usando un ataque llamado inyección SQL.

Esta es una técnica que manipula la petición SQL. Puedes ejecutar tu propia SQL que puede destruir la base de datos, revelar todos esos datos o engañar al servidor para que te autentique.

Para explotar SQL, primero necesitamos saber cómo funciona. Una petición SQL puede ser:

SELECT * FROM users WHERE username = [User Input] AND password = [User Input 2]

Si insertas SQL adicional como [User Input] puedes manipular la petición. Por ejemplo, si ponemos como [User Input 2] lo siguiente:

' 1=1

Podemos autenticarnos porque el caracter «’» rompe la petición SQL y 1=1 siempre se evalúa como cierto.

Así, poniendo nombre de usuario en [User Input] y [User Input 2] siendo la condición que convierte la petición en verdadera, la petición final quedaría.

SELECT * FROM users WHERE username = `admin` AND password = `' 1=1`

Esto nos debería identificar como usuario admin, así que probamos, pero no funciona. La pista nos dice que la inyección que funciona en realidad es poner, tanto en usuario como en contraseña:

' OR 1=1 --

No sé por qué no lo han explicado bien, pero bueno.

Nos pide mirar el código fuente y contar las líneas que hay.

223

Ejecución remota de código y Linux

En la web que aparece, podemos ejecutar comandos escribiendo en el recuadro que hay para ello.

Podemos escribir lo que que queramos, como ls, unir varios comandos con «;» y listar, por ejemplo, el directorio padre con:

cd ../; ls

Eso va a mostrar un archivo llamado flag5.txt que podemos leer con:

cd ../; ls; cat flag5.txt

Lee el contenido de la bandera 5.

cat ../flag5.txt # Sorpresa, no funciona porque el comando no está permitido

Así que probamos otros comandos, a ver si los permite

less ../flag.txt

d335e2d13f36558ba1e67969a1718af7