Page 1 sur 1

Besoin d'aide pour un Contest :D !

Publié : mer. 08/août/2007 20:14
par Ar-S
Salut les copains.

Voilà ce qui me ramène à vous ("miam bon les ramens !" dirait Naruto)
Je participe au conteste proposé par Newbie Contest, au menu différentes catégories d'épreuves :

- Javascript/java
- Cryptographie
- Stenographie
- Hacking
- Cracking
- Logique etc...

Je suis classé dans les 7xx / 9068 pour le moment ce qui n'est pas si mal mais là j'ai besoin de votre aide, Ô programmeurs fous que vous êtes.

Dans cette épreuve joliment appelé "Game Over", je dois trouver un login et un mot de passe pour accéder à une page qui affichera le mot de passe pour valider l'épreuve. La seule méthode possible est le brute force
Donc j'ai chopé le javascript gérant celà :

Code : Tout sélectionner

<script type="text/javascript" language="JavaScript">
	var total_erreur=0;
	function Check() {
	var tabc=Check.arguments; var ok=0;
	var tab="                   azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN0123456789_$&#@";
	for (var no=0;no<tabc.length;no++) {
		checksum=tabc[no];
		var login=document.forms["flog"].elements["login"].value;
		var password="souris";
		var nblog=login.length;
		var nbpass=password.length;
		var sum=1;
		var n=Math.max(nblog,nbpass)
		for (var i=0;i<n;i++) {
			var index1=tab.indexOf(login.substring(i,i+1))+10;
			var index2=tab.indexOf(password.substring(i,i+1))+10;
			sum=sum+(index1*n*(i+1))*(index2*(i+1)*(i+1));
		}
        if (sum==checksum) {
			window.location="/epreuves/javascript/"+login+".php"; ok=1; no=100;
		}

	}
	if (ok==0) {
		total_erreur++;
		alert("Mauvais login ou mot de passe");
		if (total_erreur>2) {
			alert("Vous avez atteint les 3 essais !\nAu revoir");
			window.location="index.php";
		}
	}
	}
	function Verifie() {
	Check(3696619)
	}
	</script>
	<form onsubmit="Verifie();return false;" action="#" method="get" name="flog">
	<table border="0">
	  <tbody><tr>
		<td>Login : </td>
		<td><input name="login" size="8" type="text"></td>
	  </tr>
	  <tr>
		<td>Password : </td>
		<td><input name="password" size="8" type="text"></td>
	  </tr>
	  <tr>
		<td colspan="2" align="center"><input name="bouton" value="Tester" type="submit"></td>
	  </tr>
	</tbody></table>
	</form>
<hr>
<p class="bold">Validation :</p>
<form method="post" action="index.php?page=valid">
<p class="center"><input name="rep" size="20" type="text"><input name="no" value="100" type="hidden"><input value="Valider l'épreuve" type="submit"></p>
</form>
En le lisant on peut se dire que le nbr de caractères est à limité à 6 (nbr de lettre du mot souris).

Je n'ai AUCUNE idée de comment faire le brute force en PB

Je me dis seulement qu'il faut que je fasse en local une page index.html contenant le javascript ci-dessus (sans la restiction d'essais) et que je fasse une page index.php bidon avec marqué bravo.

Bref, je vais déjà faire une interface graphique et je reviendrai.

En attendant si vous avez des idées. N'hésitez pas ! :wink:

Publié : mer. 08/août/2007 21:39
par bombseb
je ne comprend pas bien ce que c'est cette page.... pourquoi il y a password="souris" en dur dedans comme ca ????

et ca : Check(3696619) pourquoi ce chiffre en dur ???

bah sinon c'est pas compliqué, tu refait l'algo en purebasic dans une procedure par exemple et tu envoie toutes les combinaisons de login/password à ta procédure...

par contre fait gaffe :
<input name="login" size="8"
apparement ton login et ton pass son limité à 8 caractères (pas 6 comme tu disait)

Publié : mer. 08/août/2007 22:06
par bombseb
je ne sais pas si c'est moi qui déraille, mais j'ai l'impression que l'algo est loin d'être optimisé...

à la sortie de cette boucle la variable sum devrait toujours être identique
for (var i=0;i<n;i++) {
var index1=tab.indexOf(login.substring(i,i+1))+10;
var index2=tab.indexOf(password.substring(i,i+1))+10;
sum=sum+(index1*n*(i+1))*(index2*(i+1)*(i+1));
}
alors je ne comprends pas pourquoi il ont mis cette boucle dans une autre boucle....



ensuite :
if (sum==checksum) {
window.location="/epreuves/javascript/"+login+".php"; ok=1; no=100;
}
ce test est bizarre car à chaque itération la variable sum est identique mais pas la variable checksum. cette variable checksum est en "dur" elle vaut 3, 9, 6, 6, 1 puis 9 à la dernière itération de la boucle principale

en gros ca veut dire que si dès la 1ere itération ce test est "vrai" alors on vas à la page login+".php" sans vérifier le reste de la variable checksum...bizarre bizarre

Publié : mer. 08/août/2007 23:38
par Ar-S
Merci pour ce grand début de réponse.
bombseb a écrit :je ne comprend pas bien ce que c'est cette page.... pourquoi il y a password="souris" en dur dedans comme ca ????
Car c'est la taille de l'input text, pas le nbr de caractères !
Et donc on voit password="souris" puis nbpass=password.length
donc nbpass=6 (s1 o2 u3 r4 i5 s6)
et ca répond à ton
<input name="login" size="8"
Sinon
bombseb a écrit : et ca : Check(3696619) pourquoi ce chiffre en dur ???
Oui c'est le problème
bombseb a écrit : bah sinon c'est pas compliqué, tu refait l'algo en purebasic dans une procedure par exemple et tu envoie toutes les combinaisons de login/password à ta procédure...
heu pas compliqué pas compliqué Image

Publié : jeu. 09/août/2007 18:31
par bombseb
j'ai commencé à faire l'algo au boulot en c# car je n'ai pas pb là bas

et ca plante à cause de ca :

Code : Tout sélectionner

var n=Math.max(nblog,nbpass)
      for (var i=0;i<n;i++) {
         var index1=tab.indexOf(login.[b]substring(i,i+1))[/b]+10; 
si la longueur du login est plus petite que celle du mot "souris" alors à un moment i sera trop grand pour pointer sur un caractère du login et la fonction substring plante (normal) alors je pense que le login est une chaine comprise entre 6 et 8 caractères
Mais
apparement ca ne plante pas en javascript (je ne connait pas javascript)

en tout cas j'espere que le mec qui a développé cet algo n'est pas développeur

Publié : ven. 10/août/2007 15:58
par venom
bonjour,

j'ai lu vos posts

je ne voie pas comment envoyer des informations de pb a une page web :? sa doit surement etre dans la fonction network ou un truck du genre fin je verrais bien :wink: .


@++

Publié : sam. 11/août/2007 13:04
par bombseb
tu peux envoyer des données par POST ou par GET
fait une recherche sur le forum tu vas trouver ton bonheur

Publié : sam. 11/août/2007 14:26
par SPH
venom a écrit :je ne voie pas comment envoyer des informations de pb a une page web :?
SUPER FACILE pourtant !

Publié : sam. 11/août/2007 14:42
par gnozal
SPH a écrit :SUPER FACILE pourtant !

Code : Tout sélectionner

         +-------------------+             .:\:\:/:/:.            
         |   PLEASE DO NOT   |            :.:\:\:/:/:.:           
         |  FEED THE TROLLS  |           :=.' -   - '.=:          
         |                   |           '=(\ 9   9 /)='          
         |   Thank you,      |              (  (_)  )             
         |       Management  |              /`-vvv-'\             
         +-------------------+             /         \            
                 |  |        @@@          / /|,,,,,|\ \           
                 |  |        @@@         /_//  /^\  \\_\          
   @x@@x@        |  |         |/         WW(  (   )  )WW          
   \||||/        |  |        \|           __\,,\ /,,/__           
    \||/         |  |         |          (______Y______)          
/\/\/\/\/\/\/\/\//\/\\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
==================================================================

Publié : dim. 12/août/2007 12:00
par Ar-S
Bon me voilà dans le top 500, j'ai laissé pour le moment de coté cette épreuve en me focalisant sur la prog php et la crypto dans lesquelles j'ai plus de facilités.
J'y reviendrai plus tard. :P