Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
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
p3-loader — P³-Shellcode Loader è un loader che implementa una tecnica di iniezione di codice che sfrutta la struttura Process Parameters come posizione di esecuzione e staging per l'iniezione di shellcode in processi remoti, senza innescare i comuni meccanismi di rilevamento. | Kitploit
Strumenti/GitHubGitHub/orange-cyberdefense/p3-loader
Strumenti DifensiviEscalation di PrivilegiExploitShellcodePost-ExploitPenetration TestingPaper e RicercaApprendimento e FormazioneRed Teaming

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 →
Sviluppo Payload
Binary Exploitation
GitHuborange-cyberdefense/p3-loader

p3-loader

P³-Shellcode Loader è un loader che implementa una tecnica di iniezione di codice che sfrutta la struttura Process Parameters come posizione di esecuzione e staging per l'iniezione di shellcode in processi remoti, senza innescare i comuni meccanismi di rilevamento.

Vedi Repository
20423142 mesi faRevisionato da Kitploit
Condividi

P³-Shellcode Loader - Process Parameter Poisoning

Autori: Max Hirschberger & Ogulcan Ugur


Contenuti

  1. Introduzione
  2. Iniezione tipica di processi e API di sistema coinvolte
  3. Fondamenti tecnici degli internals di Windows richiesti
    • 3.1 API di creazione dei processi e parametri di avvio
    • 3.2 Il Process Environment Block (PEB)
  4. Process Parameter Poisoning (P³)
    • 4.1 Avviare un processo con un parametro avvelenato
    • 4.2 Individuare i dati iniettati nel nuovo processo
    • 4.3 Eseguire il codice iniettato
    • 4.4 Iniezioni di payload implementate
  5. Passare shellcode arbitrario in una stringa
    • 5.1 Metodi helper di basso livello usati dal generatore di shellcode
    • 5.2 Implementazione delle operazioni di alto livello
  6. Vantaggi dell'elusione del rilevamento con questa tecnica
  7. Approccio al rilevamento
  8. Conclusione
  9. Riferimenti

1. Introduzione

P³-Shellcode Loader è un loader che implementa una tecnica di code injection che sfrutta la struttura dei Process Parameters (Process Parameter Poisoning) come posizione di esecuzione e staging per l'iniezione di shellcode in processi remoti, senza attivare i comuni meccanismi di rilevamento.

Un concetto simile è stato descritto dal ricercatore di sicurezza modexp, che ha dimostrato che gli argomenti passati all'API CreateProcess possono essere sfruttati per questo scopo [1].


2. Iniezione tipica di processi e API di sistema coinvolte

Gli attaccanti vogliono rendere le loro attività meno sospette. Con l'iniezione di processi, gli attaccanti sono in grado di eseguire le loro attività da un processo diverso, più affidabile o che ci si aspetta stia eseguendo l'attività specifica, riducendo così i sospetti.

Di seguito sono riportati i passaggi tipici necessari per iniettare codice in un altro processo:

  1. L'attaccante cerca e apre un processo target o avvia un nuovo processo (tramite OpenProcess / NtOpenProcess o CreateProcess / NtCreateProcess).
  2. La memoria per il codice dannoso viene allocata nel processo target (tramite VirtualAllocEx o NtAllocateVirtualMemory).
  3. Il codice dannoso viene scritto nella nuova allocazione (tramite WriteProcessMemory / NtWriteVirtualMemory).
  4. La protezione dell'accesso alla memoria viene configurata per consentire l'esecuzione del codice dannoso (tramite VirtualProtectEx / NtProtectVirtualMemory).
  5. Un nuovo thread viene avviato nel processo target per eseguire il codice dannoso (tramite CreateRemoteThread o NtCreateThreadEx).

Ulteriori tecniche di injection includono, ma non si limitano a:

  • Thread Hijacking: Invece di creare un nuovo thread, uno esistente viene reindirizzato (tramite NtSetContextThread)
  • Early-Bird APC-Injection: Utilizza chiamate a procedure asincrone (APC) per reindirizzare l'esecuzione di un thread esistente (tramite NtQueueApcThread)
  • Dirty Vanity: Abusa dell'API Windows RtlCreateProcessReflection, che implementa il forking dei processi. Nei nostri test, abbiamo osservato che la maggior parte degli EDR si concentra su specifiche telemetrie per rilevare l'iniezione di processi. Gli EDR monitorano principalmente l'uso di WriteProcessMemory e VirtualAllocEx, così come le loro chiamate di sistema kernel sottostanti NtWriteVirtualMemory, NtAllocateVirtualMemory e NtAllocateVirtualMemoryEx.

3. Fondamenti tecnici degli internals di Windows richiesti

3.1 API di creazione dei processi e parametri di avvio

Windows fornisce la funzione API CreateProcessW per creare nuovi processi, mostrata nel Listato 1. I primi tre dei suoi parametri lpCommandLine, lpEnvironment e lpStartupInfo sono rilevanti per la tecnica di injection descritta, poiché vengono utilizzati per trasferire dati al nuovo processo.```c BOOL CreateProcessW( [in, optional] LPCWSTR lpApplicationName, [in, out, optional] LPWSTR lpCommandLine, [in, optional] LPSECURITY_ATTRIBUTES lpProcessAttributes, [in, optional] LPSECURITY_ATTRIBUTES lpThreadAttributes, [in] BOOL bInheritHandles, [in] DWORD dwCreationFlags, [in, optional] LPVOID lpEnvironment, [in, optional] LPCWSTR lpCurrentDirectory, [in] LPSTARTUPINFOW lpStartupInfo, [out] LPPROCESS_INFORMATION lpProcessInformation );

*Listato 1: Definizione della funzione API Windows CreateProcessW*
 
Il parametro `lpCommandLine` specifica la riga di comando per il nuovo processo. È limitato a un massimo di 32.767 caratteri Unicode, incluso il terminatore null Unicode. Per la variante Unicode, è necessario fornire una stringa su cui la funzione possa scrivere. Se viene fornita una stringa costante, qualsiasi tentativo di scrittura effettuato dalla funzione API comporta una violazione di accesso alla memoria. Se il valore è `NULL`, la riga di comando del processo verrà presa dal parametro `lpApplicationName`. Se `lpApplicationName` è `NULL`, deve essere fornito nel campo `lpCommandLine` ed è limitato a caratteri `MAX_PATH`.
 
Il parametro `lpEnvironment` fornisce un elenco di variabili d'ambiente al processo. Se il valore è `NULL`, verrà utilizzato l'ambiente del processo creatore. L'elenco delle variabili d'ambiente consiste in stringhe successive terminate da null nel formato `NAME=VALUE` con un altro terminatore null alla fine.
 
Il parametro `lpStartupInfo` è una struttura mostrata nel Listato 2 con campi quali stazione finestra, desktop, handle standard di input e output, nonché campi che configurano la finestra principale del nuovo processo. Secondo la documentazione Microsoft, il campo `lpReserved` è riservato per uso interno senza ulteriore documentazione. Attraverso l'analisi con il debugger WinDbg, è stato possibile correlare questo parametro alla variabile `ShellInfo` di tipo `UNICODE_STRING` nel nuovo processo.```c
typedef struct _STARTUPINFOW {
    DWORD  cb;
    LPWSTR lpReserved;   // Copied to ShellInfo (UNICODE_STRING)
    LPWSTR lpDesktop;
    LPWSTR lpTitle;
    DWORD  dwX;
    DWORD  dwY;
    DWORD  dwXSize;
    // (...) additional fields
    WORD   wShowWindow;
    WORD   cbReserved2;
    LPBYTE lpReserved2;
    HANDLE hStdInput;
    // (...) additional fields
} STARTUPINFOW, *LPSTARTUPINFOW;

Listato 2: Struttura della struttura dati STARTUPINFOW

Scarica lo strumento