[hacking tricks] Including password in runas command line

[hacking tricks] Including password in runas command line
Все пентестеры (и не только) эпизодически натыкаются на проблему, связанную с запуском локального процесса от имени другого пользователя из командной строки. К сожалению, поставляемая с виндой тулень   runas не спасает т.к. в ней отсутствует возможность передачи пароля в качестве аргумента. Такой способ:

C:WindowsSystem32>

C:WindowsSystem32> echo password | runas /u:user cmd


Увы, работал(ет) только на устаревших системах. Решение: использовать API функцию  CreateProcessWithLogonW . Код ниже, бинарь тут (md5:424872148d3e84ed99cedd5bfbb8740c)
name='more'>
#include <windows.h>
#include <stdio.h>
#include <userenv.h>

void wmain(int argc, WCHAR *argv[])
{
PROCESS_INFORMATION pi = {0};
STARTUPINFO si = {0};

ZeroMemory( &si, sizeof(STARTUPINFO) );
si.cb = sizeof(STARTUPINFO);
si.dwFlags |= STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.cb = sizeof(STARTUPINFO);

if (argc < 4)
{
wprintf(L"Usage: %s [user@domain] [password] [cmd]", argv[0]);
wprintf(L"
Example: %s adm@my.domain pass "cmd /c ipconfig >C:tempdiroutput.txt"", argv[0]);
return;
}
wprintf(L"Executed: %s", argv[3]);
wprintf(L"

");
if (!CreateProcessWithLogonW(argv[1], NULL, argv[2],
LOGON_WITH_PROFILE, NULL, argv[3],
CREATE_UNICODE_ENVIRONMENT, NULL, NULL,
&si, &pi)) wprintf(L"error");

CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
C:Temp>

C:Temp>runas.exe
Usage: runas.exe [user@domain] [password] [cmd]
Example: runas.exe adm@my.domain pass "cmd /c ipconfig >C:tempdiroutput.txt"

C:Temp>whoami
testadmin

C:Temp>runas.exe abc@test.local abc "cmd /c whoami >C:Tempt.txt"
Executed: cmd /c whoami >C:Tempt.txt

C:Temp>type t.txt
testabc

C:Temp>

Alt text