logo Homepage
+  NewbieContest
|-+  Général» Général» Brute-Force
Username:
Password:
Pages: [1]
  Imprimer  
Auteur Fil de discussion: Brute-Force  (Lu 11653 fois)
lolown
Profil challenge

Classement : 5177/54284

Néophyte
*
Hors ligne Hors ligne
Messages: 7


Voir le profil
« le: 25 Décembre 2010 à 20:45:03 »

Bonjour à tous, 
J'ai remarqué que pour certains challenges, un brute-force était nécessaire. Comme je suis plutôt connaisseur en JS et que je commence en python, j'ai décidé de voir comment en élaborer un dans chacun des deux. Toutefois, j'ai deux inconvénients, mais avant, voici les statistiques relevées par mes brute-force:

Brute-Force en python (exécuté sur Python Shell) -> A trouvé 14 776 336 possibilités en 2:05min, soit environ 118 210 possibilités par seconde
Toutes les données trouvées ont été insérées dans un fichier.txt (ayant maintenant une taille 90 188ko )
Voici le code:
Code:
import os
Alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
i = 0
with open('repertoire.txt', 'a') as mon_fichier:
    # ^^
    for a in range(0,62):
        for b in range(0,62):
            for c in range(0,62):
                for d in range(0,62):
                        Brute = Alpha[a] + Alpha[b] + Alpha[c] + Alpha[d]
                        mon_fichier.write("["+Brute+"]")
                        i += 1
                        if i % 8 == 0:
                            mon_fichier.write("\n")
                        if i % 200000 == 0:
                            print("Donnée numéro "+str(i)+" rentrée")

mon_fichier.close()
print("Operation terminee")
print(str(i)+" données entrées")

Brute-Force en JS (exécuté en local) -> A trouvé 17 576 possibilités en 3:06min, soit environ 94 possibilités par seconde...
Toutes les données ont été montrées par innerHTML sur la page
Voici le code:
Code:
<head>
    <title>Javascript Brute Force</title>
<style>
body {
    background-color: black;
    color: lime;
    font-family: sans-serif;
    font-size: 14px;
    font-weight: bold;
}
</style>

<script type="text/javascript">
var centi=0
var secon=0
var minu=0
var z = 0
function chrono(){
centi++;
if (centi>9){centi=0;secon++}
if (secon>59){secon=0;minu++}
document.forsec.secc.value="  "+centi
document.forsec.seca.value="  "+secon
document.forsec.secb.value="  "+minu
compte=setTimeout('chrono()',100)
}
function rasee(){
clearTimeout(compte)
centi=0;
secon=0;
minu=0;
document.forsec.secc.value="  "+centi
document.forsec.seca.value="  "+secon
document.forsec.secb.value="  "+minu
}
var MIN_CHAR = 97;
var MAX_CHAR = 122;
var DELAY_INTERVAL = 0;
var STOP_KEY = 27;
var START_KEY = 13;

function cnext(expr)
{
    var len = expr.length - 1;

    if (expr.charCodeAt(len) >= MAX_CHAR && len != 0)
    {
        tmp = cnext(expr.substr(0,len)) + String.fromCharCode(MIN_CHAR);

        return tmp;
    }

    if (expr.charCodeAt(len) >= MAX_CHAR && len == 0)
    {
        tmp = String.fromCharCode(MIN_CHAR) + expr.substr(0,len) + String.fromCharCode(MIN_CHAR);

        return tmp;
    }

    tmp = expr.substr(0,len) + String.fromCharCode(expr.charCodeAt(len) + 1);

    return tmp;
}

var test = String.fromCharCode(MIN_CHAR);
var password = document.getElementById("mdp").value;
var stopped = false;


function goo()
{
if( z == 0) { chrono(); z++;}
    var c = document.getElementById('c');

    test = cnext(test);
    c.innerHTML = test;

    if (test == document.getElementById("mdp").value || stopped)
{
clearTimeout(compte)
return;
}

    setTimeout("goo()", DELAY_INTERVAL);
}

function checkStop(ev)
{
    if (ev.keyCode == STOP_KEY)
        stopped = true;

    if (ev.keyCode == START_KEY)
    {
        stopped = false;
        setTimeout('goo()', 0);
    }
}
</script>
<script>
var centi=0
var secon=0
var minu=0
function chrono(){
centi++;
if (centi>9){centi=0;secon++}
if (secon>59){secon=0;minu++}
document.forsec.secc.value="  "+centi
document.forsec.seca.value="  "+secon
document.forsec.secb.value="  "+minu
compte=setTimeout('chrono()',100)
}
function rasee(){
clearTimeout(compte)
centi=0;
secon=0;
minu=0;
document.forsec.secc.value="  "+centi
document.forsec.seca.value="  "+secon
document.forsec.secb.value="  "+minu
}
</script>
</head>

<body onload="setTimeout('goo()', 0);" onkeypress='checkStop(event)' >
    <br /><br /><br />
<input type="password" name="ep1" size="20" value="zzz" id="mdp" />
    <div id="c"></div>
<br />

<form name="forsec">
<input type="text" size="3" name="secb"> minute(s)
<input type="text" size="3" name="seca"> secondes
<input type="text" size="3" name="secc"> dixièmes
</form>
</body>

Donc, voilà, je me retrouve avec 2 possibilités, dont une à éliminer si possible. En effet, le python est environ 1244 fois plus rapide. Je ne sais pas si je peux me servir du python pour brute-forcer et comment faire lorsqu'on tombe avec 5 caractères... Là, il n'y en avait que 4, toutefois lorsque j'ai essayé 5, au bout de 10 minutes, cela n'était même pas fini et mon ficher.txt faisait plus d'un million de ko... Donc, si je prends le python, comment pouvoir m'en servir (j'avais pensé à mettre 25M de clés par fichier.txt) et l'optimiser ?

Deuxième point, se rattachant un peu au premier... Comment faire les tests... Si j'ai une page et que je veux tester tous les mots de passe rentrés dans mon fichier.txt, comment faire ??? Je n'ai aucune idée comment appliquer les tests rentrés dans ma "base de donné.txt". J'ai entendu dire qu'il fallait le faire en localhost, mais comment faire pour garder une bonne cadence et faire un submit de la page non manuellement sans quitter la page... ?
En passant, je sais comment programmer, mais pas comment automatiser ^^'

Merci à tous

Ps. Joyeux Noel
Journalisée
yacine.ya
Profil challenge

Classement : 883/54284

Néophyte
*
Hors ligne Hors ligne
Messages: 46


Voir le profil
« #1 le: 25 Décembre 2010 à 21:20:50 »

salut
j'ai juste une remarque à faire pour optimiser
1- enlever l'écriture dans le fichier , parce que chaque écriture fait un appel système et à chaque appel système votre programme sera interrompu (tu appel le système juste pour écrire 4 caractère ! chaque fois)
2- si tu veux vraiment dans un fichier utilise un grand buffer (écrire un buffer qui contient beaucoup de caractères = 1 appel système et écrire 4 caractères aussi = 1 appel système et les appels système sont très lents)
3- pour faire un brute force très rapide utilise le c ou asm (compilés et bas niveau)
dsl je ne connais ni python ni java script pour te répondre à tes question  
« Dernière édition: 28 Décembre 2010 à 18:20:10 par yacine.ya » Journalisée
akway

Profil challenge

Classement : 351/54284

Membre Complet
***
Hors ligne Hors ligne
Messages: 151


Voir le profil
« #2 le: 25 Décembre 2010 à 22:13:33 »

Yop  yop,

Si j'ai bien compris tu cherches à bruteforcer un formulaire d'authentification de page web dont tu as la source.

Dans ce cas le mieux est en effet de tester ton bruteforce en local parce que :

1)C' est carrément plus rapide que d'envoyer la réponse sur le serveur distant et de devoir attendre la réponse.
2)Si tu testes ton bruteforce sur le serveur, les modos seront vite là pour te rappeler le sens de la grosse phrase en rouge qui clignote.  

Du coup si tu teste le passe tu n' auras donc peut-être pas besoin de faire tous ces accès en écriture.(si test=bonpass: on stop le script, sinon on continue)
Pour tester un bruteforce sur un formulaire en javascript, php, java,...le plus simple est donc d'installer un serveur web pour tester en local.  

De manière plus générale python cramera toujours javascript en terme de vitesse du fait que le navigateur web, qui fait office d'interpréteur javascript n'est pas fait pour cela.

T'chô !


  
« Dernière édition: 25 Décembre 2010 à 22:18:17 par akway » Journalisée

Please, do NOT feed the Troll.
lolown
Profil challenge

Classement : 5177/54284

Néophyte
*
Hors ligne Hors ligne
Messages: 7


Voir le profil
« #3 le: 26 Décembre 2010 à 02:29:26 »

Yop  yop,

Si j'ai bien compris tu cherches à bruteforcer un formulaire d'authentification de page web dont tu as la source.

------------------------------------------------


Du coup si tu teste le passe tu n' auras donc peut-être pas besoin de faire tous ces accès en écriture.(si test=bonpass: on stop le script, sinon on continue)
Pour tester un bruteforce sur un formulaire en javascript, php, java,...le plus simple est donc d'installer un serveur web pour tester en local.  

--------------------------------

De manière plus générale python cramera toujours javascript en terme de vitesse du fait que le navigateur web, qui fait office d'interpréteur javascript n'est pas fait pour cela.


Tout d'abord, merci de ta réponse:

1. Effectivement, j'ai le formulaire source et l'envoi submit (comme un formulaire normal ^^'), mais je n'ai pas la value comme dans mon exemple javascript, je fais des essais qui seront envoyés à une page php

2. Donc, ce point me paraît compliqué (pour moi :p). Comment je fais pour que le python test les possibilités ?!?!?
Je ne comprends pas comment me faire un serveur web pour essayer cela... J'aimerais vraiment que tu me fasses un exemple concret s.v.p.
Genre au lieu de ma ligne de code qui dit qu'on écrit dans mon fichier.txt, comment le programme python pourrait-il essayer directement sur le serveur jusqu'à temps que le code soit valide (exemple concret s.v.p. je suis totalement perdu sur ce point  )

3. Exactement, sauf que je ne savais pas que le python pouvait interragir avec un serveur, mais cela est rattaché au point 2

Bref, merci de ton aide et des réponses que tu pourras m'apporter

@yacina.ya: J'irai voir en C si je peux trouver quelque chose, mais ça ne me tente pas d'apprendre cela, est-ce que le Java peut suivre le même rythme que le C, j'y serais plus à l'aise ?

Ps Je me suis rendu compte que pour mon programme python, j'avais besoin de savoir le nombre de caractères, comment faire si je le ne sais pas ?
« Dernière édition: 26 Décembre 2010 à 02:34:49 par lolown » Journalisée
yacine.ya
Profil challenge

Classement : 883/54284

Néophyte
*
Hors ligne Hors ligne
Messages: 46


Voir le profil
« #4 le: 26 Décembre 2010 à 14:12:55 »

**No Sms**
1-le java est moins rapide que le c (mais tu peux faire ton brute force en java , mois je fait presque toujours en VB.net (800 000 pass/secode) )
2-dans le cas ou tu ne connais le nombre de caractères dans le pass il faut commencer de 1 (juste une boucle) puis 2 (2 boucles) et etc
Journalisée
Asteriksme
Modérateur Global

Profil challenge

Classement : 37/54284

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 785

.


Voir le profil WWW
« #5 le: 26 Décembre 2010 à 14:29:27 »

J'ajouterai que si tu veux "intéragir avec le serveur", un bon entraînement serait de faire les premières progs. Une fois que tu auras compris le principe tu sauras faire un bruteforce en ligne sans trop de problème

Edit: je précise que, comme tu dois évidemment le savoir, le bruteforce de l'un des champs de réponse de newbiecontest est interdit, et que de manière générale, bruteforcer un formulaire en ligne est rarement légal vu que ça demande souvent des informations personnelles (intrusion dans un système automatisé, usurpation d'identité, toussa...)
« Dernière édition: 26 Décembre 2010 à 20:24:37 par Asteriksme » Journalisée

"It's a funny thing about some mathematicians. We often don't care if the results have applications because the results are themselves so pretty."
lolown
Profil challenge

Classement : 5177/54284

Néophyte
*
Hors ligne Hors ligne
Messages: 7


Voir le profil
« #6 le: 27 Décembre 2010 à 03:51:41 »

Merci de vos deux réponses, j'apprécie toujours autant 

1. C'est quoi le VB.net ?
2. Oui, j'aimerais apprendre comment interragir avec, mais qu'est-ce "les premières progs" ?
3. Non, je n'ai pas l'intention de faire des trucs illégaux et la phrase en rouge est assez visible :p
Journalisée
yacine.ya
Profil challenge

Classement : 883/54284

Néophyte
*
Hors ligne Hors ligne
Messages: 46


Voir le profil
« #7 le: 27 Décembre 2010 à 10:14:51 »

VB c'est visual basic et .net c'est un framewok (un grand ensemble de bibliothèque de programmation) et pour plus d'information visite http://fr.wikipedia.org/wiki/Visual_Basic_.NET
Journalisée
akway

Profil challenge

Classement : 351/54284

Membre Complet
***
Hors ligne Hors ligne
Messages: 151


Voir le profil
« #8 le: 27 Décembre 2010 à 10:48:03 »

Bon le topic part un peu dans tous les sens mais au moins ça te laisse le choix des armes

pour ce qui est du serveur en local, le plus simple (pas le plus propre hein) est d'installer un serveur "tout fait", il en existe plein (easyphp,lamp/xamp, ...)et il va falloir que tu passe par une petite phase d'apprentissage.
Pour parler simple, faut t'installer un site web sur ta machine. Mais il faudra lacher javascript pour te mettre a autre chose...(qui a dit php ?)

Comme dit plus haut, les premières épreuves de la section programmation peuvent être un bon moyen de se faire la main.

Enfin si ta difficulté est de passer les arguments de réponse à ton script, plusieurs manières, tu le passes dans l'url au script de réponse OU tu combines le script "bruteforce" et "réponse" OU tu recode la procedure qui teste le pass en python.

Voila, bonne chance !
Journalisée

Please, do NOT feed the Troll.
lolown
Profil challenge

Classement : 5177/54284

Néophyte
*
Hors ligne Hors ligne
Messages: 7


Voir le profil
« #9 le: 28 Décembre 2010 à 17:26:12 »

Merci de votre aide à tous, je regarderai tout cela

Ps J'ai une certaine base en php déjà, disons assez pour utiliser les variables superglobales, table de données, SQL et les mots de base
Journalisée
Iansus

Profil challenge

Classement : 50/54284

Membre Senior
****
Hors ligne Hors ligne
Messages: 262


Voir le profil WWW
« #10 le: 29 Décembre 2010 à 10:38:49 »

Les bases de données tu veux dire ?
Je pense pas que dans ce bruteforce ça te soit d'une quelconque utilité, m'enfin.
En revanche, tout le monde croit que les variabes superglobales c'est un truc de la morkitu, mais pas du tout, c'est juste un autre genre de variable.
C'est comme si je disais : j'ai les bases en C++, je connais les pointeurs, la POO et les int.
Journalisée
Pages: [1]
  Imprimer  
 
Aller à: