Przyszedł mi do głowy ciekawy pomysł z tym związany. Tylko mam też pytanie.
Jest sobie Linux, który ma zabezpieczenie w postaci randomizacji adresów.
I teraz pojawia się pytanie.
Jeśli zrobimy coś takiego:
export SHELLCODE='tutaj_nasz_kod_bajtowy_shellcode_'
Następnie napiszemy coś takiego:
Kod:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
char *addr=getenv("SHELLCODE") ;
printf("%s", addr) ;
execve("./vuln", "./vuln", 0) ;
}
To czy po uruchomieniu programu vuln przy pomocy funkcji execve, adres zmiennej środowiskowej SHELLCODE będzie taki sam jak ten pokazany wcześniej przez funkcję getenv?
Uogólniając - czy jeśli z poziomu jednego programu uruchomimy inny program, to czy zostanie wykonana zmiana adresów wszystkich zmiennych środowiskowych itd. ?
EDIT: Zapomniałem o funkcji main
EDIT2: I funkcja execve musi mieć na końcu zero. Też zapomniałem.
EDIT3: I średnika po funkcji printf nie było.