Се­год­ня мы с тобой попен­тестим веб‑сер­вер на Windows: научим­ся манипу­лиро­вать DNS, орга­низу­ем утеч­ку хеша NTLM, получим учет­ные дан­ные управля­емых записей AD и про­экс­плу­ати­руем огра­ничен­ное делеги­рова­ние Kerberos, что­бы повысить при­виле­гии. Это поз­волит нам прой­ти машину Intelligence с пло­щад­ки Hack The Box.

warning

Под­клю­чать­ся к машинам с HTB рекомен­дует­ся толь­ко через VPN. Не делай это­го с компь­юте­ров, где есть важ­ные для тебя дан­ные, так как ты ока­жешь­ся в общей сети с дру­гими учас­тни­ками.

 

Разведка

 

Сканирование портов

До­бав­ляем IP-адрес машины в /etc/hosts:

10.10.10.248 intelligence.htb

И запус­каем ска­ниро­вание пор­тов.

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

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

На­ибо­лее извес­тный инс­тру­мент для ска­ниро­вания — это Nmap. Улуч­шить резуль­таты его работы ты можешь при помощи сле­дующе­го скрип­та.

#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1

Он дей­ству­ет в два эта­па. На пер­вом про­изво­дит­ся обыч­ное быс­трое ска­ниро­вание, на вто­ром — более тща­тель­ное ска­ниро­вание, с исполь­зовани­ем име­ющих­ся скрип­тов (опция -A).

Результат работы скрипта
Ре­зуль­тат работы скрип­та
Результат работы скрипта (продолжение)
Ре­зуль­тат работы скрип­та (про­дол­жение)

Ви­дим мно­жес­тво откры­тых пор­тов, что для Windows впол­не харак­терно:

  • порт 53 — служ­ба DNS. Порт учас­тву­ет в трас­товых отно­шени­ях меж­ду домена­ми;
  • порт 80 (HTTP) — веб‑сер­вер Microsoft IIS/10.0;
  • порт 88 — служ­ба Kerberos. Так­же исполь­зует­ся в довери­тель­ных отно­шени­ях меж­ду лесами;
  • порт 135 — служ­ба уда­лен­ного вызова про­цедур (Microsoft RPC). Исполь­зует­ся для опе­раций вза­имо­дей­ствия кон­трол­лер — кон­трол­лер и кон­трол­лер — кли­ент;
  • порт 139 — служ­ба сеан­сов NetBIOS, NetLogon;
  • порт 389 — служ­ба LDAP;
  • порт 445 — служ­ба SMB;
  • порт 464 — служ­ба сме­ны пароля Kerberos;
  • порт 593 (HTTP-RPC-EPMAP) — исполь­зует­ся в служ­бах DCOM и MS Exchange;
  • порт 636 — LDAP с шиф­ровани­ем SSL или TLS;
  • порт 3268 (LDAP) — для дос­тупа к Global Catalog от кли­ента к кон­трол­леру;
  • порт 3269 (LDAPS) — для дос­тупа к Global Catalog от кли­ента к кон­трол­леру через защищен­ное соеди­нение;
  • порт 5985 — отве­чает за служ­бу уда­лен­ного управле­ния WinRM;
  • порт 9389 — веб‑служ­бы AD DS.

Еще в сер­тифика­те LDAP находим новое домен­ное имя dc.intelligence.htb, поэто­му обно­вим запись в фай­ле /etc/hosts:

10.10.10.248 intelligence.htb dc.intelligence.htb

Пер­вым делом запус­тим скрип­ты Nmap для получе­ния информа­ции с DNS (nmap -p53 --script=dns* intelligence.htb), но из это­го ничего не выш­ло. Авто­ризо­вать­ся как ано­ним в SMB и LDAP не получи­лось. Поэто­му нам нуж­но про­бивать веб.

Вни­матель­но осмотрим­ся на сай­те и поищем цен­ную инфу. Сам сайт на пер­вый взгляд кажет­ся прос­тень­ким. Из инте­рес­ного — на пер­вой стра­нице находим два PDF-докумен­та.

Стартовая страница сайта
Стар­товая стра­ница сай­та
 

OSINT

В докумен­тах ничего важ­ного не обна­ружи­лось. Но из любого кур­са по OSINT (раз­ведка на осно­ве откры­тых источни­ков) ты узна­ешь, что в докумен­тах самое инте­рес­ное — это метадан­ные, осо­бен­но атри­буты вро­де «соз­датель» или «вла­делец». Они могут рас­кры­вать име­на поль­зовате­лей, которые потом мож­но исполь­зовать для дос­тупа к учет­кам.

Для получе­ния мета­информа­ции мож­но исполь­зовать exiftool. Что­бы уста­новить и исполь­зовать ее, пишем:

sudo apt install exiftool
exiftool *
Получение метаинформации из документов
По­луче­ние мета­информа­ции из докумен­тов
 

Точка входа

 

Перечисление аккаунтов

Мы наш­ли два име­ни, а зна­чит, можем поис­кать акка­унты через аутен­тифика­цию Kerberos. Дело в том, что Kerberos нам сооб­щит, если поль­зовате­ля нет в базе. Нуж­но лишь сфор­мировать все воз­можные наз­вания акка­унтов и про­сеивать их. К при­меру, для пары name surname мож­но сос­тавить такие име­на:

Administrator
Guest
name
namesurname
name.surname
names
name.s
sname
s.name
surname
surnamename
surname.name
surnamen
surname.n
nsurname
n.surname

Что­бы сос­тавлять юзер­ней­мы по такому шаб­лону, исполь­зуем сле­дующий скрипт на Python:

#!/usr/bin/python3
names = ["Jose Williams", "William Lee"]
list = ["Administrator", "Guest"]
for name in names:
n1, n2 = name.split(' ')
for x in [
n1, n1 + n2, n1 + "." + n2, n1 + n2[0], n1 + "." + n2[0], n2[0] + n1, n2[0] + "." + n1,
n2, n2 + n1, n2 + "." + n1, n2 + n1[0], n2 + "." + n1[0], n1[0] + n2, n1[0] + "." + n2
]:
list.append(x)
for n in list:
print(n)

А теперь исполь­зуем kerbrute для перебо­ра имен. Ука­зыва­ем опцию перечис­ления поль­зовате­лей и переда­ем их спи­сок.

./kerbrute_linux_amd64 userenum --dc intelligence.htb -d intelligence.htb namelist.txt
Найденные пользователи
Най­ден­ные поль­зовате­ли

Име­на поль­зовате­лей, ука­зан­ные в докумен­тах, и ока­зались наз­вани­ями акка­унтов. Даль­ше, что бы я ни поп­робовал (даже брут паролей), никуда прод­винуть­ся не выш­ло. Видимо, что‑то упус­тили на сай­те.

Воз­вра­щаем­ся к вебу, на этот раз воору­жив­шись Burp Suite. Бла­года­ря Burp Proxy обра­щаем вни­мание на мес­то хра­нения фай­лов и их наз­вания.

Вкладка Burp Proxy
Вклад­ка Burp Proxy

Име­на фай­лов — это даты, а зна­чит, мы можем попытать­ся най­ти и дру­гие докумен­ты. Для это­го отправ­ляем зап­рос в Burp Intruder, что­бы переб­рать и номер месяца, и день.

Burp Intruder — вкладка Position
Burp Intruder — вклад­ка Position
Burp Intruder — вкладка Payload (payload 1)
Burp Intruder — вклад­ка Payload (payload 1)
Burp Intruder — вкладка Payload (payload 2)
Burp Intruder — вклад­ка Payload (payload 2)

Сор­тиру­ем резуль­тат по коду отве­та, что­бы най­ти докумен­ты сре­ди сооб­щений об ошиб­ках.

Результат атаки
Ре­зуль­тат ата­ки

Ос­талось их ска­чать. Сна­чала сох­раним нуж­ные нам наг­рузки средс­тва­ми Burp. Для это­го отме­тим в филь­тре, что нас инте­ресу­ет толь­ко код отве­та 200, а затем выбира­ем Save → Results table.

Сохранение нагрузок в файл
Сох­ранение наг­рузок в файл

Пос­тавим в качес­тве раз­делите­ля про­бел и выберем толь­ко две наг­рузки. Я сох­ранил наг­рузки в файл save.txt, а потом ска­чал все эти докумен­ты через wget.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Подписаться
Уведомить о
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии