
🌸 Ambiente interattivo di shellcoding per creare facilmente shellcode
Shellen è un ambiente interattivo per lo shellcoding. Se vuoi uno strumento pratico per scrivere shellcode, allora shellen potrebbe fare al caso tuo. Shellen può essere usato anche come strumento di assembly o disassembly.
I motori keystone e capstone sono usati per tutte le operazioni di shellen.
Shellen funziona solo con python3. Il supporto a python2 potrebbe arrivare in futuro.
Per prima cosa, dovresti installare le dipendenze di shellen:
$ sudo apt-get install cmake python3-dev python3-setuptools
Puoi installare la versione stabile di shellen usando pip3:
$ sudo pip3 install shellen
Oppure, se hai già tutti i pacchetti richiesti (vedi Requisiti):
$ python3 setup.py install
Se hai problemi con l'installazione di keystone-engine, dovresti compilare keystone-engine (vedi il file COMPILE.md nel repository keystone)
Dopo aver installato shellen e i suoi pacchetti richiesti, puoi eseguire shellen digitando quanto segue nel terminale:
$ shellen
Puoi eseguire il comando help di shellen per ottenere informazioni sull'uso di shellen.
Shellen assembla e disassembla istruzioni, quindi ci sono due modalità d'uso: rispettivamente asm e dsm. Ci sono altre funzionalità, tra cui la ricerca nelle tabelle delle syscall e la ricerca di shellcode comuni.
Shellen ha un prompt utile che mostra la modalità corrente, il sistema operativo (OS per le syscall) e l'architettura scelta per la modalità corrente. Il prompt di shellen si presenta così:
L:asm:x86_32 >
Puoi modificare l'input come se stessi digitando in un terminale. Inoltre, shellen registra la cronologia dei tuoi comandi (basta premere la freccia su per vedere i comandi precedenti).
L è il nome abbreviato di Linux nel prompt. Di seguito sono elencati tutti gli altri nomi di sistemi operativi:
L è LinuxW è WindowsM è MacOSSe vuoi cambiare sistema operativo, digita setos [linux/windows/macos] come segue:
L:asm:x86_32 > setos windows
[+] OS changed to windows.
Per cambiare modalità corrente, inserisci asm o dsm nel prompt.
L:dsm:arm32 > asm
[+] Changed to asm (assembly) mode
L:asm:x86_32 > dsm
[+] Changed to dsm (disassembly) mode
L:dsm:arm32 >
| Comando | Descrizione |
|---|---|
clear | Pulisce lo schermo del terminale. Come al solito cls su Windows o clear sui sistemi *nix. |
Per assemblare istruzioni, digitale e separale con punti e virgola come mostrato qui:
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 i byte assemblati contengono un byte nullo, shellen te lo farà notare.
Il disassemblaggio è simile all'assemblaggio. Invece, digita i tuoi byte nel prompt e guarda il risultato!
L:dsm:x86_32 > 89c231c042cd50
0x00080000: mov edx, eax
0x00080002: xor eax, eax
0x00080004: inc edx
0x00080005: int 0x50
Inoltre, puoi eseguire il tuo shellcode in un sottoprocesso. Tieni presente che questo può danneggiare il tuo sistema!. Salta all'ultimo shellcode in un sottoprocesso. Cosa potrebbe mai andare storto?' Nota che non puoi controllare l'indirizzo di base a cui il tuo codice viene caricato, e questo presuppone che le istruzioni abbiano senso per la tua CPU. Consulta help all'interno di shellen per vedere come usarlo.
Ho intenzione di eseguire il sottoprocesso in un qualche ambiente virtuale per rendere più sicura l'esecuzione di shellcode potenzialmente pericolosi.
Le modalità asm e dsm funzionano per diverse architetture. Per vedere un elenco delle architetture disponibili per la modalità corrente di shellen, digita questo:
L:dsm:x86_32 > archs
┌────────┬────────┬─────────┬─────────┬────────┐
│ │ │ │ │ │
│ arm32 │ mips32 │ sparc32 │ systemz │ x86_16 │
│ arm64 │ mips64 │ sparc64 │ │ x86_32 │
│ arm_tb │ │ │ │ x86_64 │
└────────┴────────┴─────────┴─────────┴────────┘
Se vuoi cambiare l'architettura corrente, inserisci quanto segue:
L:dsm:x86_32 > setarch arm32
[+] Architecture of dsm changed to arm32
Quando crei uno shellcode, avrai bisogno delle syscall. Per cercare le syscall con shellen, digita sys e il nome della syscall desiderata. Shellen produrrà un elenco di syscall che potrebbe contenere la syscall che stavi cercando.
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 stampa un elenco delle possibili varianti per la syscall fornita. La tabella delle syscall che shellen esamina dipende dall'architettura e dal sistema operativo (OS) scelti. In questo caso, l'architettura è x86_32 e il sistema operativo è Linux.
Shellen può mostrarti un elenco di shellcode comuni in base alla tua parola chiave. La ricerca per parola chiave di shellen utilizza l'API di shell-storm.org (grazie all'autore!) e può essere usata così:
L:asm:x86_32 > shell <keyword> <count>
Nota: il parametro count non è obbligatorio. C'è un'immagine dell'output di shell <keyword> <count> nella sezione Immagini.
Attualmente, shellen è supportato solo su Linux. Se vuoi aggiungere funzionalità per Windows o MacOS, apri una issue e aggiungerò il supporto.
Se trovi un problema/bug o qualcosa del genere, apri una issue su questo problema. Inoltre, se pensi che una funzionalità sarebbe una bella aggiunta a shellen, fai lo stesso -- apri una issue e cercherò di aggiungere la funzionalità che hai richiesto.
asm e dsmGiusto un piccolo gruppo di immagini. (Sono datate a causa dell'aggiunta di diverse funzionalità)
help| Mostra il messaggio di aiuto. |
quit,q,exit | Termina la sessione corrente ed esce. |