Sto cercando di imparare a eseguire shellcode da un programma, ma non riesco a ottenere nemmeno il codice di base da eseguire. Il seguente codice dovrebbe uscire dal terminale quando viene eseguito:Trasmissione di una stringa di caratteri come funzione
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/mman.h>
char exitcode[] = "\xb0\x01\x31\xdb\xcd\x80";
int main() {
int (*func)();
func = (int (*)())exitcode;
(int)(*func)();
return 0;
}
Ma tutto quello che ottengo è un segfault. GDB dice che sta accadendo quando il programma accede alla locazione di memoria di exitcode [at (int) (* func)(); ], ma non sono sicuro del motivo per cui ciò sta causando un problema. Sono in esecuzione un sistema operativo Linux Mint a 64 bit. Qualsiasi aiuto è molto apprezzato.
Se la memoria per lo shellcode si trova in una regione non eseguibile, questo non funzionerà. La maggior parte dei sistemi operativi moderni probabilmente non lo consentiranno. Dovresti anche assicurarti che lo shellcode sia corretto per la tua architettura. –
È quello per C o C++? Semantica e possibili risposte possono essere diverse. – Olaf
Lanciare un puntatore a un puntatore a una funzione è _undefined behaviour_. Tutto può succedere – Olaf