Stack 0

<aside> 🚩

This level introduces the concept that memory can be accessed ouside its allocated region, how the stack variables are laid out, and that modifying outside of the allocated memory can modify program execution

</aside>

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv)
{
	volatile int modified;
	char buffer[64];
	
	modified = 0;
	gets(buffer);
	
	if(modified != 0) {
	printf("you have changed the 'modified' variable\\n");
	} else {
		printf("Try again?\\n");
	}
}

L’obiettivo della sfida è la modifica del valore della variabile modified a tempo di esecuzione

// info su protostar

Analisi del sorgente

Il programma stampa un messaggio di conferma se la variabile modified è diversa da zero

Notiamo inoltre che le variabili modified e buffer sono spazialmente vicine

Idea: scrivere 68 byte in buffer

Funzione gets()

gets() è deprecata in favore di fgets() che limita i caratteri letti

→ non c’è controllo sul buffer overflow

→ gets() permette input più grandi di 64 byte

Comando pmap

Stampa il layout di memoria di un processo in esecuzione

Dall’output di pmap vediamo che il layout di memoria è organizzato in diverse aree