Это третья часть моей серии статей о скриптах на Python. Если вы не читали предыдущие две статьи, вернитесь к Части 1 (Введение) и Части 2 (Создание инструмента для захвата баннеров), прежде чем продолжить.
Как я уже упоминал в предыдущих уроках, Python, пожалуй, самый распространённый язык программирования для хакеров. В первую очередь, это связано с наличием в нём ряда встроенных модулей и библиотек, которые значительно упрощают и ускоряют выполнение многих задач, с которыми приходится сталкиваться хакерам.
В этом руководстве я хочу предоставить вам дополнительную базовую информацию о Python, а затем создать взломщик паролей для FTP-сервера, используя некоторые из вещей, которые мы изучили в этих трех модулях.
Словари
В Python словари действуют подобно ассоциативным массивам в других языках. Мы используем их, когда хотим сохранить список элементов и присвоить им метку. Это может быть, например, привязка идентификаторов пользователей к именам или привязка известных уязвимостей к определённому хосту.
Словари содержат неупорядоченные пары — ключ и значение, — где ключи должны быть уникальными. Как и списки, о которых я говорил в предыдущем уроке, словари итерируемы. Это означает, что мы можем перебирать их с помощью управляющей структуры, например, оператора for , присваивая каждый элемент словаря переменной, пока не достигнем конца словаря. Среди прочего, эту структуру можно использовать для создания взломщика паролей, где мы перебираем все пароли в словаре, пока один из них не сработает или не достигнем конца. Словари обеспечивают быстрый поиск.
Для создания словаря синтаксис выглядит следующим образом:
dict = {ключ1:значение1, ключ2:значение2, ключ3:значение3…}
Контрольные заявления
Как и в любом языке программирования или скриптинга, нам часто требуется, чтобы наш код принимал решения. В Python существует несколько способов управления ходом выполнения скрипта. Например, мы можем задать условный оператор: если это …, то то … иначе сделай то .
Давайте рассмотрим некоторые из этих структур в Python.
если:
Структура if в Python похожа на конструкцию if…then в BASH. Синтаксис выглядит следующим образом:
Блок управления в Python должен иметь отступ.
если…иначе:
Структура if..else в Python похожа на if…then..else в BASH . Синтаксис выглядит следующим образом:
Например, здесь у нас есть фрагмент кода, который проверяет значение идентификатора пользователя. Если оно равно 0 (пользователь root в Linux всегда имеет UID 0), то мы выводим сообщение «Вы — пользователь root». В противном случае, если это любое другое значение, мы выводим сообщение «Вы не являетесь пользователем root».
Петли
Циклы — ещё одна очень полезная структура в Python. Наиболее часто используются два из них: while и for .
пока:
Оператор while вычисляет логическое выражение (результат — «истина» или «ложь») и продолжает выполнение, пока выражение остаётся истинным. Например, мы могли бы создать фрагмент кода, который выводит каждое число от 1 до 10, а затем выходит из цикла.
для:
Цикл for присваивает значения из списка, строки или другой итерируемой структуры, например, словаря, индексной переменной при каждом проходе цикла. Например, мы можем использовать цикл for для перебора паролей, как в нашем скрипте ниже.
Создание взломщика паролей FTP
Теперь, когда у нас за плечами три урока по Python, давайте создадим простой взломщик паролей FTP на Python, используя полученные знания. В данном случае давайте воспользуемся сложной интегрированной средой разработки (IDE). Хорошая IDE может значительно ускорить написание кода и облегчить
отладку.
Мой фаворит — PyCharm. Вы можете бесплатно скачать общедоступную версию по адресу https://www.jetbrains.com/pycharm/download/#section=linux .
Введите этот код ниже в PyCharm.
Давайте теперь проанализируем, что мы здесь сделали.
В строке 3 мы импортировали модуль ftplib для использования нашим взломщиком FTP.
В строке 6 мы спрашиваем у пользователя, какой IP-адрес он хочет попытаться взломать, и эти данные помещаются в переменную с именем «сервер».
В строке 12 мы спрашиваем пользователя, пароль какого пользователя он хочет попытаться взломать, и помещаем эти данные в переменную «имя пользователя».
В строке 18 мы запрашиваем у пользователя путь и имя файла списка паролей и помещаем его в переменную с именем «passwordlist».
В строке 23 мы начинаем блок try/except. Этот блок попытается выполнить некоторый код, и если он завершится неудачей или возникнет ошибка, он прервётся и перейдёт к блоку except ниже.
В строке 25 мы начинаем циклическую структуру «with». Эта циклическая структура продолжается до тех пор, пока условие после неё остаётся истинным. В данном случае мы используем функцию open для открытия списка паролей, и этот цикл будет продолжаться до тех пор, пока файл открыт или не будет достигнут конец файла.
В строке 27 мы начинаем цикл for, который будет перебирать каждый пароль и удалять все начальные и конечные пробелы с помощью функции strip.
В строке 30 мы подходим к сути взлома пароля. Сначала мы подключаемся к FTP-серверу.
ftp=ftplib.FTP(сервер)
Затем мы начинаем блок try/except, чтобы попробовать каждое слово пароля для имени пользователя, введенного пользователем выше.
ftp.login(имя пользователя, слово)
Если имя пользователя и пароль создают успешное соединение, выводится сообщение «Success!» с паролем, и соединение закрывается. В случае неудачи соединение переходит к следующему условию except.
Теперь, чтобы протестировать наш код, попробуйте запустить (зелёная кнопка над рабочей областью) этот взломщик паролей FTP на FTP-сервере в Metasploitable 2, используя учётную запись «msfadmin». Вы должны увидеть следующий вывод.
Когда пароль будет найден и FTP-сервер успешно подключен, выводится сообщение: «Успех! Вы подключились к FTP-серверу. Пароль: <password>».
Возвращайтесь, мои начинающие хакеры, поскольку мы продолжаем развивать наши навыки написания скриптов до уровня профессионального хакера!
Как я уже упоминал в предыдущих уроках, Python, пожалуй, самый распространённый язык программирования для хакеров. В первую очередь, это связано с наличием в нём ряда встроенных модулей и библиотек, которые значительно упрощают и ускоряют выполнение многих задач, с которыми приходится сталкиваться хакерам.
В этом руководстве я хочу предоставить вам дополнительную базовую информацию о Python, а затем создать взломщик паролей для FTP-сервера, используя некоторые из вещей, которые мы изучили в этих трех модулях.
Словари
В Python словари действуют подобно ассоциативным массивам в других языках. Мы используем их, когда хотим сохранить список элементов и присвоить им метку. Это может быть, например, привязка идентификаторов пользователей к именам или привязка известных уязвимостей к определённому хосту.
Словари содержат неупорядоченные пары — ключ и значение, — где ключи должны быть уникальными. Как и списки, о которых я говорил в предыдущем уроке, словари итерируемы. Это означает, что мы можем перебирать их с помощью управляющей структуры, например, оператора for , присваивая каждый элемент словаря переменной, пока не достигнем конца словаря. Среди прочего, эту структуру можно использовать для создания взломщика паролей, где мы перебираем все пароли в словаре, пока один из них не сработает или не достигнем конца. Словари обеспечивают быстрый поиск.
Для создания словаря синтаксис выглядит следующим образом:
dict = {ключ1:значение1, ключ2:значение2, ключ3:значение3…}
Контрольные заявления
Как и в любом языке программирования или скриптинга, нам часто требуется, чтобы наш код принимал решения. В Python существует несколько способов управления ходом выполнения скрипта. Например, мы можем задать условный оператор: если это …, то то … иначе сделай то .
Давайте рассмотрим некоторые из этих структур в Python.
если:
Структура if в Python похожа на конструкцию if…then в BASH. Синтаксис выглядит следующим образом:
Блок управления в Python должен иметь отступ.
если…иначе:
Структура if..else в Python похожа на if…then..else в BASH . Синтаксис выглядит следующим образом:
Например, здесь у нас есть фрагмент кода, который проверяет значение идентификатора пользователя. Если оно равно 0 (пользователь root в Linux всегда имеет UID 0), то мы выводим сообщение «Вы — пользователь root». В противном случае, если это любое другое значение, мы выводим сообщение «Вы не являетесь пользователем root».
Петли
Циклы — ещё одна очень полезная структура в Python. Наиболее часто используются два из них: while и for .
пока:
Оператор while вычисляет логическое выражение (результат — «истина» или «ложь») и продолжает выполнение, пока выражение остаётся истинным. Например, мы могли бы создать фрагмент кода, который выводит каждое число от 1 до 10, а затем выходит из цикла.
для:
Цикл for присваивает значения из списка, строки или другой итерируемой структуры, например, словаря, индексной переменной при каждом проходе цикла. Например, мы можем использовать цикл for для перебора паролей, как в нашем скрипте ниже.
Создание взломщика паролей FTP
Теперь, когда у нас за плечами три урока по Python, давайте создадим простой взломщик паролей FTP на Python, используя полученные знания. В данном случае давайте воспользуемся сложной интегрированной средой разработки (IDE). Хорошая IDE может значительно ускорить написание кода и облегчить
отладку.
Мой фаворит — PyCharm. Вы можете бесплатно скачать общедоступную версию по адресу https://www.jetbrains.com/pycharm/download/#section=linux .
Введите этот код ниже в PyCharm.
Давайте теперь проанализируем, что мы здесь сделали.
В строке 3 мы импортировали модуль ftplib для использования нашим взломщиком FTP.
В строке 6 мы спрашиваем у пользователя, какой IP-адрес он хочет попытаться взломать, и эти данные помещаются в переменную с именем «сервер».
В строке 12 мы спрашиваем пользователя, пароль какого пользователя он хочет попытаться взломать, и помещаем эти данные в переменную «имя пользователя».
В строке 18 мы запрашиваем у пользователя путь и имя файла списка паролей и помещаем его в переменную с именем «passwordlist».
В строке 23 мы начинаем блок try/except. Этот блок попытается выполнить некоторый код, и если он завершится неудачей или возникнет ошибка, он прервётся и перейдёт к блоку except ниже.
В строке 25 мы начинаем циклическую структуру «with». Эта циклическая структура продолжается до тех пор, пока условие после неё остаётся истинным. В данном случае мы используем функцию open для открытия списка паролей, и этот цикл будет продолжаться до тех пор, пока файл открыт или не будет достигнут конец файла.
В строке 27 мы начинаем цикл for, который будет перебирать каждый пароль и удалять все начальные и конечные пробелы с помощью функции strip.
В строке 30 мы подходим к сути взлома пароля. Сначала мы подключаемся к FTP-серверу.
ftp=ftplib.FTP(сервер)
Затем мы начинаем блок try/except, чтобы попробовать каждое слово пароля для имени пользователя, введенного пользователем выше.
ftp.login(имя пользователя, слово)
Если имя пользователя и пароль создают успешное соединение, выводится сообщение «Success!» с паролем, и соединение закрывается. В случае неудачи соединение переходит к следующему условию except.
Теперь, чтобы протестировать наш код, попробуйте запустить (зелёная кнопка над рабочей областью) этот взломщик паролей FTP на FTP-сервере в Metasploitable 2, используя учётную запись «msfadmin». Вы должны увидеть следующий вывод.
Когда пароль будет найден и FTP-сервер успешно подключен, выводится сообщение: «Успех! Вы подключились к FTP-серверу. Пароль: <password>».
Возвращайтесь, мои начинающие хакеры, поскольку мы продолжаем развивать наши навыки написания скриптов до уровня профессионального хакера!