Para comenzar a explicar en que consiste un ataque de fuerza bruta primero debemos definirlo:
Un Ataque de fuerza bruta dentro del campo de la criptografía es una técnica que permite probar todas las combinaciones posibles hasta encontrar la palabra o texto legible que fue cifrado para obtener el criptograma. Imaginen nada más una caja negra donde se conoce la salida, el proceso NPI (No Poseo Información) y lo único que se sabe fue que tuvo que haberse dado una entrada legible para obtener ese cifrado.Luego de tanta teoría y pasando un poquito mas a la practica, un bruteforce consta de 4 cosas vitales.
2- Una longitud de palabra, la cual nos determina todas
las posibles combinaciones de la siguiente manera. longitud_palabra ^
longitud_charset, esto quiere decir que por ejemplo para una palabra de
2 letras con un alfabeto de 26 letras obtenemos 67108864 combinaciones
posibles.
2^26 = 67108864 (Combinaciones).
Entre mas grande es la palabra ó entre mas grande es el charset, mayor
es el número de combinaciones y mayor es el tiempo invertido en obtener
una posible respuesta… todo es directamente proporcional.
3- Palabra cifrada, la cual va a ser usada para romper el ciclo de iteraciones en caso de encontrar la palabra legible.
4-Algoritmo o función de cifrado, ya que sin esta no es posible hacer el bruteforce ¿de qué sirve tener un poco de palabras y letras, si no tenemos como cifrarlas?
Programando un ataque por fuerza bruta
Bien, ya con la teoría y la cabeza un
poco mas caliente voy a dejar la estructura base para cualquier
bruteforce (Si hay otra forma mas eficiente, les agradecería publicar).
Este es un bruteforce en JavaScript, pero aplica para cualquier
lenguaje:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| //Definicion del charset o alfabeto alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ; //Variable donde quedara la respuesta resp = "" ; //Cada for representa una letra mas en la palabra //En el siguiente caso hay cuatro ciclos for, por lo tanto las combinaciones de palabras //siempre son de cuatro letras. for (i=0; i<alpha.length; i++) //Letra 1 for (k=0; k<alpha.length; k++) //Letra 2 for (h=0; h<alpha.length; h++) //Letra 3 for (l=0; l<alpha.length; l++){ //Letra 4 //Guardo la respuesta temporal usando las combinaciones de cada iteracion //Trabajando con los indices del alfabeto resp = alpha.charAt(i) + alpha.charAt(k) + alpha.charAt(h) + alpha.charAt(l); //Paso por parametro la palabra temporal a la funcion criptografica y la comparo //Contra la palabra ya cifrada para saber si los resultados son iguales if (funcion_criptografica(resp) == "6c35a810d9b4ef7fa9f694d1c00e7593c08143f6" ){ //En caso de ser iguales, sencillamente muestro la respuesta y rompo el ciclo =) alert( "esta es : " + resp); //Rompo el bucle break ; |
No hay comentarios:
Publicar un comentario