<aside> đźš©
Stack5 è un buffer overflow che introduce shellcode
</aside>
Sorgente:
main
→ crea un buffer di 64 byte e usa gets
per leggere input dall’utente#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char buffer[64];
gets(buffer);
}
L’obiettivo della sfida è eseguire codice arbitrario a tempo di esecuzione
Questo codice è scritto in linguaggio macchina con codifica esadecimale e viene iniettato tramite l’input. una scelta comune è l’esecuzione di una shell
Il programma accetta input locali da tastiera o da altro processo, l’input è una stringa generica
Piano d’attacco: produciamo un input contenente
Eseguendo stack5 con questo input otteniamo una shell di root. dato che stack5 è SETUID
La prima operazione da svolgere è la preparazione di uno shellcode tenendo presente che deve essere grande al più 76 byte e non deve contenere byte nulli (eof)
Lo shellcode da preparare consiste delle due istruzioni execve("/bin/sh");
exit(0);
Documentiamoci sulla chiamata di sistema man execve
e scopriamo che riceve 3 parametri in input: