
🌸 Environnement interactif de shellcoding pour créer facilement des shellcodes
Shellen est un environnement interactif de shellcoding. Si vous voulez un outil pratique pour écrire des shellcodes, alors shellen peut être votre ami. Shellen peut également être utilisé comme outil d'assemblage ou de désassemblage.
Les moteurs keystone et capstone sont utilisés pour toutes les opérations de shellen.
Shellen fonctionne uniquement avec python3. Le support de python2 pourrait apparaître à l'avenir.
Tout d'abord, vous devriez installer les dépendances de shellen :
$ sudo apt-get install cmake python3-dev python3-setuptools
Vous pouvez installer la version stable de shellen en utilisant pip3 :
$ sudo pip3 install shellen
Ou si vous disposez déjà de tous les paquets requis (voir Prérequis) :
$ python3 setup.py install
Si vous rencontrez des problèmes avec l'installation de keystone-engine, vous devriez compiler keystone-engine (voir le fichier COMPILE.md dans le dépôt keystone)
Après avoir installé shellen et ses paquets requis, vous pouvez lancer shellen en tapant ce qui suit dans votre terminal :
$ shellen
Vous pouvez exécuter la commande help de shellen pour obtenir des informations sur l'utilisation de shellen.
Shellen assemble et désassemble des instructions, il existe donc deux modes d'utilisation : asm et dsm respectivement. Il existe également d'autres fonctionnalités, notamment la recherche dans les tables de syscalls et la recherche de shellcodes courants.
Shellen possède une invite utile qui affiche le mode actuel, l'OS (système d'exploitation pour les syscalls) et l'architecture choisie pour le mode actuel. L'invite de shellen ressemble à ceci :
L:asm:x86_32 >
Vous pouvez modifier votre saisie comme si vous tapiez dans un terminal. De plus, shellen enregistre l'historique de vos commandes (appuyez simplement sur la flèche vers le haut pour voir vos commandes précédentes).
L est le nom abrégé de Linux dans l'invite. Voici la liste de tous les autres noms d'OS :
L est LinuxW est WindowsM est MacOSSi vous voulez changer d'OS, tapez setos [linux/windows/macos] comme suit :
L:asm:x86_32 > setos windows
[+] OS changed to windows.
Pour changer de mode actuel, entrez asm ou dsm dans l'invite.
L:dsm:arm32 > asm
[+] Changed to asm (assembly) mode
L:asm:x86_32 > dsm
[+] Changed to dsm (disassembly) mode
L:dsm:arm32 >
| Commande | Description |
|---|---|
clear | Efface l'écran du terminal. Comme d'habitude, cls sur Windows ou clear sur les systèmes *nix. |
Pour assembler des instructions, tapez-les et séparez-les par des points-virgules comme indiqué ici :
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"
Si vos octets assemblés contiennent un octet nul, shellen vous en informera.
Le désassemblage est similaire à l'assemblage. À la place, tapez vos octets dans l'invite et voyez le résultat !
L:dsm:x86_32 > 89c231c042cd50
0x00080000: mov edx, eax
0x00080002: xor eax, eax
0x00080004: inc edx
0x00080005: int 0x50
De plus, vous pouvez exécuter votre shellcode dans un sous-processus. Sachez que cela peut nuire à votre système !. Lancez le dernier shellcode dans un sous-processus. Qu'est-ce qui pourrait mal tourner ?' Notez que vous ne contrôlez pas l'adresse de base à laquelle votre code est chargé, et cela suppose que les instructions ont du sens pour votre CPU. Voir help à l'intérieur de shellen pour savoir comment l'utiliser.
Je prévois d'exécuter le sous-processus dans un environnement virtuel afin de rendre plus sûre l'exécution de shellcodes potentiellement dangereux.
Les modes asm et dsm fonctionnent pour différentes architectures. Pour voir la liste des architectures disponibles pour le mode actuel de shellen, tapez ceci :
L:dsm:x86_32 > archs
┌────────┬────────┬─────────┬─────────┬────────┐
│ │ │ │ │ │
│ arm32 │ mips32 │ sparc32 │ systemz │ x86_16 │
│ arm64 │ mips64 │ sparc64 │ │ x86_32 │
│ arm_tb │ │ │ │ x86_64 │
└────────┴────────┴─────────┴─────────┴────────┘
Si vous voulez changer l'architecture actuelle, entrez ce qui suit :
L:dsm:x86_32 > setarch arm32
[+] Architecture of dsm changed to arm32
Lorsque vous créez un shellcode, vous aurez besoin de syscalls. Pour rechercher des syscalls avec shellen, tapez sys et le nom du syscall souhaité. Shellen produira une liste de syscalls qui peut contenir le syscall que vous cherchez.
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 affiche une liste de variantes possibles pour le syscall fourni. La table de syscalls que shellen parcourt dépend de l'architecture choisie et du système d'exploitation (OS). Dans ce cas, l'architecture est x86_32 et l'OS est Linux.
Shellen peut vous montrer une liste de shellcodes courants en fonction de votre mot-clé. La recherche par mot-clé de shellen utilise l'API de shell-storm.org (merci à l'auteur !) et peut être utilisée comme ceci :
L:asm:x86_32 > shell <keyword> <count>
Notez que le paramètre count n'est pas requis. Il y a une image de la sortie de shell <keyword> <count> dans la section Images.
Actuellement, shellen n'est pris en charge que sur Linux. Si vous voulez ajouter des fonctionnalités pour Windows ou MacOS, ouvrez une issue et j'ajouterai le support.
Si vous trouvez un problème/bug, ouvrez une issue à propos de ce problème. De plus, si vous pensez qu'une fonctionnalité serait un bon ajout à shellen, faites de même -- ouvrez une issue et j'essaierai d'ajouter la fonctionnalité demandée.
asm et dsmJuste une petite collection d'images. (Elles sont obsolètes en raison de l'ajout de différentes fonctionnalités)
help| Affiche le message d'aide. |
quit,q,exit | Termine la session en cours et quitte |