Notepad++ Plugin Autoload Persistence & Execution
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Notepad++ će autoload every plugin DLL found under its plugins subfolders pri pokretanju. Ubacivanje malicioznog plugin-a u bilo koju writable Notepad++ installation daje code execution unutar notepad++.exe svaki put kada se editor pokrene, što se može zloupotrebiti za persistence, prikriveno initial execution, ili kao in-process loader ako je editor pokrenut elevated.
Writable plugin locations
- Standard install:
C:\Program Files\Notepad++\plugins\<PluginName>\<PluginName>.dll(obično zahteva administratorska prava za pisanje). - Writable options for low-privileged operators:
- Use the portable Notepad++ build in a user-writable folder.
- Copy
C:\Program Files\Notepad++to a user-controlled path (e.g.,%LOCALAPPDATA%\npp\) and runnotepad++.exefrom there. - Each plugin gets its own subfolder under
pluginsand is loaded automatically at startup; menu entries appear under Plugins.
Plugin load points (execution primitives)
Notepad++ očekuje specifične exported functions. Sve su pozvane tokom inicijalizacije, pružajući više površina za izvršavanje:
DllMain— pokreće se odmah pri učitavanju DLL-a (prva tačka izvršavanja).setInfo(NppData)— poziva se jednom pri učitavanju da obezbedi Notepad++ handle-ove; tipično mesto za registraciju stavki menija.getName()— vraća ime plugin-a prikazano u meniju.getFuncsArray(int *nbF)— vraća komande menija; čak i ako je prazno, poziva se tokom pokretanja.beNotified(SCNotification*)— prima događaje editora (otvaranje/izmena fajla, UI događaji) za kontinuirane okidače.messageProc(UINT, WPARAM, LPARAM)— handler poruka, koristan za razmenu većih količina podataka.isUnicode()— kompatibilnosni flag koji se proverava pri učitavanju.
Većina export-a može biti implementirana kao stubs; izvršavanje može nastupiti iz DllMain ili bilo kog callback-a iznad tokom autoload.
Minimal malicious plugin skeleton
Kompajlirajte DLL sa očekivanim export-ima i stavite ga u plugins\\MyNewPlugin\\MyNewPlugin.dll pod zapisivim Notepad++ folderom:
BOOL APIENTRY DllMain(HMODULE h, DWORD r, LPVOID) { if (r == DLL_PROCESS_ATTACH) MessageBox(NULL, TEXT("Hello from Notepad++"), TEXT("MyNewPlugin"), MB_OK); return TRUE; }
extern "C" __declspec(dllexport) void setInfo(NppData) {}
extern "C" __declspec(dllexport) const TCHAR *getName() { return TEXT("MyNewPlugin"); }
extern "C" __declspec(dllexport) FuncItem *getFuncsArray(int *nbF) { *nbF = 0; return NULL; }
extern "C" __declspec(dllexport) void beNotified(SCNotification *) {}
extern "C" __declspec(dllexport) LRESULT messageProc(UINT, WPARAM, LPARAM) { return TRUE; }
extern "C" __declspec(dllexport) BOOL isUnicode() { return TRUE; }
- Sastavite DLL (Visual Studio/MinGW).
- Kreirajte podfolder za plugin pod
pluginsi ubacite DLL unutra. - Ponovo pokrenite Notepad++; DLL se učitava automatski, izvršavajući
DllMaini sledeće callbacks.
Reflective loader plugin pattern
Zlonamerni plugin može pretvoriti Notepad++ u reflective DLL loader:
- Prikažite minimalni UI/menijski unos (npr. “LoadDLL”).
- Prihvata file path ili URL za preuzimanje payload DLL-a.
- Reflectively map the DLL into the current process and invoke an exported entry point (e.g., a loader function inside the fetched DLL).
- Prednost: ponovna upotreba benigno-izgledajućeg GUI procesa umesto pokretanja novog loader-a; payload nasleđuje integritet
notepad++.exe(uključujući povišene kontekste). - Mane: ispuštanje unsigned plugin DLL na disk je bučno; razmotrite piggybacking na postojećim trusted plugin-ima ako su prisutni.
Napomene za detekciju i hardening
- Blokirajte ili nadgledajte writes to Notepad++ plugin directories (uključujući portable copies u user profilima); omogućite controlled folder access ili application allowlisting.
- Upozorite na new unsigned DLLs pod
pluginsi neobičnu child processes/network activity odnotepad++.exe. - Sprovodite instalaciju plugin-a samo preko Plugins Admin, i ograničite izvršavanje portable kopija sa nepouzdanih putanja.
References
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.


