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
go-shellcode — Un repository di esecutori di Windows Shellcode e utilità di supporto. Le applicazioni caricano ed eseguono Shellcode utilizzando varie chiamate API o tecniche. | Kitploit
Strumenti/GitHubGitHub/ne0nd0g/go-shellcode
Generazione di PayloadExploitShellcodePost-ExploitPenetration TestingRed TeamingSviluppo Payload
GitHubne0nd0g/go-shellcode

go-shellcode

Un repository di esecutori di Windows Shellcode e utilità di supporto. Le applicazioni caricano ed eseguono Shellcode utilizzando varie chiamate API o tecniche.

Vedi Repository
1.2k2394 anni 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

go-shellcode

go-shellcode è un repository di runner di Shellcode per Windows e utility di supporto. Le applicazioni caricano ed eseguono Shellcode utilizzando varie chiamate API o tecniche.

I runner di Shellcode disponibili includono:

  • CreateFiber
  • CreateProcess
  • CreateProcessWithPipe
  • CreateRemoteThread
  • CreateRemoteThreadNative
  • CreateThread
  • CreateThreadNative
  • EarlyBird
  • EtwpCreateEtwThread
  • NtQueueApcThreadEx (local)
  • RtlCreateUserThread
  • Syscall
  • Shellcode Utils
  • UuidFromStringA

CreateFiber

Questa applicazione sfrutta la funzione Windows CreateFiber di Kernel32.dll per eseguire shellcode all'interno del processo di questa applicazione. È utile quando si vuole evitare l'iniezione in processi remoti e si vuole evitare di chiamare CreateThread. Questa applicazione NON utilizza funzioni del pacchetto golang.org/x/sys/windows. La differenza più significativa è che questa applicazione carica da sé tutte le DLL e le Procedure necessarie e utilizza la funzione Call() della procedura.

NOTA: Non ho ancora trovato un modo per far uscire il processo e sarà necessario terminarlo manualmente.

L'applicazione può essere compilata con il seguente comando su un host Windows dalla directory root del progetto:

set GOOS=windows GOARCH=amd64;go build -o CreateFiber.exe .\cmd\CreateFiber\main.go

CreateProcess

Questa applicazione sfrutta la funzione Windows CreateProcess di Kernel32.dll. Il processo viene creato in uno stato sospeso, l'AddressOfEntryPoint nella struttura IMAGE_OPTIONAL_HEADER viene aggiornato per eseguire shellcode nel processo figlio, e poi il processo viene ripreso. Questo è un tipo di process hollowing ma il PE esistente NON viene smappato e il ThreadContext NON viene aggiornato. L'architettura dello shellcode fornito (es. x86 o x64) deve corrispondere all'architettura del processo figlio.

L'applicazione può essere compilata con il seguente comando su un host Windows dalla directory root del progetto:

set GOOS=windows GOARCH=amd64;go build -o CreateProcess.exe .\cmd\CreateProcess\main.go

CreateProcessWithPipe

Questa applicazione sfrutta la funzione Windows CreateProcess di Kernel32.dll. Il processo viene creato in uno stato sospeso, l'AddressOfEntryPoint nella struttura IMAGE_OPTIONAL_HEADER viene aggiornato per eseguire shellcode nel processo figlio, e poi il processo viene ripreso. Questo è un tipo di process hollowing ma il PE esistente NON viene smappato e il ThreadContext NON viene aggiornato. L'architettura dello shellcode fornito (es. x86 o x64) deve corrispondere all'architettura del processo figlio.

Questa applicazione si differenzia da CreateProcess perché raccoglie tutti i dati scritti su STDOUT o STDERR nel processo figlio e li restituisce al processo padre. I dati vengono raccolti utilizzando la funzione CreatePipe per creare una pipe anonima tramite cui il processo padre e quello figlio comunicano. Ciò è utile quando si utilizzano strumenti come Donut per eseguire un assembly .NET in un processo figlio come shellcode e recuperare l'output del programma eseguito. Il seguente comando può essere utilizzato per generare shellcode indipendente dalla posizione per eseguire Seatbelt con Donut v0.9.3:

.\donut.exe -o donut_v0.9.3_Seatbelt.bin -x 2 -c Seatbelt.Program -m Main -p "ARPTable" Seatbelt.exe

L'applicazione può essere compilata con il seguente comando su un host Windows dalla directory root del progetto:

set GOOS=windows GOARCH=amd64;go build -o CreateProcessWithPipe.exe .\cmd\CreateProcessWithPipe\main.go

CreateRemoteThread

Questa applicazione sfrutta la funzione Windows CreateRemoteThread di Kernel32.dll per eseguire shellcode in un processo remoto. L'applicazione richiede che il processo di destinazione in cui iniettare sia già in esecuzione. L'identificativo del processo (PID) di destinazione può essere fornito in fase di esecuzione per i test utilizzando il flag -pid della riga di comando. Per l'uso operativo, codificare il PID nella seguente riga di codice sostituendo 0 con il PID di destinazione:

pid := flag.Int("pid", 0, "Process ID to inject shellcode into")

Questa applicazione utilizza funzioni del pacchetto golang.org/x/sys/windows, ove possibile, come windows.OpenProcess(). L'applicazione può essere compilata con il seguente comando su un host Windows dalla directory root del progetto:

set GOOS=windows GOARCH=amd64;go build -o CreateRemoteThread.exe .\cmd\CreateRemoteThread\main.go

CreateRemoteThreadNative

Questa applicazione sfrutta la funzione Windows CreateRemoteThread di Kernel32.dll per eseguire shellcode in un processo remoto. L'applicazione richiede che il processo di destinazione in cui iniettare sia già in esecuzione. L'identificativo del processo (PID) di destinazione può essere fornito in fase di esecuzione per i test utilizzando il flag -pid della riga di comando. Per l'uso operativo, codificare il PID nella seguente riga di codice sostituendo 0 con il PID di destinazione:

pid := flag.Int("pid", 0, "Process ID to inject shellcode into")

Questa applicazione NON utilizza funzioni del pacchetto golang.org/x/sys/windows. La differenza più significativa è che questa applicazione carica da sé tutte le DLL e le Procedure necessarie e utilizza la funzione Call() della procedura. L'applicazione può essere compilata con il seguente comando su un host Windows dalla directory root del progetto:

set GOOS=windows GOARCH=amd64;go build -o CreateRemoteThreadNative.exe .\cmd\CreateRemoteThreadNative\main.go

CreateThread

Questa applicazione sfrutta la funzione Windows CreateThread di Kernel32.dll per eseguire shellcode all'interno del processo di questa applicazione. È utile quando si vuole evitare l'iniezione in processi remoti. Questa applicazione utilizza funzioni del pacchetto golang.org/x/sys/windows, ove possibile, come windows.VirtualAlloc(). L'applicazione può essere compilata con il seguente comando su un host Windows dalla directory root del progetto:

set GOOS=windows GOARCH=amd64;go build -o CreateThread.exe .\cmd\CreateThread\main.go

CreateThreadNative

Questa applicazione sfrutta la funzione Windows CreateThread di Kernel32.dll per eseguire shellcode all'interno del processo di questa applicazione. È utile quando si vuole evitare l'iniezione in processi remoti. Questa applicazione NON utilizza funzioni del pacchetto golang.org/x/sys/windows. La differenza più significativa è che questa applicazione carica da sé tutte le DLL e le Procedure necessarie e utilizza la funzione Call() della procedura. L'applicazione può essere compilata con il seguente comando su un host Windows dalla directory root del progetto:

set GOOS=windows GOARCH=amd64;go build -o CreateThreadNative.exe .\cmd\CreateThreadNative\main.go

EarlyBird

L'applicazione sfrutta la funzione Windows CreateProcess per creare un processo in stato sospeso. Una volta che il processo figlio è sospeso, viene utilizzata la funzione Windows QueueUserAPC per aggiungere un UserAPC al processo figlio che punta allo shellcode allocato. Successivamente viene chiamato ResumeThread, che a sua volta chiama la funzione non documentata NtTestAlert che eseguirà l'UserAPC creato e di conseguenza lo shellcode. Ciò è utile perché lo shellcode verrà eseguito prima che AV/EDR possa hookare funzioni per supportare il rilevamento. Fare riferimento a Scoperta nuova tecnica di iniezione del codice 'Early Bird'. L'applicazione può essere compilata con il seguente comando su un host Windows dalla directory root del progetto:

export GOOS=windows GOARCH=amd64;go build -o goEarlyBird.exe cmd\EarlyBird\main.go

EtwpCreateEtwThread

Questa applicazione sfrutta la funzione Windows EtwpCreateEtwThread di ntdll.dll per eseguire shellcode all'interno del processo di questa applicazione. Lavoro originale di TheWover. È utile quando si vuole evitare l'iniezione in processi remoti. Questa applicazione NON utilizza funzioni del pacchetto golang.org/x/sys/windows. La differenza più significativa è che questa applicazione carica da sé tutte le DLL e le Procedure necessarie e utilizza la funzione Call() della procedura. L'applicazione può essere compilata con il seguente comando su un host Windows dalla directory root del progetto:

set GOOS=windows GOARCH=amd64;go build -o EtwpCreateEtwThread.exe .\cmd\EtwpCreateEtwThread\main.go

NtQueueApcThreadEx (locale)

Questa applicazione utilizza la funzione non documentata NtQueueApcThreadEx per creare un "Special User APC" nel thread corrente del processo corrente per eseguire shellcode. Poiché lo shellcode viene caricato ed eseguito nel processo corrente, è "locale". Questa stessa tecnica può essere utilizzata per un processo remoto. NOTA: Funziona solo su Windows 7 o successivi. Fare riferimento a APC Series: User APC API.

export GOOS=windows GOARCH=amd64;go build -o goNtQueueApcThreadEx-Local.exe cmd\NtQueueApcThreadEx-Local\main.go

RtlCreateUserThread

Questa applicazione sfrutta la funzione Windows RtlCreateUserThread di ntdll.dll per eseguire shellcode in un processo remoto. L'applicazione richiede che il processo di destinazione in cui iniettare sia già in esecuzione. L'identificativo del processo (PID) di destinazione può essere fornito in fase di esecuzione per i test utilizzando il flag -pid della riga di comando. Per l'uso operativo, codificare il PID nella seguente riga di codice sostituendo 0 con il PID di destinazione:

pid := flag.Int("pid", 0, "Process ID to inject shellcode into")

Questa applicazione NON utilizza funzioni del pacchetto golang.org/x/sys/windows. La differenza più significativa è che questa applicazione carica da sé tutte le DLL e le Procedure necessarie e utilizza la funzione Call() della procedura. L'applicazione può essere compilata con il seguente comando su un host Windows dalla directory root del progetto:

set GOOS=windows GOARCH=amd64;go build -o RtlCreateUserThread.exe .\cmd\RtlCreateUserThread\main.go

Syscall

Questa applicazione esegue Shellcode nel processo corrente effettuando una Syscall sul punto di ingresso dello Shellcode. Questa applicazione NON utilizza funzioni del pacchetto golang.org/x/sys/windows. L'applicazione può essere compilata con il seguente comando su un host Windows dalla directory root del progetto:

set GOOS=windows GOARCH=amd64;go build -o Syscall.exe .\cmd\Syscall\main.go

UuidFromStringA

Questa applicazione sfrutta la funzione Windows UuidFromStringA per caricare shellcode in un indirizzo di memoria e quindi chiama la funzione EnumSystemLocalesA per eseguire lo shellcode. Questo metodo di caricamento ed esecuzione di shellcode è stato derivato dal lavoro di nccgroup RIFT: Analysing a Lazarus Shellcode Execution Method. Per questa applicazione, la memoria viene allocata sull'heap e non viene utilizzato VirtualAlloc. L'applicazione può essere compilata con il seguente comando su un host Windows dalla directory root del progetto:

set GOOS=windows GOARCH=amd64;go build -o UuidFromString.exe .\cmd\UuidFromString\main.go

ShellcodeUtils

Questa applicazione viene utilizzata per trasformare file binari di shellcode. Il programma presuppone che il file di input sia un file binario (.bin) contenente i byte esadecimali dello shellcode. ShellcodeUtils può semplicemente codificare in base64 il file di input oppure può crittografarlo con XOR, RC4 o AES256-GCM. Gli strumenti possono essere utilizzati anche per decifrare i file.

Menu di aiuto di ShellcodeUtils:

root@kitploit:~
  -base64
        Codifica l'output in Base64. Può essere utilizzato con o senza crittografia
  -i string
        Percorso del file di input (file binario)
  -key string
        Chiave di crittografia
  -mode string
        Modalità di operazione da eseguire sul file di input [encrypt,decrypt] (default "encrypt")
  -nonce string
        Nonce, in esadecimale, utilizzato per decifrare un file AES256. Utilizzato solo durante la decifratura
  -o string
        Percorso del file di output
  -salt string
        Salt, in esadecimale, utilizzato per generare una chiave AES256 a 32 byte tramite Argon2. Utilizzato solo durante la decifratura
  -type string
        Tipo di crittografia da utilizzare [xor, aes256, rc4, null]
  -v    Abilita output verboso

Esempio di sola codifica Base64 del file di input e salvataggio in un file di testo:

root@kitploit:~
PS C:\Users\bob> .\ShellcodeUtils.exe -i C:\Users\bob\calc.bin -o C:\Users\bob\calc.b64.txt -base64 -v
[-]Output directory: C:\Users\bob\
[-]Output file name: calc.b64.txt
[-]File contents (hex): 505152535657556a605a6863616c6354594883ec2865488b32488b7618488b761048ad488b30488b7e3003573c8b5c17288b741f204801fe8b541f240fb72c178d5202ad813c0757696e4575ef8b741f1c4801fe8b34ae4801f799ffd74883c4305d5f5e5b5a5958c3
[-]No encryption type provided, continuing on...
[+]Output (string):
UFFSU1ZXVWpgWmhjYWxjVFlIg+woZUiLMkiLdhhIi3YQSK1IizBIi34wA1c8i1wXKIt0HyBIAf6LVB8kD7csF41SAq2BPAdXaW5Fde+LdB8cSAH+izSuSAH3mf/XSIPEMF1fXltaWVjD
[+] encrypt input and wrote 140 bytes to: C:\Users\bob\calc.b64.txt

Esempio di crittografia XOR del file di input con una chiave Sh3!1z E codifica Base64 dell'output:

root@kitploit:~
PS C:\Users\bob> .\ShellcodeUtils.exe -i C:\Users\bob\calc.bin -o C:\Users\bob\calc.xor.b64.txt -mode encrypt -type xor -key Sh3!1z -v
[-]Output directory: C:\Users\bob\
[-]Output file name: calc.xor.b64.txt
[-]File contents (hex): 505152535657556a605a6863616c6354594883ec2865488b32488b7618488b761048ad488b30488b7e3003573c8b5c17288b741f204801fe8b541f240fb72c178d5202ad813c0757696e4575ef8b741f1c4801fe8b34ae4801f799ffd74883c4305d5f5e5b5a5958c3
[-]XOR encrypting input file with key: Sh3!1z
[+]Output (hex):
03396172672d0602537b5919320450756832d0841b4479f16120b8572932d81e23699c32d8587baa4f4a503f0faa6d6d7be3473e11325296b8752e5e5cdf1f36bc2851c5b21d362d3a067654def127772f693084d85c9d69308dca97e469b2be63356c7f6a200a30f0
[+]xor encrypt input and wrote 105 bytes to: C:\Users\bob\calc.xor.b64.txt

Esempio di crittografia AES256-GCM del file di input con una password Sh3!1z SENZA codifica Base64 dell'output:

root@kitploit:~
PS C:\Users\bob> .\ShellcodeUtils.exe -i C:\Users\bob\calc.bin -o C:\Users\bob\calc.aes.bin -mode encrypt -type aes256 -key Sh3!1z -v
[-]Output directory: C:\Users\bob\
[-]Output file name: calc.aes.bin
[-]File contents (hex): 505152535657556a605a6863616c6354594883ec2865488b32488b7618488b761048ad488b30488b7e3003573c8b5c17288b741f204801fe8b541f240fb72c178d5202ad813c0757696e4575ef8b741f1c4801fe8b34ae4801f799ffd74883c4305d5f5e5b5a5958c3
[-]AES256 encrypting input file
[+]Argon2 salt (hex): db6126d3ac640f8aaa67cda74b8cf1d2c54513db7bf4fbe3422d1b276af1367e
[+]AES256 key (32-bytes) derived from input password Sh3!1z (hex): 096a40f1aef38dd9b5d63284acc19727c4420dd98f21ea052112bef63eb7d94a
[+]AES256 nonce (hex): 13802153c4b2fb6a3e545ff4
[+]Output (hex):
44a974233e37b460dc2181b16846f265e8e3a07959abf9c8760f7d0ac8029575e67571ea5b313bc8b011739db57c690ec156a4b0bba4e4d632c35c1490aeaac24f5ae05e90934adf57798ee3c702a3c27073fe976fbcc6ee5db355da186c1add58913e41a8c5716a0fcfc27371f0cae906e50e680366496a00
[+]aes256 encrypt input and wrote 121 bytes to: C:\Users\bob\calc.aes.bin

AES256 richiede una chiave a 32 byte. Questo programma utilizza l'algoritmo Argon2 ID per ricavare una chiave a 32 byte dalla password fornita con il parametro -key, utilizzando un sale generato casualmente. Per decifrare correttamente il file, saranno necessari la stessa password di input, il sale utilizzato con l'algoritmo Argon2 e lo stesso nonce utilizzato con l'algoritmo AES256. In alternativa, la funzione di decifratura potrebbe essere aggiornata per utilizzare direttamente la chiave Argon2 a 32 byte invece della password e del sale di input.

NOTA: Sta all'operatore decidere se utilizzare la chiave Argon2 generata o la password e il sale utilizzati per generarla.

Esempio di decifratura AES256 del file di input:

root@kitploit:~
PS C:\Users\bob> .\ShellcodeUtils.exe -i C:\Users\bob\calc.aes.bin -o C:\Users\bob\calc.aes.decrypted.bin -mode decrypt -type aes256 -key Sh3!1z -nonce 13802153c4b2fb6a3e545ff4 -salt db6126d3ac640f8aaa67cda74b8cf1d2c54513db7bf4fbe3422d1b276af1367e -v
[-]Output directory: C:\Users\bob\
[-]Output file name: calc.aes.decrypted.bin
[-]File contents (hex): 44a974233e37b460dc2181b16846f265e8e3a07959abf9c8760f7d0ac8029575e67571ea5b313bc8b011739db57c690ec156a4b0bba4e4d632c35c1490aeaac24f5ae05e90934adf57798ee3c702a3c27073fe976fbcc6ee5db355da186c1add58913e41a8c5716a0fcfc27371f0cae906e50e680366496a00
[-]AES256 decrypting input file
[-]Argon2 salt (hex): db6126d3ac640f8aaa67cda74b8cf1d2c54513db7bf4fbe3422d1b276af1367e
[-]AES256 key (hex): 096a40f1aef38dd9b5d63284acc19727c4420dd98f21ea052112bef63eb7d94a
[-]AES256 nonce (hex): 13802153c4b2fb6a3e545ff4
[+]Output (hex):
505152535657556a605a6863616c6354594883ec2865488b32488b7618488b761048ad488b30488b7e3003573c8b5c17288b741f204801fe8b541f240fb72c178d5202ad813c0757696e4575ef8b741f1c4801fe8b34ae4801f799ffd74883c4305d5f5e5b5a5958c3
[+]aes256 decrypt input and wrote 105 bytes to: C:\Users\bob\calc.aes.decrypted.bin

L'applicazione può essere compilata con il seguente comando su un host Windows dalla directory root del progetto:

set GOOS=windows GOARCH=amd64;go build -o ShellcodeUtils.exe .\cmd\ShellcodeUtils\main.go

Scarica lo strumento