Indirizzo della variabile di ambiente diverso per ogni directory

5

Sto scrivendo un attacco return-to-libc per un progetto scolastico. Il mio script recupera il sistema (), exit () e gli indirizzi della shell come segue (è uno sh script che chiama alcuni programmi c):

Crea la variabile d'ambiente per la shell xh:      export egg=/bin/xh

Recupera l'indirizzo della shell xh: printf("%p\n", getenv("egg"));

Ottieni l'indirizzo di system (): void (*system_addr)(int) = dlsym(RTLD_NEXT, "system");

Ottieni l'indirizzo di exit (): void (*exit_addr)(int) = dlsym(RTLD_NEXT, "exit");

Quindi overflow il buffer con la quantità corretta di filler + indirizzo di system() + indirizzo di exit() + indirizzo di /bin/xh .

L'exploit si trova in una cartella chiamata /vuln_programs . Non possiamo scrivere in questa directory, quindi sto lavorando su una copia locale nella mia directory sul server.

Il problema è che quando eseguo lo script nella mia directory di lavoro sulla mia copia locale ( ./vuln_program ), la shell xh viene rilasciata correttamente. Ma quando eseguo lo script nella mia directory di lavoro su /vuln_programs/vuln_program non succede nulla.

La mia ipotesi è che questo sia dovuto al fatto che l'indirizzo dell'uovo non è più lo stesso, anche se il mio script lo inserisce / ottiene nell'ambiente. Ho ragione su questa ipotesi e come posso risolvere questo?

Potrebbe essere importante notare che tutti i binari in /vuln_programs hanno un set set bit bit.

    
posta Thomas Vanhelden 14.12.2015 - 18:49
fonte

0 risposte

Leggi altre domande sui tag