В этой статье займемся криптографией. Рассмотрим взлом соленого пароля с помощью брутфорс и последующее повышение привилегий в системе. Все это в рамках прохождения уязвимой машины RainyDay с площадки Hack The Box.
Еще по теме: Как подключиться и использовать Hack The Box
В предыдущей части, мы эксплуатировали уязвимость в API веб-прижения.
Взлом соленого пароля методом брутфорс
Проверим настройки sudoers в изменившемся контексте:
1 |
sudo -l |
Можно запустить от имени рута скрипт:
1 |
/opt/hash_system/hash_password.py |
Запускаем команду для теста, и нас просят ввести пароль.
В ответе получаем хеш bcrypt. Интересно, что если попробовать его пробрутить, то его прообразом не будет введенная нами строка test. Скорее всего, при хешировании используется соль. Но просмотреть скрипт мы не можем.
Так как мы на первоначальном этапе получили хеш пароля рута, возникло предположение, что если найти соль, то можно будет пробрутить и «соленый» пароль рута. Давайте попробуем ввести пустой пароль, чтобы хеш вычислялся только из соли.
Но получаем ошибку, так как проверяется длина введенного пароля.
Долго искать решение задачи не пришлось — я уже видел похожую идею в одном CTF. Дело в том, что bcrypt — это хеш, у которого максимальный размер хешируемой строки составляет 72 байта. То есть все байты после 72-го будут отсечены. Таким образом, мы могли бы ввести 71 известный нам байт, а 72-й — это первый символ добавленной соли. Затем мы перебираем этот единственный символ и задаем уже строку из 70 байт. Теперь будет добавлено два символа соли, один из которых мы знаем, и останется перебрать второй. Таким способом мы постепенно вытягиваем всю строку‑соль.
1 2 3 |
H1 = 72*'A' H2 = 71*'A' + S[0] H3 = 70*'A' + S[0] + S[1] |
В этой задаче есть одно усложнение — регламентированная длина строки до 30 символов включительно. Здесь стоит проявить смекалку. Заметьте, что хешируется строка до 72-го байта, а проверяется строка до 30 символов. Таким образом, если мы будем использовать кодировку, где каждый символ обозначается 3 байтами, то в 30 символах мы сможем передать аж 90 байт!
Чтобы найти такие символы, можно воспользоваться таблицей. Я взял символ ェ.
Копируем из таблицы выбранный символ и передаем в качестве пароля строку из 24 таких символов.
Получаем хеш и проверяем наше предположение. Для этого записываем введенную строку в файл и передаем его в качестве словаря для перебора.
1 |
hashcat -m 3200 hash.txt wordlist.txt |
В итоге строка была обнаружена, и мы можем начать вытягивать соль. Передаем программе строку из 23 символов ェ и двух обычных букв A. Так длина строки составит 25 символов, но 71 байт.
Теперь составим словарь для полученного хеша. Для этого к введенной нами строке добавим по очереди все возможные символы и запишем в словарь.
1 2 3 |
s = 'ェェェェェェェェェェェェェェェェェェェェェェェAA' for i in range(0,255): print(s + chr(i)) |
Составленный список передаем в hashcat и отправляем хеш на брут.
1 |
hashcat -m 3200 hash.txt wordlist.txt |
И получаем первый символ соли — H. Теперь повторяем наш трюк и передаем программе 24 символа (71 байт).
Теперь обновляем наш список для перебора. Мы знаем первый символ соли, второй будем перебирать.
1 2 3 4 |
s = 'ェェェェェェェェェェェェェェェェェェェェェェェAH' for i in range(0,255): print(s + chr(i)) hashcat -m 3200 hash.txt wordlist.txt |
У нас уже есть два символа соли. Продолжаем дальше получать по одному символу. Я перейду сразу к последней итерации, где мы уже получили всю соль ( H34vyR41n). Так как последний символ будет 0 байт, hashcat отобразит прообраз в шестнадцатеричном виде.
1 2 3 |
s = 'ェェェェェェェェェェェェェェェェェェェェAAH34vyR41n' for i in range(0,255): print(s + chr(i)) |
Переходим к бруту хеша пароля рута. Возьмем словарь rockyou.txt и добавим соль к каждому слову.
1 |
sed 's/$/H34vyR41n/' rockyou.txt > new_rockyou.txt |
Отправляем хеш на перебор по новому словарю и спустя некоторое время получаем пароль!
1 |
hashcat -m 3200 hash.txt wordlist.txt |
Через su меняем пользователя в системе и авторизуемся как root с паролем:
1 |
246813579 |
Итак, мы взломали соленый пароль и получили флаг рута.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Прохождение Hack The Box Seal
- Bad-PDF. Кража NTLM-хеша с помощью PDF-файла
- Радужные таблицы и RainbowCrack для взлома хешей на Kali