H30春午後1問1  設問2

やさかさん  
(No.1)
この問題ですが、プログラミング経験があまりないため、
問題文でやっていることがあまりよくわかりません。
以下のような認識でよいでしょうか?

設問2  
・ここでやりたいことは、「0x12345678」のアドレスに、
画面で入力した攻撃コードを書き込むこと。
・RegisterNameの入力値のバイト列は「785634120a」になるので、
実際の操作では「xV4(DC…装置制御2)(LF…改行)」という文字列を
画面で入力。
・name[0]…x  name[1]…V  name[2]…4 name[3]…DC
が文字配列の各要素にそれぞれセットされる。(改行は読み捨て)
・2回目のRegisterNameの呼び出しでは、
nameにすでにアドレス値がセットされているため、
2番目のif文内の処理だけ実行される。(20行目)
・今、nameが指すアドレスは「12345678」のため、
「12345678」に2回目のRegisterNameでの入力値(攻撃コード)
が書き込まれる。(下線②の内容)

下線①、②の内容と、後述の共有ライブラリの関数テーブルは関係ない気が
するのですが、その認識であっていますか?
また、バッファオーバーフローは今回の攻撃手法(Use-After-Free)
と関係あるのでしょうか?









2021.04.08 05:11
関数従属さん 
(No.2)
>・ここでやりたいことは、「0x12345678」のアドレスに、
>画面で入力した攻撃コードを書き込むこと。

→「0x12345678」以降のアドレス(先頭アドレスが「0x12345678」)に
  攻撃コードを書き込むことになります。

>・RegisterNameの入力値のバイト列は「785634120a」になるので、
>実際の操作では「xV4(DC…装置制御2)(LF…改行)」という文字列を
>画面で入力。

→上記の通りとなります。

>・name[0]…x  name[1]…V  name[2]…4 name[3]…DC
>が文字配列の各要素にそれぞれセットされる。(改行は読み捨て)

→上記の通りとなります。

>・2回目のRegisterNameの呼び出しでは、
>nameにすでにアドレス値がセットされているため、
>2番目のif文内の処理だけ実行される。(20行目)

→上記の通りとなります。

>・今、nameが指すアドレスは「12345678」のため、
>「12345678」に2回目のRegisterNameでの入力値(攻撃コード)
>が書き込まれる。(下線②の内容)

→「0x12345678」以降のアドレス(先頭アドレスが「0x12345678」)に
  攻撃コードが書き込まれます。

>下線①、②の内容と、後述の共有ライブラリの関数テーブルは関係ない気が
>するのですが、その認識であっていますか?

→上記で攻撃コードは書き込まれましたが、攻撃者としては攻撃コードを実行しなければなりません。
  例えば、上記と同様の手法で関数テーブルのscanfの実行コードの先頭アドレスの値を
  「0x12345678」に書き換えると、scanf関数が呼び出された際、
  scanfの実行コードの先頭アドレスの値を取得しますが、その値が「0x12345678」であり
  scanfを実行するつもりが、攻撃コードが実行されるという事になります。

>また、バッファオーバーフローは今回の攻撃手法(Use-After-Free)
>と関係あるのでしょうか?

→バッファオーバーフローはこの問の主題ではありませんが
  メモリ上に攻撃コードを書き込む点は同じであり、
  そういう意味の関係はあります。
2021.04.08 22:30

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop