Notas de Luis

CURL

curl es una herramienta de línea de comandos que se utiliza para realizar solicitudes de transferencia de datos a través de diversos protocolos de red. Su nombre es una abreviatura de “Client for URLs” (Cliente para URLs). La función principal de curl es transferir datos con URL:

Algunos de los protocolos que curl admite incluyen:

  • HTTP y HTTPS: Para acceder y transferir datos desde y hacia servidores web.
  • FTP: Para la transferencia de archivos a través del protocolo FTP (File Transfer Protocol).
  • SCP y SFTP: Para la transferencia segura de archivos sobre SSH.
  • LDAP: Para acceder a directorios y servicios de directorio.
  • IMAP y POP3: Para acceder a correos electrónicos a través de los protocolos IMAP (Internet Message Access Protocol) y POP3 (Post Office Protocol 3).
  • SMTP: Para enviar correos electrónicos a través del protocolo SMTP (Simple Mail Transfer Protocol).
  • DNS: Para realizar consultas DNS y obtener información sobre nombres de dominio.

Por ejemplo, este comando realizará una solicitud GET a la URL proporcionada y mostrará la respuesta en la salida estándar:

Descargar archivos con curl

Si queremos descargar un archivo con curl, utilizamos el parámetro -o de la siguiente forma por ejemplo ante un archivo de github donde tengamos visión de raw:

curl https://raw.githubusercontent.com/Maalfer/ReverseShell_Python/main/atacante.py -o atacante.py

Verificar código de estado con curl

Podemos comprobar si una petición se ha llevado correctamente o no, utilizando curl con los siguientes parámetros:

  • -s significa “modo silencioso” y se utiliza para hacer que curl no muestre mensajes de progreso ni mensajes de error durante la transferencia de datos.
  • -o se utiliza para especificar el archivo de salida donde se guardará la salida de la solicitud HTTP.
  • -w se utiliza para especificar el formato de salida que se desea mostrar después de que se haya completado la transferencia de datos. En tu comando, se utiliza -w “%{http_code}\n”, lo que significa que solo se imprimirá el código de estado HTTP seguido por un salto de línea.
curl -s -o /dev/null -w "%{http_code}\n" https://www.google.com/

Subir archivos con curl

Por ejemplo, si deseas subir un archivo llamado imagen.jpg a la URL http://ejemplo.com/subir, ejecutarías el siguiente comando:

curl -F "file=@/ruta/completa/a/imagen.jpg" http://ejemplo.com/subir

También podemos subir ficheros con curl a través del protocolo FTP de la siguiente manera:

curl -T hola.pdf ftp://192.168.0.20/home/mario/ -u mario:123123

Enviar credenciales con curl / autenticarse con curl

curl -X POST 192.63.12.3/login.php -d 'name=mario&password=123123' -v

Existen varias diferencias importantes entre las peticiones HTTP HEAD, POST y GET:

  • HEAD: La petición HTTP HEAD solicita solo los encabezados de la respuesta HTTP para una URL determinada y no el cuerpo de la respuesta. Esto se utiliza para verificar la existencia de un archivo sin descargar el archivo completo o para ver el estado de un servidor web sin descargar todo el contenido.
  • GET: La petición HTTP GET se utiliza para recuperar información de un servidor web para una URL determinada. Esta petición solicita una representación de un recurso específico y devuelve el contenido en el cuerpo de la respuesta HTTP.
  • POST: La petición HTTP POST se utiliza para enviar datos al servidor web y crear un nuevo recurso en el servidor. Esta petición envía información en el cuerpo de la solicitud HTTP y se utiliza comúnmente para enviar formularios en línea o enviar datos de usuario a un servidor web.

En resumen, la principal diferencia entre estas peticiones HTTP radica en su objetivo. La petición HEAD se utiliza para obtener información sobre la respuesta HTTP, mientras que las peticiones GET y POST se utilizan para recuperar o enviar información de y hacia un servidor web. La petición GET se utiliza para solicitar información existente, mientras que la petición POST se utiliza para enviar información y crear nuevos recursos en un servidor web.

Parámetro path-as-is de Curl

El parámetro –path-as-is evita que curl modifique la URL original y la utiliza tal como se especificó en la línea de comandos. Esto es útil cuando se necesita acceder a un recurso que tiene una URL compleja o no estándar como en el siguiente caso, donde estamos solicitando un archivo interno de la máquina:

Por ejemplo, si se desea solicitar un recurso con la URLhttp://example.com/my%20path/?query=foo&bar=baz”, pero curl modifica la URL automáticamente para que sea “http://example.com/my%2520path/%3Fquery=foo&bar=baz”, el uso del parámetro –path-as-is asegura que la solicitud se realiza con la URL original sin modificar.

computing/network/curl.txt · Última modificación: por 127.0.0.1