今日はlevel5を解きます。

今まで通りこの前取得したlevel5のパスワードでログインし、

hintを確認します。

/usr/bin/level5プログラムは/tmpディレクトリにlevel5.tmpという名前の臨時ファイルを

生成すると書かれています。

 

ここで、使える攻撃方法はレースコンディション(Race Condition)です。

今回は競争状態が起きてる状況の中で重要な情報が入ってるファイルの所有を競争

できる状況になります。

早速、/tmpに移動して/usr/bin/level5を実行した後、確認しましたが、

どうやら、できてすぐ削除されるらしいです。

なので、gdbで確認してみました。

(level5権限ではできないため、level6のアカウントでしました。)

これが内容です!

0x180と0x8048580をstackにpushしてcreat関数を呼び出します。

0x180は2進数で00011000000です。

これはlinuxでchmod命令語を利用し権限を付与する体系を適用すると000 110 000 000に

分けれるし分けた結果をみると0600権限を付与することが分かります。

そして、ファイル生成に成功するとmain+88にjumpしwrite関数でファイルに

パスワードを書き込んだ後、閉じてremove関数で削除します。

もし、ファイル生成に失敗した場合”Can not creat a temporary file.\n”を出力し

remove関数で削除します。

 

では、攻撃コードを書きます。

まず、これは/usr/bin/level5をバックグラウンドで10000回繰り返すコードです。

レースコンディションは瞬間的なタイミングを狙うので10000回くらいにしました。

これのファイル名はkougeki.cにしました。

次のコードはシンボリックリンクをかけるコードです。(これも10000回です)

/usr/bin/level5を10000回実行してる時、一瞬出来る臨時ファイルが削除される前にhyunseok.txtファイルにシンボリックリンクをかける作業を繰り返します

いつかは成功するのでしょう。

成功した場合はhyunseok.txtにlevel5.tmpの内容が書き込まれます。

このファイル名はkougeki2.cにしました。

説明が難しいですが、/usr/bin/level5を実行すると

1.ファイルを生成

2.ファイルにパスワードを書き込む

3.ファイルを削除の順です。

私たちが狙ってるタイミングは2番と3番の間です。

 

シンボリックリンクの原本(日本語あってるかな。。)hyunseok.txtファイルを作ります。

内容はどうでもいいです。

その後、gcc -o kougei.c kougekiとgcc -o kougeki2.c kougeki2で

コンパイルして

./kougeki &

./kougeki2

(&を付けないと、すぐシェールを使用することができません。&はバックグラウンドで実行させるコマンド?文字?特殊文字?とりあえずそれです!!)

で実行した後

hyunseok.txtにnext passwordが書かれているのが確認できます!