HOME»情報処理安全確保支援士掲示板»H30春 午後1 問1 設問8
投稿する
H30春 午後1 問1 設問8 [1044]
ビギナーさん(No.1)
H30春 午後1 問1 設問8 の解答が DisplayNote() ですが、
これとRegisterName のどこに着目すれば問題文の通りASLR有効下でも共有ライブラリ内のメモリアドレスを特定できるのでしょうか?
これとRegisterName のどこに着目すれば問題文の通りASLR有効下でも共有ライブラリ内のメモリアドレスを特定できるのでしょうか?
2023.03.20 22:59
pixさん(No.2)
★SC ダイヤモンドマイスター
メンバ関数でDisplayNote()のみ、メンバ変数をprintf()で出力しています。
本来それぞれの変数には、
m_note->name:ノート名を格納したアドレス
m_note->msg:メッセージ内容格納したアドレス
が格納されています。
しかし、図3の脆弱性を悪用されることにより、以下の方法で共有ライブラリの
アドレスを特定することができる可能性があります。
1.図3の脆弱性を利用し、m_note->nameに任意のメモリのアドレスをセットする
2.DisplayNote()内のprintf()でm_note->nameが指し示すメモリの内容を表示させる
3. この操作をアドレスを特定するまで繰り返す
この問題はCやC++でポインタを使ったことがないとイメージが難しいです。
特にダングリングポインタ(参照先のないポインタ)についての知識が必要に
なります。
本来それぞれの変数には、
m_note->name:ノート名を格納したアドレス
m_note->msg:メッセージ内容格納したアドレス
が格納されています。
しかし、図3の脆弱性を悪用されることにより、以下の方法で共有ライブラリの
アドレスを特定することができる可能性があります。
1.図3の脆弱性を利用し、m_note->nameに任意のメモリのアドレスをセットする
2.DisplayNote()内のprintf()でm_note->nameが指し示すメモリの内容を表示させる
3. この操作をアドレスを特定するまで繰り返す
この問題はCやC++でポインタを使ったことがないとイメージが難しいです。
特にダングリングポインタ(参照先のないポインタ)についての知識が必要に
なります。
2023.03.21 01:00
ビギナーさん(No.3)
pixさん
なるほど、printfで攻撃者がメモリの内容を確認できてしまうのですね。納得しました。
分かりやすい説明ありがとうございます。
なるほど、printfで攻撃者がメモリの内容を確認できてしまうのですね。納得しました。
分かりやすい説明ありがとうございます。
2023.03.21 10:03