BOFとは?

決まってる空間に決まってる分の値を入れなきゃいけないのに、制限をしなくて

決まってる空間より多くの値を入れられる弱点(あ。。日本語あってるかな)

 

まず、ソースコードは

すごく、簡単なソースだな。。ww

 

このソースファイルをgccを利用して実行ファイルを作りまーす。

その後、gdbで開こうー

main関数のところをみるとこんな感じ!

scanfをcallする前にesptpesp+04に値を入れるのが見えます。

なぜ、二つでしょうか?

scanfを使用する時、入れた値が二つありましたね。

一つは”%s”!!あと一つはbuf!

この二つを利用するので、値を入れ、stackに入れるんです。

この二つがそれです!!

0x080484d4には%sです。そしたら、0xbffff690はbufですね。

scanfを実行して確認してみたら、値が見えます。

私は1234を入れましたが値は逆の順に入ってますね。

それはlittleendian bigendianの差?です。(値が入る方向)

 

では、一番上に書いてる通り制限がないので値をもっと入れてみましょう。

おー12345678まで入れてました。

宣伝したbufの空間とぴったり!!では、もっと入れてみましょう。

おー0xbffff700を私が入力した数字に書き換えられました。

このまま、実行するとこんな画面が出てきました。

なぜ?????????????????????????

もし、あの値が0x36353433に書き換えられなかったら。

正常に0x004c5d36に移動したはずです。

入力が間違えてましたので修正しました。

 

ここで重要なのはSFPRETです。

SFP=Save Frame Pointer

RET=return

この説明も書こうとしましたが(私は初心者です。)、

また、次回に。。。。

今日はもう、遅いのですみません。

毎週土曜日か日曜日はなるべく書くように

頑張ります!!

そして、it関係の方、仲良くしてくださったら

ありがたいです!