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行目が実行される。


次回は

バッファオーバーフローのつづき。

このブログの人気の投稿

1月13日(火)3コマ目

2月2日(月)4コマ目

2月10日(火)3コマ目