Passaggio dei parametri del codice shell

1

Sto cercando di utilizzare una variabile di ambiente per memorizzare il mio shellcode e quindi puntare il mio RET su di esso, in modo che possa arrivare a eseguire il mio shellcode. Ecco il mio programma vulnerabile 'abc.c'

#include string.h
#include stdio.h

void foo(const char* str){
 char buf[100];
 printf("\n%p\n",buf);
 strcpy(buf,str);
}
int main(int argc, const char* argv[]){

 foo(argv[1]);
}

Ho seguito finora i seguenti passaggi

$gcc -z execstack -fno-stack-protector -o abc abc.c 

Usando getenv () in un altro programma ho determinato quale fosse l'indirizzo del mio shellcode. Diciamo che è un po 'di 0xbfffc209

Utilizzo  %codice% si blocca senza pietà il mio programma, ma se uso un indirizzo al posto dei quattro A il mio programma esce in modo pulito.

Uso di A's

OrastiamousandounindirizzoinformatoIntel

Comesipuòvedere,nullaèstatosovrascritto.L'outputdiltracecon

$./abc$(python-c'print"AAAA"*30') e anche

$ltrace ./abc $(python -c 'print "\x09\xc2\xff\xbf"*30') è

Sono totalmente sconcertato da un comportamento inspiegabile di questo tipo e sarei lieto se qualcuno potesse aiutarmi a capire perché questo sta accadendo così.

Grazie in anticipo

PS

  1. Uso una macchina virtuale Ubuntu 14.04 a 32 bit

  2. Ottengo gli stessi risultati lanciati da me, indipendentemente dall'indirizzo che uso

posta user148898 13.08.2017 - 23:55
fonte

1 risposta

3

Non tutti i personaggi nel tuo payload possono essere inviati attraverso l'argv del tuo binario. Ci sono alcuni "brutti personaggi" che non puoi avere nel tuo shellcode. Un esempio è "\ x00" dato che stai usando strcpy per copiare le stringhe e "\ x00" è il delimitatore per le tue stringhe. Quindi, innanzitutto, scopri quali sono i caratteri sbagliati per la tua piattaforma e quindi crea un payload privo di quei byte.

PS: avrei potuto commentarlo, ma avevo solo 49 reputazione.

    
risposta data 21.12.2017 - 09:43
fonte

Leggi altre domande sui tag