今日は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を一つの引数として伝達することが
できます!
では、やってみます。
こうやって実行すると!!
出ました!!







