
Sickle - Набор для разработки полезных нагрузок

Sickle — это инструмент, который я изначально разработал, чтобы повысить свою эффективность как в разработке, так и в понимании шелл-кода. Однако в процессе разработки и использования он превратился в комплект для разработки полезных нагрузок. Хотя текущие модули в основном ориентированы на ассемблер, этот инструмент не ограничивается только шелл-кодом.
В настоящее время Sickle может помочь в следующем:
Sickle поддерживает генерацию шелл-кода через Keystone Engine. Так как это недавно добавленная функция, поддержка полезных нагрузок ограничена. Однако цель — добавить базовый reverse shell для каждой архитектуры и платформы.

Sickle включает модуль "diffing", изначально предназначенный для анализа заглушек шелл-кода. Оригинальный режим "asm" выполняет линейное сравнение результатов дизассемблирования отдельно на уровне ассемблера и опкодов.

Кроме того, Sickle предлагает различные режимы для выполнения сравнения, что делает его полезным не только для разработки шелл-кода.

Одна из частых задач — тестирование вашего шелл-кода. Этот процесс обычно включает следующие шаги:
Хотя эти шаги могут показаться незначительными, при частом повторении они отнимают много времени. Sickle упрощает процесс, автоматически оборачивая шелл-код для быстрого тестирования, а модуль "run" в настоящее время поддерживает как Windows, так и Unix-системы.

Sickle также может преобразовывать бинарный файл в извлечённые опкоды (шелл-код), а затем транслировать их в машинные инструкции (ассемблер). Обратите внимание, что этот процесс работает только с сырыми бинарными файлами и в настоящее время выполняет дизассемблирование линейным способом через Capstone.

В приведённом выше примере модуль "disassemble" дизассемблирует reverse shell, разработанный Стивеном Фьюером, в ассемблер.
Извлечение шелл-кода было первым модулем или, скорее, основной функциональностью Sickle, поскольку опкоды интерпретируются по-разному в зависимости от используемой обёртки. JavaScript, например, хранит и интерпретирует шелл-код не так, как программа на C.

Возможно, главным вдохновением для этого был msfvenom.
Хотя это менее распространено в 64-битных эксплойтах, могут быть случаи, когда использование определённых символов ограничено. Именно здесь модуль "pinpoint" проявляет себя наилучшим образом, поскольку он напрямую определяет и выделяет инструкции ассемблера, ответственные за обнаруженные недопустимые символы.

Изначально этот инструмент представлял собой один большой скрипт. Однако по мере его развития я обнаружил, что с каждым обновлением приходится заново изучать код. Чтобы решить эту проблему, Sickle теперь использует модульный подход, позволяющий добавлять новые функции с минимальными затратами времени на повторное изучение дизайна инструмента.
$ sickle-pdk -l
Shellcode Ring Description
--------- ---- -----------
windows/x64/virtualalloc_exec_tcp 3 A lightweight stager that connects to a handler via TCP over IPv4 to receive and execute shellcode
windows/x64/egghunter 3 Egghunter based on Hell's Gate and NtProtectVirtualMemory
windows/x64/virtualalloc_exec_https 3 A lightweight stager that connects to a handler over HTTPS to receive and execute shellcode
windows/x64/exec 3 Executes a command on the target host
windows/x64/reflective_pe_loader 3 Stageless Reflective PE Loader that takes an x64 binary and executes it in memory
windows/x64/shell_reverse_tcp 3 Reverse Shell via TCP over IPv4 that provides an interactive cmd.exe session
windows/aarch64/shell_reverse_tcp 3 Reverse Shell via TCP over IPv4 that provides an interactive cmd.exe session
windows/x86/shell_reverse_tcp 3 Reverse shell via TCP over IPv4 that provides an interactive cmd.exe session
windows/x64/kernel_token_stealer 0 Token stealing shellcode for privilege escalation
windows/x64/kernel_sysret 0 Generic method of returning from kernel space to user space
windows/x64/kernel_ace_edit 0 SID entry modifier for process injection
windows/x86/kernel_token_stealer 0 Token stealing shellcode for privilege escalation
linux/x64/memfd_reflective_elf_tcp 3 Staged Reflective ELF Loader via TCP over IPV4 which executes an ELF from a remote server
linux/aarch64/memfd_reflective_elf_tcp 3 Staged Reflective ELF Loader via TCP over IPv4 which executes an ELF from a remote server handler
linux/aarch64/shell_reverse_tcp 3 Reverse Shell via TCP over IPv4 that provides an interactive /bin/sh session
linux/x86/execve 3 Executes a shell session such as /bin/sh
linux/x86/shell_reverse_tcp 3 Reverse shell via TCP over IPV4 that provides an interactive /bin/sh session
Architectures
-------------
aarch64
x64
x86
Modules Description
------- -----------
disassemble Simple linear disassembler for multiple architectures
handler Module for handling payload distribution and session management
asm_shell Interactive assembler and disassembler
diff Bytecode diffing module for comparing two binaries (or shellcode)
pinpoint Highlights opcodes within a disassembly to identify instructions responsible for bad characters
run Wrapper used for executing bytecode (shellcode)
format Converts bytecode into a respective format (activated anytime '-f' is used)
badchar Produces a set of all potential invalid characters for validation purposes