
Репозиторий раннеров Windows Shellcode и вспомогательных утилит. Приложения загружают и выполняют Shellcode с использованием различных вызовов API или техник.
go-shellcode — это репозиторий, содержащий загрузчики шелл-кода для Windows и вспомогательные утилиты. Приложения загружают и выполняют шелл-код с использованием различных вызовов API или техник.
Доступные загрузчики шелл-кода:
Это приложение использует функцию Windows CreateFiber из библиотеки Kernel32.dll для выполнения шелл-кода в процессе этого приложения. Это полезно, когда нужно избежать внедрения в удаленный процесс и вызова CreateThread. Приложение НЕ использует функции из пакета golang.org/x/sys/windows. Наиболее существенное отличие заключается в том, что это приложение само загружает все необходимые DLL и процедуры и использует функцию Call() процедуры.
ПРИМЕЧАНИЕ: Я не нашел способа завершить процесс, и вам придется завершить его вручную.
Приложение можно скомпилировать следующей командой на хосте Windows из корневого каталога проекта:
set GOOS=windows GOARCH=amd64;go build -o CreateFiber.exe .\cmd\CreateFiber\main.go
Это приложение использует функцию Windows CreateProcess из Kernel32.dll. Процесс создается в приостановленном состоянии, AddressOfEntryPoint в структуре IMAGE_OPTIONAL_HEADER обновляется для выполнения шелл-кода в дочернем процессе, после чего процесс возобновляется. Это разновидность полого процесса (process hollowing), но существующий PE НЕ отображается из памяти, а ThreadContext НЕ обновляется. Архитектура предоставленного шелл-кода (т.е. x86 или x64) должна соответствовать архитектуре дочернего процесса.
Приложение можно скомпилировать следующей командой на хосте Windows из корневого каталога проекта:
set GOOS=windows GOARCH=amd64;go build -o CreateProcess.exe .\cmd\CreateProcess\main.go
Это приложение использует функцию Windows CreateProcess из Kernel32.dll. Процесс создается в приостановленном состоянии, AddressOfEntryPoint в структуре IMAGE_OPTIONAL_HEADER обновляется для выполнения шелл-кода в дочернем процессе, после чего процесс возобновляется. Это разновидность полого процесса (process hollowing), но существующий PE НЕ отображается из памяти, а ThreadContext НЕ обновляется. Архитектура предоставленного шелл-кода (т.е. x86 или x64) должна соответствовать архитектуре дочернего процесса.
Это приложение отличается от CreateProcess тем, что оно собирает все данные, записанные в STDOUT или STDERR дочернего процесса, и возвращает их родительскому процессу. Данные собираются с помощью функции CreatePipe для создания анонимного канала, по которому взаимодействуют родительский и дочерний процессы. Это полезно при использовании таких инструментов, как Donut, для выполнения .NET-сборки в дочернем процессе в виде шелл-кода и получения вывода выполненной программы. Следующая команда может быть использована для генерации позиционно-независимого шелл-кода для запуска Seatbelt с помощью Donut v0.9.3:
.\donut.exe -o donut_v0.9.3_Seatbelt.bin -x 2 -c Seatbelt.Program -m Main -p "ARPTable" Seatbelt.exe
Приложение можно скомпилировать следующей командой на хосте Windows из корневого каталога проекта:
set GOOS=windows GOARCH=amd64;go build -o CreateProcessWithPipe.exe .\cmd\CreateProcessWithPipe\main.go
Это приложение использует функцию Windows CreateRemoteThread из Kernel32.dll для выполнения шелл-кода в удаленном процессе. Приложение требует, чтобы целевой процесс для внедрения уже был запущен. Идентификатор целевого процесса (PID) может быть указан во время выполнения для тестирования с помощью флага командной строки -pid. Захардкодьте PID в следующей строке кода для оперативного использования, заменив 0 на целевой PID:
pid := flag.Int("pid", 0, "Process ID to inject shellcode into")
Это приложение использует функции из пакета golang.org/x/sys/windows, где это возможно, например, windows.OpenProcess(). Приложение можно скомпилировать следующей командой на хосте Windows из корневого каталога проекта:
set GOOS=windows GOARCH=amd64;go build -o CreateRemoteThread.exe .\cmd\CreateRemoteThread\main.go
Это приложение использует функцию Windows CreateRemoteThread из Kernel32.dll для выполнения шелл-кода в удаленном процессе. Приложение требует, чтобы целевой процесс для внедрения уже был запущен. Идентификатор целевого процесса (PID) может быть указан во время выполнения для тестирования с помощью флага командной строки -pid. Захардкодьте PID в следующей строке кода для оперативного использования, заменив 0 на целевой PID:
pid := flag.Int("pid", 0, "Process ID to inject shellcode into")
Это приложение НЕ использует функции из пакета golang.org/x/sys/windows. Наиболее существенное отличие заключается в том, что это приложение само загружает все необходимые DLL и процедуры и использует функцию Call() процедуры. Приложение можно скомпилировать следующей командой на хосте Windows из корневого каталога проекта:
set GOOS=windows GOARCH=amd64;go build -o CreateRemoteThreadNative.exe .\cmd\CreateRemoteThreadNative\main.go
Это приложение использует функцию Windows CreateThread из Kernel32.dll для выполнения шелл-кода в процессе этого приложения. Это полезно, когда нужно избежать внедрения в удаленный процесс. Приложение использует функции из пакета golang.org/x/sys/windows, где это возможно, например, windows.VirtualAlloc(). Приложение можно скомпилировать следующей командой на хосте Windows из корневого каталога проекта:
set GOOS=windows GOARCH=amd64;go build -o CreateThread.exe .\cmd\CreateThread\main.go