Partage
  • Partager sur Facebook
  • Partager sur Twitter

Script shell

    14 mai 2018 à 20:14:29

    Bonjour,

    J'essaye en ce moment les jeux Bandits de OverTheWire, et cela m'a ammené à découvrir...les scripts shell!

    C'est beau, mais ça m'a pas l'air très optimal pour programmer ^^ (bon, j'avoue, je suis pas douée).

    Voici mon problème: au niveau où je suis (25), il faut que je communique avec un deamon, je lui donne un mdp (connu) puis un code pin a 4 chiffres (inconnus). L'objectif est d'utiliser un script shell pour faire un brut force sur ce code pin.

    Alors bon, ça j'y arrive, mais c'est loooooonnnnng. alors je m'étais dit, je le laisse tourner et je reviens plus tard....Sauf que comme je l'ai fait, il tourne jusqu'au bout (même une fois le bon pin trouvé) et pour retrouver après la ligne...beurk.

    Donc, j'ai voulu me frotter aux conditions. Et là, c'est le drame.

    En gros, voilà le programme à la base:

    #!/bin/bash
    
    for i in $(seq 0 9999)
    do
            echo UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ $i | nc localhost 30002
    done
    

    le truc moche après echo, c'est le mot de passe. Donc ça, ça teste bien tous les i possibles (mais sans mettre les 0 devant pour les plus petits....ce qui est probablement un problème si le pin est inférieur à 1000. Problème que je ne sais pas régler, d'ailleurs).

    Avec ça, le Deamon me donne cette réponse:

    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.
    Exiting.

    Et donc, naïvement, je me suis dit "ok, je récupère un bout du texte qu'il me renvoie, et tant qu'il renvoie ça je continue, après j'arrête".
    En ce qui concerne le bout du texte, il est clair que ce doit être la deuxième ligne (celle qui dit Wrong...si je trouve le bon pin elle dira plus Wrong). mais je voulais pas prendre la ligne complète, alors j'ai pris juste le premier mot.

    Déjà, pour faire ça, j'ai fait comme ça:

    echo UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ $i | nc localhost 30002 > test.txt
    echo | sed -n '2p' test.txt > test2.txt
    echo | cut -f 1 -d ' ' < test2.txt > test3.txt

    et je trouve ça moche. D'abord, parce que ça prends 3 lignes, ensuite parce que je créé 3 fichiers. C'est sûrement possible de le faire en une fois, non?

    Voilà mon code complet:

    #!/bin/bash
    
    let "i=5000"
    response='Wrong!'
    while [[ $response = 'Wrong!' ]] && [ $i -le 6000 ]
    do
            echo UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ $i | nc localhost 30002 > test.txt
            echo | sed -n '2p' test.txt > test2.txt
            echo | cut -f 1 -d ' ' < test2.txt > test3.txt
            read response < test3.txt
            echo $i  $response
            i=$(expr $i + 1)
    done
    

    (Je teste que les i entre 5000 et 6000 pour l'instant, c'est juste pour voir si ça marche)

    Apparemment, ça marche, mais.......en fait à un moment ça s'arrête. Mon fichier test devient vide, il y a donc (je pense) un problème de réécriture quelque part.
    Ce qui, très franchement, me semble pluôt logique: déjà, quand je voulais réécrire directement dedans, avec par erxemple:

    echo | sed -n '2p' test.txt > test.txt

    ça me faisait des fichiers vides; or là je fais des boucles, donc je réécris dedans. Je comprends même pas pourquoi ça marche pendant un moment (temps aléatoire: ça bloque parfois au bout de 14 boucles, parfois au bout de 60, parfois juste après 2...là il en est à 300 sans bloquer!)

    Si quelqu'un a des explications à m'apporter (et pourquoi pas des idées d'amélioration), ce serait sympa :)

    Bonne journée,
    Flo



    • Partager sur Facebook
    • Partager sur Twitter

    Script shell

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown