Stack 5

<aside> đźš©

Stack5 è un buffer overflow che introduce shellcode

</aside>

Sorgente:

#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: