
Sickle - Kit de Desenvolvimento de Payloads

Sickle é uma ferramenta que desenvolvi originalmente para me ajudar a ser mais eficaz, tanto no desenvolvimento quanto na compreensão de shellcode. No entanto, ao longo do seu desenvolvimento e uso, ela evoluiu para um kit de desenvolvimento de payloads. Embora os módulos atuais sejam voltados principalmente para assembly, esta ferramenta não se limita a shellcode.
Atualmente, o Sickle pode auxiliar no seguinte:
O Sickle suporta geração de shellcode por meio do Keystone Engine. Por ser um recurso adicionado recentemente, o suporte a payloads é limitado. No entanto, o objetivo é adicionar um reverse shell básico para cada arquitetura e plataforma.

O Sickle inclui um módulo de "diffing" inicialmente projetado para analisar stubs de shellcode. O modo "asm" original realiza diffs de desmontagem linear tanto no nível da linguagem assembly quanto no nível dos opcodes, separadamente.

Além disso, o Sickle oferece vários modos para realizar diffs, tornando-o útil além do desenvolvimento de shellcode.

Uma tarefa comum que você pode realizar com frequência é testar seu shellcode. Esse processo normalmente envolve as seguintes etapas:
Embora essas etapas possam parecer simples, elas podem se tornar demoradas quando repetidas. O Sickle simplifica o processo ao envolver automaticamente o shellcode para testes rápidos, e o módulo "run" atualmente suporta sistemas Windows e Unix.

O Sickle também pode converter um arquivo binário em opcodes extraídos (shellcode) e, em seguida, traduzi-los em instruções de máquina (assembly). Observe que esse processo funciona apenas com arquivos binários brutos e atualmente realiza a desmontagem de forma linear por meio do Capstone.

No exemplo mostrado acima, o módulo "disassemble" desmonta um reverse shell projetado por Stephen Fewer para assembly.
A extração de shellcode foi o primeiro módulo, ou melhor, a funcionalidade principal do Sickle, pois os opcodes são interpretados de forma diferente dependendo do wrapper utilizado. O JavaScript, por exemplo, não armazena e interpreta shellcode da mesma forma que um programa em C faria.

Talvez a maior inspiração para isso tenha sido o msfvenom.
Embora menos comum em exploits de 64 bits, pode haver casos em que um exploit restrinja o uso de determinados caracteres. É aí que o módulo "pinpoint" se destaca, pois identifica e realça diretamente as instruções de assembly responsáveis pelo(s) caractere(s) inválido(s) identificado(s).

Originalmente, esta ferramenta começou como um único script grande. No entanto, à medida que evoluiu, precisei reaprender o código a cada atualização. Para resolver isso, o Sickle agora segue uma abordagem modular, permitindo que novas funcionalidades sejam adicionadas com tempo mínimo gasto reaprendendo o design da ferramenta.
$ 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