Bash-скриптинг: отладка нашего скрипта для взлома паролей

  • Автор темы Автор темы LeSh1y777
  • Дата начала Дата начала

LeSh1y777

Пользователь
Регистрация
25/9/25
Сообщения
5,682
Репутация
49
Лайки
153
Депозит
-8.95$
Hackers-Arise ранее публиковал статьи об основах написания скриптов на Bash. За это время важность этого навыка не уменьшилась, поэтому сегодня мы рассмотрим, как отлаживать код. И поскольку лучший способ обучения — это практика, мы создадим простой инструмент для взлома паролей, вдохновлённый Джоном Потрошителем.

bash_debug_logo.avif

Bash (Bourne Again SHell) был создан Брайаном Фоксом в 1989 году как свободная программная замена Bourne Shell. С тех пор он стал оболочкой по умолчанию в большинстве Unix-подобных систем, включая Linux и macOS. Скрипты Bash широко используются для автоматизации, системного администрирования и создания простых инструментов, подобных тому, что мы создадим в этом руководстве.

Давайте начнём создавать наш скрипт. Мы разработаем его шаг за шагом, а затем воспользуемся методами отладки, чтобы улучшить его и исправить любые неполадки.

Концепция нашего скрипта проста. Он принимает на вход хеш пароля и словарь паролей. Затем скрипт хеширует каждое слово из словаря и сравнивает полученные хеш-значения с предоставленным хешем. Если совпадение найдено, скрипт выдаёт соответствующий пароль.

Шаг

Сначала укажите, что скрипт должен запускаться с помощью Bash. Затем создайте функцию для хеширования каждой записи в словаре с использованием MD5.

bash_debug_initial_script.avif

Где:

echo -n «$1» — эта команда выводит значение первого аргумента ($1) без добавления символа новой строки.

md5sum – эта команда вычисляет MD5-хеш входных данных, создавая 128-битный хеш, представленный в виде 32-символьного шестнадцатеричного числа.

awk '{print $1}' – эта команда извлекает и печатает только первое поле ($1), которое представляет собой сам хеш MD5.

После этого скрипт проверяет, указано ли ровно два аргумента. Если нет, он выводит сообщение об использовании и завершает работу. Если указано правильное количество аргументов, скрипт присваивает их переменным.

bash_debug_argc.avif

Далее мы создадим функцию для проверки существования файла словаря, содержащего пароли.

bash_debug_check_dictionary.avif

Где:

-f это тестовый оператор, который возвращает true, если указанный файл существует.

! отрицает проверку, поэтому [! -f “$dictionary_file” ] имеет значение true, если файл не существует.

Далее давайте разработаем суть процесса взлома паролей.

bash_debug_core_process.avif

while IFS= read -r password; do – Запускает цикл while, который считывает каждую строку из входного файла. IFS= (внутренний разделитель полей) гарантирует сохранение начальных и конечных пробелов, а опция -r предотвращает экранирование обратной косой черты.

if [ “$(generate_hash “$password”)” = “$password_hash” ]; then – Внутри цикла скрипт вызывает функцию generate_hash, передавая текущий пароль в качестве аргумента. Эта функция генерирует хеш пароля. Если сгенерированный хеш совпадает с целевым ($password_hash), скрипт выводит сообщение «Hash cracked: $password» и завершает работу с кодом состояния 0, что означает успешное выполнение.

echo «Пароль не найден в словаре» — если цикл завершается без совпадений (т.е. целевой хеш не совпадает ни с одним хешем, сгенерированным из записей словаря), выводится это сообщение, указывающее на то, что пароль не найден. После этого скрипт завершает работу с кодом состояния 1, что означает, что взломать хеш не удалось.

Шаг

Теперь сохраните код и сделайте его исполняемым. Затем протестируйте скрипт с использованием примера пароля и словаря:

kali> echo «пароль\n123456\nсекрет\nбезопасный\nqwerty\n» > dictionary.txt

bash_debug_data.avif

Сгенерируйте тестовый хеш пароля:

кали> echo -n «qwerty» | md5сумма

bash_debug_passwords_hash.avif

Запустите скрипт:

kali> ./ bashcracker.sh “d8578edf8458ce06fbc5bb76a58c5ca4” dictionary.txt

bash_debug_run.avif

Шаг

Теперь, когда у нас есть исходный сценарий, давайте рассмотрим некоторые методы отладки, чтобы улучшить его и исправить любые потенциальные проблемы.

  • Один из простейших методов отладки — использование операторов echo для вывода значений переменных и отслеживания хода выполнения скрипта. Добавим отладочный вывод:
bash_debug_output.avif

В результате при запуске скрипта вы увидите следующий вывод:

bash_debug_result.avif

  • Bash предлагает встроенную функцию трассировки, которую можно включить с помощью set -x. Эта функция выводит каждую команду и её аргументы по мере их выполнения. Вы можете выборочно включить эту функцию в определённых разделах кода с помощью set -x и отключить её с помощью set +x там, где она не нужна. Например:
bash_debug_plus_x.avif

Это позволяет нам детально проанализировать сценарий.

bash_debug_analyze.avif

  • Мы можем использовать команду trap для перехвата ошибок и выполнения операций очистки.
bash_debug_cleanup.avif

Команда trap в скрипте определяет функцию cleanup(), которая выполняется при каждом завершении скрипта, независимо от того, был ли он выполнен успешно или нет. Связывая функцию cleanup() с сигналом EXIT, она обеспечивает вызов функции после завершения скрипта.

Внутри функции cleanup() скрипт сначала проверяет статус завершения последней команды. Если этот статус ненулевой, что указывает на ошибку, функция выводит сообщение, информирующее пользователя об ошибке.

Кроме того, функцию cleanup() можно использовать для выполнения необходимых операций очистки, таких как удаление временных файлов. Это гарантирует, что скрипт оставит чистую среду после выполнения, даже если возникнут ошибки.

Наконец, функция cleanup() завершает работу скрипта с соответствующим статусом выхода, гарантируя, что общее выполнение скрипта будет отчитано точно.

Краткое содержание

В руководстве рассматриваются основные принципы структуры и функции скриптов Bash, включая обработку файлов и входных данных.
 
Назад
Сверху Снизу