En el mundo del hacking web y la auditoría de aplicaciones (AppSec), hay una regla de oro que debes aprender lo antes posible: tu navegador te miente.
Cuando usas Chrome o Firefox para analizar una página web, estás viendo la versión «masticada» y bonita del servidor. El navegador renderiza el HTML, ejecuta el JavaScript de forma silenciosa, oculta cabeceras HTTP vitales, sigue redirecciones sin preguntarte y gestiona las cookies por detrás.
Para un usuario normal, esto es genial. Para un pentester o un sysadmin intentando diagnosticar un problema de seguridad, es una pesadilla. Necesitas ver la verdad cruda. Necesitas hablar el idioma nativo de la web (HTTP) sin intermediarios que te oculten datos. Y para eso, existe curl (Client URL).
Si tu uso de curl se limita a copiar y pegar comandos de GitHub para instalar software (el famoso y peligroso curl | bash), te estás perdiendo una de las herramientas más potentes para auditar servidores y manipular la lógica de una aplicación. Vamos a ensuciarnos las manos.
Índice de contenidos
Por qué necesitas curl (y por qué el navegador no basta)
curl es un cliente de línea de comandos diseñado para transferir datos a través de múltiples protocolos, siendo HTTP y HTTPS los reyes indiscutibles.
Su mayor ventaja en ciberseguridad es su transparencia absoluta. Con curl, tú construyes la petición HTTP bloque a bloque. Tú decides qué cabeceras enviar, qué método usar (GET, POST, PUT, DELETE) y cómo gestionar la respuesta. Si un servidor devuelve un error oculto en una cabecera HTTP o si un WAF (Web Application Firewall) está filtrando tu tráfico, curl te lo mostrará en texto plano.
Veamos cómo se usa en el mundo real durante una auditoría web. Lo básico.
Casos de uso de curl en Hacking Web y Desarrollo
Las banderas (flags) de curl son docenas, pero en ciberseguridad aplicamos la regla del 80/20. Conociendo estas cinco o seis, resolverás casi cualquier escenario.
Inspección táctica: Viendo las cabeceras sin descargar «la basura» (-I y -v)
Durante la fase de reconocimiento y mapeo de un servidor, necesitas hacer fingerprinting (saber qué software corre por debajo) sin hacer ruido ni descargar la página principal entera.
Para eso usamos la bandera -I (o --head). Esto envía una petición HEAD, que le dice al servidor: «Envíame solo las cabeceras de respuesta, no me envíes el código HTML ni las imágenes».
curl -I https://cybernotes.euBashEn la salida buscarás cabeceras delatoras como Server: Apache/2.4.41 (Ubuntu) o X-Powered-By: PHP/7.4, lo que te da las versiones exactas para buscar vulnerabilidades (CVEs) conocidas.
Si necesitas aún más detalle para ver qué le estás enviando tú al servidor, usa el modo verboso (-v). Te mostrará el handshake SSL completo, las cabeceras que envías (precedidas por >) y las que recibes (precedidas por <).
Manipulación de identidad: Cambiando el User-Agent (-A)
Muchos servidores web y firewalls básicos filtran el tráfico basándose en el User-Agent (la cabecera que identifica qué navegador estás usando). A veces, una web te bloquea por usar la terminal, o peor aún, tiene rutas y APIs ocultas que solo funcionan si detectan que eres una aplicación móvil.
Con -A puedes disfrazarte de lo que quieras:
# Disfrazarse del bot de Google para ver si hay contenido oculto para SEO
curl -A "Googlebot/2.1 (+http://www.google.com/bot.html)" https://dominio.com/ruta-secreta
# Disfrazarse de un iPhone para forzar la carga de la API móvil
curl -A "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X)" https://dominio.comBashTesteando APIs y rompiendo la lógica (Verbos HTTP y JSON)
Aquí es donde curl brilla con fuerza. Cuando auditas una API REST (muy común en aplicaciones web modernas y Single Page Applications), necesitas cambiar la petición de un simple GET a algo más destructivo, como un POST, PUT o DELETE.
Para forzar el método HTTP usamos la bandera -X. Para enviar datos (el payload), usamos -d. Para decirle al servidor que le estamos enviando JSON (y no un formulario estándar), inyectamos una cabecera personalizada con -H.
Imagina que descubres un endpoint de usuarios y quieres probar si es vulnerable a una creación de cuenta no autorizada:
curl -X POST https://api.dominio.com/v1/users \
-H "Content-Type: application/json" \
-H "Authorization: Bearer TU_TOKEN_AQUI" \
-d '{"username": "admin_test", "role": "admin"}'BashEsta es la forma más pura de probar vulnerabilidades de lógica de negocio (como asignación masiva de parámetros o Mass Assignment) sin necesidad de abrir un entorno pesado como Postman.
Saltándose los semáforos en rojo (Evasión y control)
En auditorías internas (Red Team o asumiendo brecha), te encontrarás a menudo con servidores de preproducción o máquinas internas que tienen el certificado SSL caducado, autofirmado, o que apuntan a un dominio distinto.
Ignorar alertas de certificados SSL (-k)
Por defecto, si curl detecta un certificado SSL inválido, abortará la conexión para protegerte de un ataque Man-in-the-Middle. En pentesting, esto es un estorbo. Usa la bandera -k (o --insecure) para decirle: «Sé que el certificado es falso, conéctate de todos modos».
curl -k https://10.0.0.54/adminBashSeguir la madriguera del conejo (-L)
Si le haces curl a una URL y el servidor te responde con un código de redirección (301 o 302), curl se detendrá ahí y te mostrará el aviso de que el recurso se ha movido. Si quieres que se comporte como un navegador y siga automáticamente todas las redirecciones hasta llegar al destino final, añade la bandera -L (Location).
curl -I -L http://dominio.comBashEl puente hacia las ligas mayores: curl + Burp Suite
Este es el truco más importante de este artículo.
Hay momentos en los que descubres una petición rarísima o muy compleja inspeccionando el tráfico (por ejemplo, una llamada a la API que hace una app móvil o un script de tu empresa). Quieres llevarte esa petición a Burp Suite para usar el Repeater o el Intruder e intentar hackearla cómodamente de forma visual, pero te da pereza reconstruir a mano todas las cabeceras, tokens y cookies en Burp.
La solución es usar la bandera -x (minúscula) para indicarle a curl que envíe su tráfico a través de un proxy local (por defecto, Burp Suite escucha en el puerto 8080).
curl -x http://127.0.0.1:8080 -k -X GET https://api.compleja.com/datos \
-H "Authorization: Bearer XXXXXX" \
-H "Custom-App-Header: 12345"BashAl lanzar este comando, la petición no irá directa a Internet. Entrará de cabeza en la pestaña de Proxy > HTTP History de tu Burp Suite. Desde ahí, clic derecho, «Send to Repeater», y ya tienes la petición capturada perfectamente para empezar la fase de explotación manual.
La «Cheat Sheet»: Los comandos curl que debes memorizar
Añade estas líneas a tus notas y te ahorrarán horas de trabajo:
#Ver solo cabeceras (Fingerprinting)
curl -I https://dominio.com
#Ignorar SSL y seguir redirecciones
curl -k -L https://dominio.com
#Descargar un archivo manteniendo su nombre original
curl -O https://dominio.com/backup.zip
#Inyectar la cabecera Host (Útil para bypassear Cloudflare y testear IPs ocultas)
curl -H "Host: www.dominio.com" https://IP_REAL
#Enviar la salida a Burp Suite
curl -x http://127.0.0.1:8080 [RESTO_DEL_COMANDO_VISTO_ARRIBA]BashConclusión
El comando curl es el bisturí de las comunicaciones web. Mientras que los navegadores están diseñados para proteger al usuario y ocultarle la complejidad técnica de Internet, curl hace exactamente lo que le ordenas, ni más ni menos.
Aprender a manipular verbos HTTP, inyectar cabeceras y dominar las opciones de redirección y proxying desde la línea de comandos te da un nivel de control sobre la aplicación web que separa a un usuario avanzado de un verdadero auditor de ciberseguridad.
Cierra el navegador por un rato, abre la terminal y empieza a preguntar a los servidores qué es lo que realmente están ejecutando bajo el capó.
