Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/ne0nd0g/go-shellcode
Generación de PayloadsExplotaciónShellcodePost-ExplotaciónPruebas de PenetraciónRed TeamingDesarrollo de Payloads
GitHubne0nd0g/go-shellcode

go-shellcode

Un repositorio de ejecutores de Shellcode para Windows y utilidades de soporte. Las aplicaciones cargan y ejecutan Shellcode utilizando varias llamadas API o técnicas.

Ver Repositorio
1.2k2398hace 4 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

go-shellcode

go-shellcode es un repositorio de ejecutores de Shellcode de Windows y utilidades de soporte. Las aplicaciones cargan y ejecutan Shellcode utilizando varias llamadas API o técnicas.

Los ejecutores de Shellcode disponibles incluyen:

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

CreateFiber

Esta aplicación aprovecha la función CreateFiber de Windows de Kernel32.dll para ejecutar shellcode dentro del proceso de esta aplicación. Es útil cuando se desea evitar la inyección remota de procesos y evitar llamar a CreateThread. Esta aplicación utiliza funciones del paquete . La diferencia más significativa es que esta aplicación carga todas las DLL y procedimientos necesarios por sí misma y utiliza la función Call() del procedimiento.

NO
golang.org/x/sys/windows

NOTA: No he encontrado la forma de hacer que el proceso termine y tendrás que terminarlo manualmente.

La aplicación se puede compilar con el siguiente comando en un host Windows desde el directorio raíz del proyecto:

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

CreateProcess

Esta aplicación aprovecha la función CreateProcess de Windows de Kernel32.dll. El proceso se crea en un estado suspendido, se actualiza el AddressOfEntryPoint en la estructura IMAGE_OPTIONAL_HEADER para ejecutar shellcode en el proceso hijo, y luego se reanuda el proceso. Esto es un tipo de hollowing de procesos, pero el PE existente NO se desasigna y el ThreadContext NO se actualiza. La arquitectura del shellcode proporcionado (p. ej., x86 o x64) debe coincidir con la arquitectura del proceso hijo.

La aplicación se puede compilar con el siguiente comando en un host Windows desde el directorio raíz del proyecto:

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

CreateProcessWithPipe

Esta aplicación aprovecha la función CreateProcess de Windows de Kernel32.dll. El proceso se crea en un estado suspendido, se actualiza el AddressOfEntryPoint en la estructura IMAGE_OPTIONAL_HEADER para ejecutar shellcode en el proceso hijo, y luego se reanuda el proceso. Esto es un tipo de hollowing de procesos, pero el PE existente NO se desasigna y el ThreadContext NO se actualiza. La arquitectura del shellcode proporcionado (p. ej., x86 o x64) debe coincidir con la arquitectura del proceso hijo.

Esta aplicación se diferencia de CreateProcess porque recopilará cualquier dato escrito en STDOUT o STDERR en el proceso hijo y lo devolverá al proceso padre. Los datos se recopilan utilizando la función CreatePipe para crear una tubería anónima a través de la cual se comunican el proceso padre y el hijo. Esto es útil cuando se utilizan herramientas como Donut para ejecutar un ensamblado .NET en un proceso hijo como shellcode y recuperar la salida del programa ejecutado. El siguiente comando se puede utilizar para generar shellcode independiente de la posición para ejecutar 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

La aplicación se puede compilar con el siguiente comando en un host Windows desde el directorio raíz del proyecto:

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

CreateRemoteThread

Esta aplicación aprovecha la función CreateRemoteThread de Windows de Kernel32.dll para ejecutar shellcode en un proceso remoto. La aplicación requiere que el proceso de destino en el que se va a inyectar ya esté en ejecución. El Identificador de Proceso (PID) de destino se puede proporcionar en tiempo de ejecución para pruebas utilizando el indicador -pid en la línea de comandos. Codifique el PID en la siguiente línea de código para uso operativo reemplazando el 0 con su PID objetivo:

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

Esta aplicación utiliza funciones del paquete golang.org/x/sys/windows, cuando es factible, como windows.OpenProcess(). La aplicación se puede compilar con el siguiente comando en un host Windows desde el directorio raíz del proyecto:

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

CreateRemoteThreadNative

Esta aplicación aprovecha la función CreateRemoteThread de Windows de Kernel32.dll para ejecutar shellcode en un proceso remoto. La aplicación requiere que el proceso de destino en el que se va a inyectar ya esté en ejecución. El Identificador de Proceso (PID) de destino se puede proporcionar en tiempo de ejecución para pruebas utilizando el indicador -pid en la línea de comandos. Codifique el PID en la siguiente línea de código para uso operativo reemplazando el 0 con su PID objetivo:

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

Esta aplicación NO utiliza funciones del paquete golang.org/x/sys/windows. La diferencia más significativa es que esta aplicación carga todas las DLL y procedimientos necesarios por sí misma y utiliza la función Call() del procedimiento. La aplicación se puede compilar con el siguiente comando en un host Windows desde el directorio raíz del proyecto:

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

CreateThread

Esta aplicación aprovecha la función CreateThread de Windows de Kernel32.dll para ejecutar shellcode dentro del proceso de esta aplicación. Es útil cuando se desea evitar la inyección remota de procesos. Esta aplicación utiliza funciones del paquete golang.org/x/sys/windows, cuando es factible, como windows.VirtualAlloc(). La aplicación se puede compilar con el siguiente comando en un host Windows desde el directorio raíz del proyecto:

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

CreateThreadNative

Esta aplicación aprovecha la función CreateThread de Windows de Kernel32.dll para ejecutar shellcode dentro del proceso de esta aplicación. Es útil cuando se desea evitar la inyección remota de procesos. Esta aplicación NO utiliza funciones del paquete golang.org/x/sys/windows. La diferencia más significativa es que esta aplicación carga todas las DLL y procedimientos necesarios por sí misma y utiliza la función Call() del procedimiento. La aplicación se puede compilar con el siguiente comando en un host Windows desde el directorio raíz del proyecto:

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

EarlyBird

La aplicación aprovecha la función CreateProcess de Windows para crear un proceso en estado suspendido. Una vez que el proceso hijo está suspendido, se utiliza la función QueueUserAPC de Windows para agregar una UserAPC al proceso hijo que apunta al shellcode asignado. A continuación, se llama a ResumeThread, que posteriormente llama a la función no documentada NtTestAlert que ejecutará la UserAPC creada y, a su vez, el shellcode. Esto es útil porque el shellcode se ejecutará antes de que AV/EDR puedan enganchar funciones para apoyar la detección. Referencia: New 'Early Bird' Code Injection Technique Discovered. La aplicación se puede compilar con el siguiente comando en un host Windows desde el directorio raíz del proyecto:

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

EtwpCreateEtwThread

Esta aplicación aprovecha la función EtwpCreateEtwThread de Windows de ntdll.dll para ejecutar shellcode dentro del proceso de esta aplicación. Trabajo original de TheWover. Es útil cuando se desea evitar la inyección remota de procesos. Esta aplicación NO utiliza funciones del paquete golang.org/x/sys/windows. La diferencia más significativa es que esta aplicación carga todas las DLL y procedimientos necesarios por sí misma y utiliza la función Call() del procedimiento. La aplicación se puede compilar con el siguiente comando en un host Windows desde el directorio raíz del proyecto:

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

NtQueueApcThreadEx (local)

Esta aplicación utiliza la función no documentada NtQueueApcThreadEx para crear una "APC de Usuario Especial" en el hilo actual del proceso actual para ejecutar shellcode. Debido a que el shellcode se carga y ejecuta en el proceso actual, es "local". Esta misma técnica se puede utilizar para un proceso remoto. NOTA: Esto solo funcionará en Windows 7 o posterior. Referencia: APC Series: User APC API.

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

RtlCreateUserThread

Esta aplicación aprovecha la función RtlCreateUserThread de Windows de ntdll.dll para ejecutar shellcode en un proceso remoto. La aplicación requiere que el proceso de destino en el que se va a inyectar ya esté en ejecución. El Identificador de Proceso (PID) de destino se puede proporcionar en tiempo de ejecución para pruebas utilizando el indicador -pid en la línea de comandos. Codifique el PID en la siguiente línea de código para uso operativo reemplazando el 0 con su PID objetivo:

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

Esta aplicación NO utiliza funciones del paquete golang.org/x/sys/windows. La diferencia más significativa es que esta aplicación carga todas las DLL y procedimientos necesarios por sí misma y utiliza la función Call() del procedimiento. La aplicación se puede compilar con el siguiente comando en un host Windows desde el directorio raíz del proyecto:

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

Syscall

Esta aplicación ejecuta Shellcode en el proceso actual en ejecución realizando una llamada al sistema (Syscall) en el punto de entrada del Shellcode. Esta aplicación NO utiliza funciones del paquete golang.org/x/sys/windows. La aplicación se puede compilar con el siguiente comando en un host Windows desde el directorio raíz del proyecto:

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

UuidFromStringA

Esta aplicación aprovecha la función UuidFromStringA de Windows para cargar shellcode en una dirección de memoria y luego llama a la función EnumSystemLocalesA para ejecutar el shellcode. Este método de cargar y ejecutar shellcode se derivó del artículo de nccgroup RIFT: Analysing a Lazarus Shellcode Execution Method. Para esta aplicación, la memoria se asigna en el montón (heap) y no utiliza VirtualAlloc. La aplicación se puede compilar con el siguiente comando en un host Windows desde el directorio raíz del proyecto:

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

ShellcodeUtils

Esta aplicación se utiliza para transformar archivos binarios de shellcode. El programa requiere que el archivo de entrada sea un archivo binario (.bin) que contenga los bytes hexadecimales del shellcode. ShellcodeUtils puede simplemente codificar en Base64 su archivo de entrada o puede cifrarlo con XOR, RC4 o AES256-GCM. Las herramientas también se pueden utilizar para descifrar archivos.

Menú de ayuda de ShellcodeUtils:

root@kitploit:~
  -base64
        Base64 encode the output. Can be used with or without encryption
  -i string
        Input file path of binary file
  -key string
        Encryption key
  -mode string
        Mode of operation to perform on the input file [encrypt,decrypt] (default "encrypt")
  -nonce string
        Nonce, in hex, used to decrypt an AES256 input file. Only used during decryption
  -o string
        Output file path
  -salt string
        Salt, in hex, used to generate an AES256 32-byte key through Argon2. Only used during decryption
  -type string
        The type of encryption to use [xor, aes256, rc4, null]
  -v    Enable verbose output

Ejemplo de solo codificación Base64 del archivo de entrada y guardado en un archivo de texto:

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

Ejemplo de cifrado XOR del archivo de entrada con una clave Sh3!1z Y codificación Base64 de la salida:

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

Ejemplo de cifrado AES256-GCM del archivo de entrada con una contraseña Sh3!1z SIN codificación Base64 de la salida:

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 requiere una clave de 32 bytes. Este programa utiliza el algoritmo Argon2 ID para tomar la contraseña proporcionada con el parámetro de entrada -key y derivar una clave de 32 bytes utilizando una sal generada aleatoriamente. Necesitará la misma contraseña de entrada y la sal utilizada con el algoritmo Argon2, así como el mismo nonce utilizado con el algoritmo AES256, para descifrar el archivo con éxito. Alternativamente, la función de descifrado podría actualizarse para usar solo la clave Argon2 de 32 bytes en lugar de la contraseña de entrada y la sal.

NOTA: Depende del operador decidir si usar solo la clave Argon2 generada o usar la contraseña y la sal que se utilizan para generar la contraseña.

Ejemplo de descifrado AES256 del archivo de entrada:

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

La aplicación se puede compilar con el siguiente comando en un host Windows desde el directorio raíz del proyecto:

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

Descargar herramienta