
🌸 Ambiente interativo de shellcoding para criar shellcodes facilmente
Shellen é um ambiente interativo de shellcoding. Se você quer uma ferramenta prática para escrever shellcodes, então shellen pode ser seu amigo. Shellen também pode ser usado como ferramenta de montagem (assembly) ou desmontagem (disassembly).
Os mecanismos keystone e capstone são usados para todas as operações do shellen.
Shellen só funciona no python3. O suporte a python2 pode aparecer no futuro.
Primeiro, você deve instalar as dependências do shellen:
$ sudo apt-get install cmake python3-dev python3-setuptools
Você pode instalar a versão estável do shellen usando pip3:
$ sudo pip3 install shellen
Ou, se você já tem todos os pacotes necessários (veja Requisitos):
$ python3 setup.py install
Se você tiver algum problema com a instalação do keystone-engine, então você deve compilar o keystone-engine (veja o arquivo COMPILE.md no repositório keystone)
Depois de instalar o shellen e seus pacotes necessários, você pode executar o shellen digitando o seguinte no seu terminal:
$ shellen
Você pode executar o comando help do shellen para obter informações sobre o uso do shellen.
Shellen monta e desmonta instruções, portanto há dois modos de uso: asm e dsm, respectivamente. Há outros recursos que incluem a pesquisa em tabelas de syscalls e a busca por shellcodes comuns.
O Shellen tem um prompt útil que exibe o modo atual, o SO (sistema operacional para syscalls) e a arquitetura escolhida do modo atual. O prompt do Shellen é assim:
L:asm:x86_32 >
Você pode editar sua entrada como se estivesse digitando em um terminal. Além disso, o shellen registra seu histórico de comandos (basta digitar a seta para cima para ver seus comandos anteriores).
L é o nome abreviado de Linux no prompt. Abaixo estão listados todos os outros nomes de SO:
L é LinuxW é WindowsM é MacOSSe você quiser mudar de SO, digite setos [linux/windows/macos] da seguinte forma:
L:asm:x86_32 > setos windows
[+] OS changed to windows.
Para mudar o modo atual, digite asm ou dsm no prompt.
L:dsm:arm32 > asm
[+] Changed to asm (assembly) mode
L:asm:x86_32 > dsm
[+] Changed to dsm (disassembly) mode
L:dsm:arm32 >
| Comando | Descrição |
|---|---|
clear | Limpa a tela do terminal. Como de costume, cls no Windows ou clear em sistemas *nix. |
help |
Para montar instruções, digite-as e separe-as com ponto e vírgula, como mostrado aqui:
L:asm:x86_32 > mov edx, eax; xor eax, eax; inc edx; int 80;
[+] Bytes count: 7
Raw bytes: "\x89\xc2\x31\xc0\x42\xcd\x50"
Hex string: "89c231c042cd50"
Se os bytes montados contiverem um byte nulo, o shellen vai avisar você sobre isso.
A desmontagem é semelhante à montagem. Em vez disso, digite seus bytes no prompt e veja o resultado!
L:dsm:x86_32 > 89c231c042cd50
0x00080000: mov edx, eax
0x00080002: xor eax, eax
0x00080004: inc edx
0x00080005: int 0x50
Além disso, você pode executar seu shellcode em um subprocesso. Esteja ciente de que isso pode prejudicar seu sistema!. Pule para o último shellcode em um subprocesso. O que poderia dar errado?' Observe que você não controla o endereço base onde seu código é carregado, e isso pressupõe que as instruções farão sentido para sua CPU. Veja helpdentro de shellen para saber como usar.
Estou planejando executar subprocesso em algum ambiente virtual para tornar mais seguro executar shellcode potencialmente perigoso.
Os modos asm e dsm funcionam para diferentes arquiteturas. Para ver uma lista de arquiteturas disponíveis para o modo atual do shellen, digite isto:
L:dsm:x86_32 > archs
┌────────┬────────┬─────────┬─────────┬────────┐
│ │ │ │ │ │
│ arm32 │ mips32 │ sparc32 │ systemz │ x86_16 │
│ arm64 │ mips64 │ sparc64 │ │ x86_32 │
│ arm_tb │ │ │ │ x86_64 │
└────────┴────────┴─────────┴─────────┴────────┘
Se você quiser alterar a arquitetura atual, digite o seguinte:
L:dsm:x86_32 > setarch arm32
[+] Architecture of dsm changed to arm32
Quando você cria um shellcode, você precisará de syscalls. Para consultar syscalls com o shellen, digite sys e o nome da syscall desejada. O shellen produzirá uma lista de syscalls que pode conter a syscall que você procurava.
L:asm:x86_32 > sys open
┌────────┬───────┬──────────────────────┬──────────────────────┬──────────────┬──────────────┐
│ name │ eax │ ebx │ ecx │ edx │ esi │
├────────┼───────┼──────────────────────┼──────────────────────┼──────────────┼──────────────┤
│ open │ 0x05 │ const char *filename │ int flags │ umode_t mode │ - │
│ openat │ 0x127 │ int dfd │ const char *filename │ int flags │ umode_t mode │
└────────┴───────┴──────────────────────┴──────────────────────┴──────────────┴──────────────┘
sys imprime uma lista de possíveis variantes para a syscall fornecida. A tabela de syscalls que o shellen pesquisa depende da arquitetura escolhida e do sistema operacional (SO). Nesse caso, a arquitetura é x86_32 e o SO é Linux.
O Shellen pode mostrar uma lista de shellcodes comuns dependendo da sua palavra-chave. A pesquisa por palavra-chave do Shellen usa a API do shell-storm.org (obrigado ao autor!) e pode ser usada assim:
L:asm:x86_32 > shell <keyword> <count>
Observe que o parâmetro count não é obrigatório. Há uma imagem da saída de shell <keyword> <count> na seção Imagens.
Atualmente, o shellen é suportado apenas no Linux. Se você quiser adicionar funcionalidade para Windows ou MacOS, então escreva uma issue e eu adicionarei suporte.
Se você encontrar um problema/bug ou algo assim, escreva uma issue sobre esse problema. Além disso, se você acha que um recurso será uma boa adição ao shellen, faça o mesmo -- escreva uma issue e eu tentarei adicionar o recurso solicitado.
asm e dsmApenas um pequeno punhado de imagens. (Elas estão desatualizadas por causa da adição de diferentes recursos)
| Exibe a mensagem de ajuda. |
quit,q,exit | Encerra a sessão atual e sai |