Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
RightHand-Persistence — Tecnica di persistenza su Windows tramite COM | Kitploit
Strumenti/GitHubGitHub/i014n/righthand-persistence
Meccanismi di PersistenzaExploitPost-ExploitApprendimento e FormazioneRed Teaming
GitHubi014n/righthand-persistence

RightHand-Persistence

Tecnica di persistenza su Windows tramite COM

Vedi Repository
90113 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

RightHand Persistence

ispirato da CVE-2026-21509

Gestore del menu contestuale COM in C++ per la persistenza

Un'implementazione di esempio di un gestore del menu contestuale di Windows utilizzando C++ e COM, che dimostra una tecnica di persistenza furtiva. Registrando un oggetto COM personalizzato, il tuo codice viene eseguito ogni volta che un utente fa clic con il tasto destro su obiettivi specifici (file, cartelle o sfondi) in Windows Explorer.

Disclaimer: Questo progetto è destinato esclusivamente a scopi educativi e di ricerca. Le tecniche qui dimostrate possono essere utilizzate per scopi dannosi. L'autore non approva l'uso di questo codice per attività illegali. Sii responsabile e usa questa conoscenza in modo etico.


POC

poc

Per iniziare

Prerequisiti

  • Un compilatore C++ (ad esempio MSVC da Visual Studio o MinGW-w64)
  • Windows SDK
  • Macchina virtuale di test (per registrazione ed esecuzione sicure)

La mia configurazione

  • IDE: Visual Studio 2019
  • VM Sviluppo: Windows 10 x64 (Build 19045)
  • VM Test: Windows 10 x64 / Windows 11 x64

Architettura del progetto

root@kitploit:~
                                       DllMain.cpp     
                                +-----------------------+
                                |  DLL Template Project |
                                +-------+-------+-------+
                            ____/           |        \_____
                            |               |             |
                            v               v             v
                    +------------+  +----------------+  +--------------+
                    |   Define   |  | MyClassFactory |  |   Define     |
    clsid_defined.h |   CLSID    |  +----------------+  |   Export     | Source.def
                    +------------+     ClassFactory     |  Functions   |
                                          class         +--------------+
                                            |
                                            |
                                            v
                                     +--------------+    
                                     | MyMenuHandler|
                                     +--------------+         
                                      MyMenuHandler
                                          class

1. DllMain.cpp

Contiene le funzioni standard richieste da un oggetto COM per registrare e deregistrare la DLL.

  • DllRegisterServer(): Scrive i percorsi del registro corrispondenti alle estensioni/sfondi dei file di destinazione. Eseguita quando la DLL viene registrata.
root@kitploit:~
STDAPI DllRegisterServer() {
    std::wstring clsidString = MyStringFromCLSID(CLSID_DecrypShellExtensionx64);
    std::wstring dllPath = MyGetModuleFilename();

    // 1. Register the COM Class (CLSID)
    std::wstring clsidBaseKey = L"SOFTWARE\\Classes\\CLSID\\" + clsidString;
    SetRegistryKey(HKEY_LOCAL_MACHINE, clsidBaseKey, L"", L"MyMenuHandler Object");

    // 2. Register the DLL Path and Threading Model
    std::wstring inprocKey = clsidBaseKey + L"\\InprocServer32";
    SetRegistryKey(HKEY_LOCAL_MACHINE, inprocKey, L"", dllPath);
    SetRegistryKey(HKEY_LOCAL_MACHINE, inprocKey, L"ThreadingModel", L"Apartment");

    // 3. Register for all Shell Contexts
    // Array of paths to cover Files, Folders, Backgrounds, and Desktop
    std::wstring handlerPaths[] = {
        L"SOFTWARE\\Classes\\*\\shellex\\ContextMenuHandlers\\",
        L"SOFTWARE\\Classes\\Directory\\shellex\\ContextMenuHandlers\\",
        L"SOFTWARE\\Classes\\Directory\\Background\\shellex\\ContextMenuHandlers\\",
        L"SOFTWARE\\Classes\\DesktopBackground\\shellex\\ContextMenuHandlers\\"
    };

    for (const auto& path : handlerPaths) {
        std::wstring fullPath = path + L"MyMenuHandler"; // Replace with your handler's name
        SetRegistryKey(HKEY_LOCAL_MACHINE, fullPath, L"", clsidString);
    }

    // 4. Register in the Approved list (Required for many Windows versions)
    std::wstring approvedKey = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved";
    SetRegistryKey(HKEY_LOCAL_MACHINE, approvedKey, clsidString, L"MyMenuHandler");

    // 5. Notify the Shell that things have changed
    SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);

    return S_OK;
}
  • DllUnregisterServer(): Pulisce il registro. Chiamata quando la DLL viene deregistrata.

2. MyClassFactory

Necessario per istanziare l'oggetto COM. Maggiori informazioni sulle class factory.

3. Clsid_defined.h

Contiene il GUID con cui l'applicazione verrà registrata in Explorer. Puoi generare un nuovo GUID usando guidgen.exe di Visual Studio o un Generatore GUID online.

root@kitploit:~
// {CEF1AA1B-42F7-4A54-AF46-BCEE5B3FE6BF}
DEFINE_GUID(CLSID_DecrypShellExtensionx64, 0xcef1aa1b, 0x42f7, 0x4a54, 0xaf, 0x46, 0xbc, 0xee, 0x5b, 0x3f, 0xe6, 0xbf);

4. Source.def

Il file di definizione del modulo. Questo determina quali funzioni la DLL esporta. Maggiori informazioni sui file .DEF.

root@kitploit:~
EXPORTS
    DllGetClassObject PRIVATE
    DllCanUnloadNow PRIVATE
    DllRegisterServer PRIVATE
    DllUnregisterServer PRIVATE

5. MyMenuHandler.cpp

La classe principale che implementa IShellExtInit e IContextMenu. Qui definisci le tue azioni personalizzate.

  • MyContextMenuHandler::Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject* pdtobj, HKEY hkeyProgId) Chiamato ogni volta che si fa clic con il tasto destro sul target registrato. Utilizzato per analizzare quale file o cartella è stato cliccato.
root@kitploit:~
HRESULT MyContextMenuHandler::Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject* pdtobj, HKEY hkeyProgId)
{
    MessageBoxA(NULL, "Initialize Called!", "Debug", MB_OK);

    // 1. Check if we clicked on a FILE/FOLDER
    if (pdtobj)
    {
        STGMEDIUM medium;
        FORMATETC fe = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
        if (SUCCEEDED(pdtobj->GetData(&fe, &medium)))
        {
            DragQueryFileA((HDROP)medium.hGlobal, 0, m_szFile, MAX_PATH);
            ReleaseStgMedium(&medium);
            return S_OK; // Success!
        }
    }

    // 2. Check if we clicked the BACKGROUND (pidlFolder)
    if (pidlFolder)
    {
        if (SHGetPathFromIDListA(pidlFolder, m_szFile))
        {
            return S_OK; // Success!
        }
    }

    // 3. Fallback: If we got neither, still return S_OK to show the menu.
    // You just won't have a path populated in m_szFile.
    return S_OK;
}
  • MyContextMenuHandler::InvokeCommand(LPCMINVOKECOMMANDINFO picp) Chiamato quando l'utente fa clic sull'opzione personalizzata specifica dal menu contestuale. Qui viene eseguito il tuo payload di persistenza o azione personalizzata.

Test

Sulla macchina virtuale di destinazione, copia la DLL compilata ed esegui i seguenti comandi:

1. Registrazione

Registra la DLL utilizzando i binari standard di Windows.

root@kitploit:~
regsvr32.exe RightHandPersistence.dll

2. Riavvia Explorer

Riavvia il processo explorer.exe per assicurarsi che carichi la nuova estensione shell in memoria.

root@kitploit:~
taskkill /f /im explorer.exe & start explorer.exe

3. Deregistrazione

Per rimuovere il gestore del menu contestuale e pulire il registro, usa il flag /u con regsvr32.exe. Questo richiama la tua funzione DllUnregisterServer.

root@kitploit:~
regsvr32.exe /u RightHandPersistence.dll

Personalizzazione

1. Destinazione di posizioni specifiche

Windows classifica lo "spazio vuoto" in modo diverso dai file. Per colpire lo sfondo, mappa le tue chiavi di registro in queste posizioni specifiche.

Maggiori dettagli su come mappare le estensioni si trovano nella documentazione Microsoft sui menu contestuali della shell.

2. Creazione di comandi di menu personalizzati

Puoi specificare un testo personalizzato per il menu (ad esempio "Copia personalizzata" o "Esegui diagnostica") implementando il metodo IContextMenu::QueryContextMenu. Cliccando su questo testo personalizzato si attiva la tua logica all'interno di IContextMenu::InvokeCommand.


Riferimenti

  • Creazione di gestori di menu di scelta rapida (Microsoft Learn)
  • Interfaccia IShellExtInit (Microsoft Learn)
  • Interfaccia IContextMenu (Microsoft Learn)
  • Registrazione di gestori di estensioni shell (Microsoft Learn)
  • Esportazione da una DLL tramite file DEF (Microsoft Learn)
  • GuidGenerator.com
Scarica lo strumento
Bersaglio del clic destroPercorso chiave di registro
File (Tutti)HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers
Cartelle (l'icona)HKEY_CLASSES_ROOT\Directory\shellex\ContextMenuHandlers
Sfondo cartellaHKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers
Sfondo desktopHKEY_CLASSES_ROOT\DesktopBackground\shellex\ContextMenuHandlers