
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.
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:
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 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.
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
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
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
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
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
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