Взлом соленого пароля методом брутфорс

Взлом соленого пароля методом брутфорс

В этой статье займемся крип­тогра­фией. Рассмотрим взлом соленого пароля с помощью брутфорс и последующее повышение при­виле­гий в сис­теме. Все это в рамках прохождения уязвимой машины RainyDay с пло­щад­ки Hack The Box.

Еще по теме: Как подключиться и использовать Hack The Box

В предыдущей части, мы эксплуатировали уязвимость в API веб-прижения.

Взлом соленого пароля методом брутфорс

Проверим нас­трой­ки sudoers в изме­нив­шемся кон­тек­сте:

Нас­трой­ки sudoers
Нас­трой­ки sudoers

Можно запус­тить от имени рута скрипт:

Запус­каем коман­ду для тес­та, и нас про­сят ввес­ти пароль.

По­луче­ние клас­са object

В отве­те получа­ем хеш bcrypt. Инте­рес­но, что если поп­робовать его проб­рутить, то его про­обра­зом не будет вве­ден­ная нами стро­ка test. Ско­рее все­го, при хеширо­вании исполь­зует­ся соль. Но прос­мотреть скрипт мы не можем.

Про­вер­ка фай­ла hash_password.py
Про­вер­ка фай­ла hash_password.py

Так как мы на пер­воначаль­ном эта­пе получи­ли хеш пароля рута, воз­никло пред­положе­ние, что если най­ти соль, то мож­но будет проб­рутить и «соленый» пароль рута. Давайте поп­робу­ем ввес­ти пус­той пароль, что­бы хеш вычис­лялся толь­ко из соли.

Ошиб­ка при пус­том пароле
Ошиб­ка при пус­том пароле

Но получа­ем ошиб­ку, так как про­веря­ется дли­на вве­ден­ного пароля.

Дол­го искать решение задачи не приш­лось — я уже видел похожую идею в одном CTF. Дело в том, что bcrypt — это хеш, у которо­го мак­сималь­ный раз­мер хеширу­емой стро­ки сос­тавля­ет 72 бай­та. То есть все бай­ты пос­ле 72-го будут отсе­чены. Таким обра­зом, мы мог­ли бы ввес­ти 71 извес­тный нам байт, а 72-й — это пер­вый сим­вол добав­ленной соли. Затем мы переби­раем этот единс­твен­ный сим­вол и зада­ем уже стро­ку из 70 байт. Теперь будет добав­лено два сим­вола соли, один из которых мы зна­ем, и оста­нет­ся переб­рать вто­рой. Таким спо­собом мы пос­тепен­но вытяги­ваем всю стро­ку‑соль.

В этой задаче есть одно усложне­ние — рег­ламен­тирован­ная дли­на стро­ки до 30 сим­волов вклю­читель­но. Здесь сто­ит про­явить сме­кал­ку. Заметьте, что хеширу­ется стро­ка до 72-го бай­та, а про­веря­ется стро­ка до 30 сим­волов. Таким обра­зом, если мы будем исполь­зовать кодиров­ку, где каж­дый сим­вол обоз­нача­ется 3 бай­тами, то в 30 сим­волах мы смо­жем передать аж 90 байт!

Что­бы най­ти такие сим­волы, мож­но вос­поль­зовать­ся таб­лицей. Я взял сим­вол .

Таб­лица UTF8-3byte
Таб­лица UTF8-3byte
Вы­чис­ление хеша
Вы­чис­ление хеша

Ко­пиру­ем из таб­лицы выб­ранный сим­вол и переда­ем в качес­тве пароля стро­ку из 24 таких сим­волов.

По­луча­ем хеш и про­веря­ем наше пред­положе­ние. Для это­го записы­ваем вве­ден­ную стро­ку в файл и переда­ем его в качес­тве сло­варя для перебо­ра.

На­хож­дение про­обра­за хеша с помощью hashcat
На­хож­дение про­обра­за хеша с помощью hashcat

В ито­ге стро­ка была обна­руже­на, и мы можем начать вытяги­вать соль. Переда­ем прог­рамме стро­ку из 23 сим­волов и двух обыч­ных букв A. Так дли­на стро­ки сос­тавит 25 сим­волов, но 71 байт.

Вы­чис­ление хеша
Вы­чис­ление хеша

Те­перь сос­тавим сло­варь для получен­ного хеша. Для это­го к вве­ден­ной нами стро­ке добавим по оче­реди все воз­можные сим­волы и запишем в сло­варь.

Сос­тавлен­ный спи­сок переда­ем в hashcat и отправ­ляем хеш на брут.

На­хож­дение про­обра­за хеша с помощью hashcat
На­хож­дение про­обра­за хеша с помощью hashcat

И получа­ем пер­вый сим­вол соли — H. Теперь пов­торя­ем наш трюк и переда­ем прог­рамме 24 сим­вола (71 байт).

Вы­чис­ление хеша
Вы­чис­ление хеша

Те­перь обновля­ем наш спи­сок для перебо­ра. Мы зна­ем пер­вый сим­вол соли, вто­рой будем переби­рать.

На­хож­дение про­обра­за хеша с помощью hashcat
На­хож­дение про­обра­за хеша с помощью hashcat

У нас уже есть два сим­вола соли. Про­дол­жаем даль­ше получать по одно­му сим­волу. Я перей­ду сра­зу к пос­ледней ите­рации, где мы уже получи­ли всю соль ( H34vyR41n). Так как пос­ледний сим­вол будет 0 байт, hashcat отоб­разит про­образ в шес­тнад­цатерич­ном виде.

На­хож­дение про­обра­за хеша с помощью hashcat
На­хож­дение про­обра­за хеша с помощью hashcat

Пе­рехо­дим к бру­ту хеша пароля рута. Возь­мем сло­варь rockyou.txt и добавим соль к каж­дому сло­ву.

От­прав­ляем хеш на перебор по новому сло­варю и спус­тя некото­рое вре­мя получа­ем пароль!

На­хож­дение про­обра­за хеша с помощью hashcat
На­хож­дение про­обра­за хеша с помощью hashcat

Че­рез su меня­ем поль­зовате­ля в сис­теме и авто­ризу­емся как root с паролем:

Взлом соленого пароля

Итак, мы  взломали соленый пароль и получили флаг рута.

ПОЛЕЗНЫЕ ССЫЛКИ:

Дима (Kozhuh)

Эксперт в кибербезопасности. Работал в ведущих компаниях занимающихся защитой и аналитикой компьютерных угроз.

Добавить комментарий