PDA

Ver la versión completa : Ayuda con practica de clase?bruteforce en php



pepin
14-12-2011, 19:40
Hola,
estudio php es mi primer curso, y el profe nos a planteado un "reto".
Tenemos que programar en php un script para atacar por fuerza bruta una pagina que él a puesto en el instituto para tal fin. El pass se añade a la direccion http añadiendo al final de la direccion ?pass=xxxx donde x es cada letra del pass. Por "ingenieria social" he averiguado que tiene 3 letras, ya que según a dicho él mismo, el año pasado tenia 4 y tardaba bastante.....

He encontrado un script que me genera conmbinaciones de letras (como es una practica no necesito numeros ni simbolos) aunque no se adapta bien tampoco a mis necesidades ya que el profe quiere que sea de longuitud n siendo n la longitud del pass a encontrar, y yo lo tengo porque defino en una variable general el pass... en fin estoy perdido...
El tema es que es un reto para hacer antes de navidad como fin de trimestre, y es algo que aun no hemos visto, para que vayamos investigando.
como hago para que en vez de un echo o un print, se cargue el resultado de la variable en la barra de direcciones y pruebe cada combinacion?
Alguien me echa una mano porfa? un rayito de luz??
Estaria tremendamente agradecido.

chewarrior
14-12-2011, 20:44
2 opciones:

1- Programas en sockets de red y creas tu propia peticion http.

2- Utilizas una libreria externas (CURL) para la peticion http, esta opcion es menos compleja, lo cual no se si te dejara tu profesor xd.

Que tienes que aprender:

1- php

2- Como maneja el protocolo http sus tipos de peticiones, todos sus campos....

3- Si no puedes utilizar librerias externas, tendras que aprender a programar sockets de red en PHP.

hystd
14-12-2011, 21:44
No podría haberlo explicado mejor que chewarrior!

Añadir simplemente una opción más... puedes hacer GET en un formulario html, donde dicho formulario apunta a la página php de tu profesor. Más simple imposible.

Un saludo.

hckr
14-12-2011, 22:10
Brutus AET2 creo que implementa fuerza bruta por GET ^^ De todas formas Chewarrior lo ha dejado bien claro jeje

hystd
14-12-2011, 23:38
Programas para hacer peticiones, hay miles, la cuestión es que, por fines didácticos supongo, se tiene que picar un script en php.

Un saludo.

pepin
15-12-2011, 00:21
gracias por las rapidas respuestas!!
conozco algun que otro programa pero si, por fines didacticos el profe quiere que lo hagamos picando..., y creo que va enfocado como dice hystd
con un get apuntando a la pagina.
Voy a ver si lo saco a partir de esto y si tengo algun problema ya os digo... que seguramente me atranque...
Gracias!:)

pepin
15-12-2011, 21:55
Seria posible hacer algo asi para que empiece en la a por ejemplo y acabe en n siendo n la longitud de la clave a descifrar. que empiece con las de 1 caracter, luego 2, 3, hasta n,.....a, aa, aaa y asi...hasta que de con la correcta. Os dejo el codigo que tengo que es para 3 caracteres, porque sé que tiene 3, pero deberia ser n.
pongo mal la direccion a proposito porque no me deja postear links.
Gracias.!!

<?php
set_time_limit(0);
$i=0;
include('parse.php');
$list1= range('a','z');
$list2 = range('A','Z');
$list3 = range ('1','9');
$list=array_merge($list2,$list1,$list3);

foreach($list as $i2)
{foreach($list as $i3)
{foreach($list as $i4)
{
$i++;
$clave=$i2.$i3.$i4;
echo "$clave <br>";
echo "http/ieslosmanantialescom/clave/?pass=$clave <br>";
$html = file_get_html('http/ieslosmanantialescom/clave/?pass='.$clave);
foreach($html->find('h1') as $element){
$texto = $element->innertext;}
$h=explode(" ",$texto);
if($i%1000==0)
sleep(30);

If($h[1]=='No')
{}
else
{
echo "eureca!!! La clave es: $clave";
die;
}
}
}
}
?>

hystd
16-12-2011, 00:45
Por favor, la próxima vez, utiliza las etiquetas [ CODE] [ /CODE].

Lo que buscas es hacer variaciones con repetición de M elementos tomados de N en N, donde N varía de K a L, siendo K y L las longitudes mínimas y máximas respectivamente de la clave que quieres generar. Según tu primer post, K valdría 1.

Esto se puede hacer de muchas maneras, pero lo básico es saber que puedes utilizar tanto iteración como recursión.

Te pondré una solución bastante sencilla y fácil de entender:



function variacionesKL($lista, $ini, $fin){
//calcula las variaciones de longitud $ini hasta $fin
$cont = $ini;
while($cont <= $fin){
variaciones($lista, $cont);
$cont++;
}
}


y ahora sólo queda implementar el código de la función variaciones...



function variaciones($lista, $longitud){
//Calcula las variaciones de longitud $longitud
$i = 0; //Cuidadin con los desbordamientos
$numVariaciones = pow(count($lista), $longitud) - 1; //Cuidadin con los desbordamientos
$numElementos = count($lista);
while ($i <= $numVariaciones){
$clave = "";
$cont = $longitud - 1;
while ($cont >= 0){
$aux = $lista[(($i / (pow($numElementos, $cont))) % $numElementos) + 1];
$clave .= $aux;
$cont--;
}
// Aqui tratas $clave, enviandola por GET en tu caso al sitio en cuestión.
$i++;
}
}


De esta forma, observa cómo sustituyes elegantemente los bucles anidados por unas bonitas divisiones y módulos. (ver linea en negrita)

Con esta solución sólo tendrás que llamar a variacionesKL(...) pasándole el array o cadena con los elementos y las longitudes inicial = 1, y final = 3, o las que quieras.

PD1: No he probado el código, y lo he ido escribiendo sobre la marcha, por lo que si ves algún fallo, te animo a que lo corrijas y lo notifiques para editarlo. Así conseguiremos que los que vayan directamente a copiar el código no sufran tanto... :)

PD2: Normalmente no solemos dar la solución a los ejercicios que os mandan en vuestros estudios, pero en este caso me pareció interesante mostrar cómo convertir bucles anidados en simples operaciones como división y módulo.

Un saludo.

hckr
16-12-2011, 16:06
Vives por El Pinillo? lo digo por IES Los Manantiales... suelo pasar por ahí...

pepin
21-12-2011, 16:55
nop, vivo por playamar-la colina. que casualidad, paisanos :D....

gracias por la ayuda, ahi sigo aunque hemos terminado las clases y voy a coger unos dias de descanso, ire subiendo los avances.

saludos.