Shellcode che ottiene l'errore di segmentazione su vmware

1

Sto imparando lo sfruttamento e ho scaricato alcuni shellcode execve ("/ bin / sh") da exploit-db per usarlo in un semplice esempio di buffer overflow. Quando eseguo il programma ricevo un errore di segmentazione. Sto eseguendo questo su kali linux in vmware.

Ecco il codice:

#include<stdio.h>
#include<string.h>

const char sc[] = \
"\x01\x30\x8f\xe2\x13\xff\x2f\xe1"
"\x03\xa0\x52\x40\xc2\x71\x05\xb4"
"\x69\x46\x0b\x27\x01\xdf\x7f\x40"
"\x2f\x62\x69\x6e\x2f\x73\x68\x41";

void main()
{
         printf("Shellcode Length: %d\n", strlen(sc));
         ((void(*)(void))sc)();
}

Ecco come è compilato:

gcc -z execstack -fno-stack-protector shell.c -o shell
  1. Potrebbe essere causato eseguendolo su vmware?
  2. È possibile che ci sia qualcosa di sbagliato nello shellcode, ma sto ricevendo SIGSEGV invece di SIGILL?
  3. C'è qualcosa di sbagliato nel modo in cui eseguo il codice in questo programma C?
posta xoreaxeax 05.12.2018 - 22:25
fonte

1 risposta

1

Stai eseguendo il codice macchina ARM su una macchina x86. Certo che non funzionerà. Se sta dando SIGSEGV (che accade quando viene generato un errore di protezione generale, #GP (0), invece di SIGILL (che si verifica quando viene trovata un'istruzione illegale o sconosciuta) nonostante sia stata compilata per un'architettura diversa, i primi i byte dello shellcode ARM devono essere stati interpretati come codice macchina x86 legale. L'ISA x86 è estremamente complicato e qualsiasi assortimento casuale di byte ha una probabilità non trascurabile di essere tecnicamente valido x86. Anche se può essere stato decodificato correttamente, fa qualcosa di totalmente non intenzionale, il che solo così può innescare un errore di protezione generale prima che tutto ciò che non può essere interpretato come x86 valido venga raggiunto.

    
risposta data 10.12.2018 - 10:38
fonte

Leggi altre domande sui tag