今日はftzlevel3を解きます。

まず、昨日得たlevel3のパスワードでログインし、hintファイルをみると

autodigのソースコードと

more hintsに同時に複数の命令語をしようするには?

文字列で命令語を伝達するには?と書いています。

では、昨日と同じくfind命令語でlevel4のsuidがかかっているファイルを探します。

見つけたので、gdbでみてみます。

cmpでargcが二つか比較して、二つではないとそのまま下に行き、

”Auto Digger~~”と”Usage~~”をstackにpushして出力し、exit関数で終了します。

argcが二つだとmain+69にjumpします。

値をちゃんと入れたとして進めますwwww(一応確認はしました。)

ここではstrcpy(cmd,dig@); 関数です。

dig@とcmdの住所をpushして、strcpy関数を呼び出します。

そしたらdig @になりますね。

次はargv[0]に+4してargv[1]にさせてstackにpushします(8.8.8.8は私が入れた値です。)

そして、cmdのdig@の住所もpushしてstrcat関数を呼び出します。

そしたらdig @8.8.8.8になります。

そして、もう一回”version~~”とcmdの住所をstackにpushして

strcat関数を呼び出します。

その後0xbbcを二回pushしてsetreuid関数を呼び出します。(10進数で3004です)

最後にcmdの住所をpushしてsystem関数を呼び出します。

そしたらlevel5の権限でdig @8.8.8.8 version.bind~~~になります。

これで全体的な分析は終わりましたので本格的に(自分の中では)

攻撃します。

 

linuxでは一列で複数の命令語を実行させるには ; ←これを使用します。

こう入れて実行させてみると?

 

ん。。。level3のパスワードが出ますね。。。。

;←これだけだと8.8.8.8が実行して終わった後、my-passが実行されるので

level3の権限でmy-passが実行されます。(8.8.8.8まではlevel4です。)

では、あの二つの引数を一つの引数として伝達する方法は。。。??

””←これです!!””これを使うと8.8.8.8とmy-passを一つの引数として伝達することが

できます!

では、やってみます。

こうやって実行すると!!

出ました!!