Все пентестеры (и не только) эпизодически натыкаются на проблему, связанную с запуском локального процесса от имени другого пользователя из командной строки. К сожалению, поставляемая с виндой тулень runas не спасает т.к. в ней отсутствует возможность передачи пароля в качестве аргумента. Такой способ:
C:\Windows\System32>
C:\Windows\System32> echo password | runas /u:user cmd
Увы, работал(ет) только на устаревших системах. Решение: использовать API функцию CreateProcessWithLogonW. Код ниже, бинарь тут (md5:424872148d3e84ed99cedd5bfbb8740c)
#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"\nExample: %s adm@my.domain pass \"cmd /c ipconfig >C:\\\\tempdir\\\\output.txt\"", argv[0]); return; } wprintf(L"Executed: %s", argv[3]); wprintf(L"\n\n"); 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:\\tempdir\\output.txt"
C:\Temp>whoami
test\admin
C:\Temp>runas.exe abc@test.local abc "cmd /c whoami >C:\\Temp\\t.txt"
Executed: cmd /c whoami >C:\\Temp\\t.txt
C:\Temp>type t.txt
test\abc
C:\Temp>
Уж не знаю почему, но у меня VC2013 потребовала приведения типов для &si, поэтому строчка стала выглядеть так:
ОтветитьУдалитьif (!CreateProcessWithLogonW(argv[1], NULL, argv[2], LOGON_WITH_PROFILE, NULL, argv[3], CREATE_UNICODE_ENVIRONMENT, NULL, NULL, (LPSTARTUPINFOW)&si, &pi)) wprintf(L"Error: %d\n", GetLastError() );
else wprintf(L"Success!\n");
Ну и диагностика не будет лишней, поэтому ошибку вывел.
Вариант предлагаемый самими мелкомягкими тоже вполне работоспособен:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682431%28v=vs.85%29.aspx
Но приведенный Димой лично мне нравится больше. Спасибо!