Le dernier exercice avait bien été apprécié, alors je remet ça.
Consigne :
Créer un script de brute force de passwords Unix par dictionnaire.
Puisqu’on est pas non plus des Kevin Mitnick en puissance, on va supposer que vous êtes connectés sur la machine, que vous avez les droits root dessus et que vous avez localisé les mots de passe comme étant dans “/etc/shadow”.
Votre script va vérifier si il possède un dictionnaire de mots de passe. Si ce n’est pas le cas, il va télécharger celui-ci et le décompresser : http://xato.net/files/10k%20most%20common.zip.
Ensuite vous parcourez le fichier shadow, et vous essayez de trouver quel mot de passe se cache derrière chaque hash. Si il n’y a pas de hash, vous pouvez ignorer l’utilisateur.
Exemple de sortie:
Processing password for user "root": no password hash to process. Processing password for user "daemon": no password hash to process. Processing password for user "bin": no password hash to process. Processing password for user "sys": no password hash to process. Processing password for user "www-data": no password hash to process. Processing password for user "sam": fail to break password. Processing password for user "test": password is "cheese". Processing password for user "messagebus": no password hash to process. Processing password for user "avahi-autoipd": no password hash to process. Processing password for user "avahi": no password hash to process. ...
Afin de simplifier l’exercice, il n’est pas demandé de gestion d’erreur ou de passage en a paramètre du script.
Comme d’habitude, il n’y a pas de solution ultimate de la mort qui tue, c’est juste pour le fun.
On va essayer de faire ça. Petite question cependant : Le type de chiffrement des mdp est défini ou faut le déterminer selon le hash ?
Il faut le déterminer selon le hash.
Access denied | xato.net used CloudFlare to restrict access
Ouais, bah le script ne téléchargera pas automatiquement le zip, hein !
En lisant cela, ça me fait penser que ma fille a modifié mon MdP admin sur mon hackintosh (petite peste, du coup ce genre d’exo me serait bien utile :P
Bon, c’est du à l’arrache, et le zip est du coup hébergé chez moi :
http://0bin.net/paste/f65K6CKcNXpU+OHk#EnCjQEGzdgD1Iesc01/eW5vHNO1zN0sg7jAUkrK04V4=
allez, vu que c’est un truc qui parait pour une fois vaguement à ma portée, je m’essaie: http://0bin.net/paste/UA9pnVz65zASfNus#UtHijZ7LFDNC+2FRydH3GkqHQQuE0jz5RDWZJSbCXdg=
me suis calqué sur ma babasse qui crypte en sha512, et il manque bien sur un salt dans le script.
gruikment votre.
mon 1er comment a du passer à la trappe… désolé pour le doublon!
donc, dans le plus pur style larache, et vu que j’ai aucune idée de comment on peut faire pour détecter le type de hash, voila une bafouille qui vérifie (peut-être) en sha512. sans salt parque je suis fainéant:
http://0bin.net/paste/vrz2rq8G7i+sQrOf#pb+LtTKleR6yIDOeY0IhdtKCLfpVJTwGtp/hguX1J28=
Ma solution
Sachant que par défaut je cherche le fichier zip dans http://localhost:8000 (à cause de l’access denied).
Sinon be c’est du fast and dirty, tellement que je suis le premier à proposer ma solution :p
Bon ba je me suis un peu cassé les dents là-dessus, j’avais pas linux sous la main donc j’ai testé avec un /etc/shadow fait “à la main” et j’ai juste fait le md5 et le sha-512 (mais j’ai même pas su tester le dernier…). Un petit cours sur le hashage me ferait pas de mal …
http://0bin.net/paste/7lMEIEZZ-xhr47NQ#ly3PJL52JYkK5khUJ2pNZMWKhenUbG/uOZRSQ0FSLVg=
Edit: en fait je suis le 3e à avoir posté ma solution :3
Par contre je n’arrive pas à lire celles de groug et Ashgan, j’ai le message ” Could not decrypt data (Wrong key ?) “.
A l’image de la méthode de cassage de mot de passe, j’ai fait un programme brute force :
Une solution
Pour réduire le temps de calcul, il faudrait sauver les hash déjà calculés. Ce sera pour la v2 qui ne verra jamais le jour.
Par contre c’est malheureux d’avoir autant de code pour télécharger le fichier que pour casser les mots de passe…
@Morgoth : ouais, à cause du = en fin d’url qui n’est pas passé dans le a href…
Sinon, google a été mon ami, pour l’exercice, et j’ai pu le faire grâce à ça :
http://www.aychedee.com/2012/03/14/etc_shadow-password-hash-formats/
http://docs.python.org/3/library/crypt.html
crypt prend un salt en paramètre, et détecte le type d’algo tel que décrit dans le premier lien, c’est magique :)
Mon post précédent n’a pas du passer.
Alors voici ma solution.
Sinon, google a été mon ami, pour l’exercice, et j’ai pu le faire grâce à ça :
http://www.aychedee.com/2012/03/14/etc_shadow-password-hash-formats/ et le module crypt
crypt prend un salt en paramètre, et détecte le type d’algo tel que décrit dans le premier lien, c’est magique :)
Bonjour,
Voici ma proposition :
http://0bin.net/paste/Laj6wD1aHSRkHRNN#9QxX/Hf3aBOtCBPwso+FgX/351aEnLWcjwitWtdhVeE=
Bien cette idée d’exercice j’ai appris 2-3 trucs en le faisant :)
arg le lien est cassé je tente ça :
http://0bin.net/paste/Laj6wD1aHSRkHRNN#9QxX/Hf3aBOtCBPwso+FgX/351aEnLWcjwitWtdhVeE=
ça a l’air de fonctionner !
pareil, grâce à Foxmask qui m’a orienté sur le hash ce matin, j’ai une version qui marche!
y’aurait beaucoup à en redire, mais ca tourne:
http://0bin.net/paste/-Ydx4Y87iQqJ+BIW#L5UA7IWf+JYOWlDWELf2M8GtfieWHM8DUocZY1z9MQ4=
4e tentative de post : http://0bin.net/paste/VPwAUgxFRh7czRm2#V1gj8ABGTLsUfIU2WnPOsbG5s/46iigYPuYqjf+cpVY=
sur le channel on a bien “échangé” dessus avec ashgan ;-) mon mien de code nase (sanchant qu’à cette heure ci je n’ai pas la totalité des commentaires (9) ) donc peut-etre que je suis à la bourre mais c’est pas grave ; j’ai fait une prose en plus dans le code :D
http://0bin.net/paste/B2J1vopBmf6eJD7Y#AlnHWcV9uk+PB4/vQlEKUHG2QUsP2YjuKWGwOy6D2rI=
si vous collez les lien provenant de 0bin alors utiliser le bouton “link” ; sinon si l’url fini par un ‘=’ ; l’url est tronquée et mene à un 404
Une version un peu plus finalisée (j’avais oublié de sauvegarder le fichier texte du coup je le téléchargeais à chaque fois) : http://pastebin.com/ujnSi92p
@groug : t’as été moins fainéant que moi et tu as fais des fonctions ^^ Moi j’ai tout inliner honêtement :) Mais bien vu, trouver crypt était la moitié du taff.
@noname: clap clap pour avoir été le premier à comprendre qu’il fallait utiliser un User-Agent sinon cloudflare t’envoyait de faire foutre.
@bob: premier à avoir découvert le module spwd :) Bon par contre tu triches pour le DL.
@ashgan : unicorrrrrrrrrn ! Par contre pas besoin de ‘\n\r’ dans strip, les 10000 mots de passe ne contiennent pas d’espaces à la fin. Ce sont des mots de passe de neuneu ^^
@abcdefgh: pour l’instant, la version la plus propre.
@foxmask, le seul qui a mis des commentaires \o/
@sam: j’savais que ca te sauterais aux yeux!
pour le \n\r, pas eu le choix: mon systeme me les liste ‘password\n\r’ etc…
sans le strip, ca passe pas
c’est vrai que
c’était prophylactique :)
perso si dans le code je raconte pas un truc ; je trouve ca prise de tete à (reeee)lire :)
Ah ouais, je connaissais pas du tout spwd, p’tain, y a vraiment un module pour tout :)
Bien joué noname le coup du user-agent, je n’aurais pas pensé que c’était si simple à déjouer…
@groug avec requests on passe à travers de la restriction du UA aussi.
J’ai réussi ! En bash comme la dernière fois.
http://pastebin.com/DWSZa95x
Faut vraiment que je me mette a python; on perd un temps fou avec bash pour des trucs qui devraient être simple. Genre le fichier de mot de passe est au format windows ou un truc dans le genre et ça faisait “planter” les programmes que j’utilise d’habitude pour traiter un fichier.
Du coup j’ai utilisé sed pour extraire les mots de passe; c’est lent mais ça marche.
Le script met 1:30 min pour tester tout les mots de passe sur un core2duo; 30 secs de plus que ton script qui est monocore…
Pas mal le trombone qui s’affiche quand on écrit windows :-D