1月13日(火)2コマ目
今日、やったこと
バッファオーバーフロー1(前回からのつづき)
今日のホワイトボード
check()関数のローカル変数
デバッガで2つのローカル変数の位置を確認。
配列password_bufferの先頭から12バイトあとに変数auth_flagがあることがわかる。
![]() |
| 図 変数auth_flagと配列password_bufferの位置 |
配列password_bufferの先頭から29バイト目に変数auth_flagのエリアがあるため、strcpy()で変数auth_flagのエリアを上書きすることができる。
サンプルプログラムを実行する(正常系)
コマンドライン引数を"1234567890"で実行。
strcpy()実行後、メモリは下図のようになっている。
![]() |
| 図 2つの変数の状態(正常系の場合) |
サンプルプログラムを実行する(異常系)
コマンドライン引数を"12345678901234567890123456789"で実行。
strcpy()実行後、メモリは下図のようになっている。
![]() |
| 図 2つの変数の状態(異常系の場合) |
変数auth_flagのエリアに引数の最後の値"9"が書き込まれている。
この結果、check()関数の戻り値は0ではないため、31行目が実行される。
次回は
バッファオーバーフローのつづき。


