Sommaire

Bases des shellcodes

Un shellcode désigne un bout de code en langage machine. Il n’est ni plus ni moins qu’un programme très petit exécuté par votre processeur, il est donc capable de faire tout ce que peut faire n’importe quel programme.

1. Exemple 1 : shellcode.py

xor eax,eax 
xor ebx,ebx 
xor ecx,ecx 
xor edx,edx 
jmp short string 
code: 
pop   ecx; on place l’adresse mémoire de la phrase dans la pile 
mov bl,1 
mov dl,23 
mov al,4 
int 0x80; les quatre lignes précédentes forment le write() 
dec bl 
mov al,1 
int 0x80; les trois lignes précédentes composent le exit() 
string : 
call code 
db ’bonjour, tout le monde!’

Pour pouvoir utiliser ce code pour une attaque de type buffer overflow, nous voulons le transformer en code hexadécimal.

Pour cela, nous utilisons un programme réalisé en Python, donné ci-dessous (shellcode.py), qui transforme directement le code en hexadécimal. Pour la compréhension de ce programme, reportez-vous au livre de Gérard Swinnen (http://www.inforef.be/swi/download/python_notes.pdf).

Il faut que le programme en assembleur soit dans le même répertoire que shellcode.py.

shellcode.py

#!/usr/bin/env python 
import os  
 
file=raw_input("entrez le nom de votre programme en Assembleur\n") 
file1=file.split(’.’)  
command="nasm "+file+" -o "+file1[0]+".o" ...