Lavorare attraverso un corso di sfruttamento binario pubblicato da RPI alcuni anni fa. Attualmente nel laboratorio ASLR e avendo qualche problema con esso (anche se non con le parti correlate all'ASLR). Non riesco a capire come sfruttare per iniziare, per poi affrontare la complessità aggiuntiva del bypass ASLR.
Ecco il codice (in esecuzione su Ubuntu a 32 bit):
link
Penso che da quando hanno compilato senza il canarino ci sia un overflow da sfruttare. Sembra che tutte le dimensioni siano state controllate correttamente eccetto per il ciclo one for ma c'è anche qualche comportamento strano che non capisco.
Cose che faccio / non so o ho provato:
1. Se scrivo 40 caratteri nel nome utente, il ciclo for sovrascrive un byte del campo della lunghezza del messaggio.
2. Se il nome utente è molto lungo, parte del campo tweet viene sovrascritta e l'input dell'utente per fgets sulla riga 58 viene saltato e il tweet non è più vuoto (questa è la parte che non riesco a capire). In set_tweet, la memoria viene azzerata all'inizio comunque, quindi se ci fossero dati vecchi lì, come non potrebbe essere cancellato?
3. Se potessi sovrascrivere più di 1 byte della lunghezza del messaggio della struct, potrei trasferire più di un grande readbuf in tweet e scavalcare quella struttura in altra memoria. La compilazione del test con 41 anziché 40 nel ciclo for lo conferma.