問題
解いてみた
いやこの問題も前までありませんでしたよね?
オーバーフロー勉強したいのでありがたいですが。
ソースを見ます。
ちょっと長めです。
main()から軽く見るとvuln()を呼んで終了。
呼ばれないflag()がある。
vuln()からmain()に戻るときに戻り先をflag()にすればよい?
win_fn2()とwin_fn()は必要?
何かの罠?
罠かわかりませんが、vuln()のリターンアドレスを変更する作戦でやってみます。
まずはflag()のアドレスを調べます。
flag()の先頭は0x000000000040084dだということがわかりました。
桁数多いから64bitぽいです。
やはり64bitでした。
つぎはvuln()のリターンアドレスが格納される位置を確認します。
適当に200文字入れてどうなるか確認します。
ということで0x4e6a6b50が格納されていました。
これをCyberChefで確認します。
リトルエンディアンに気を付けます。
PkjNです。
73文字目でした。
ではここをflag()の先頭アドレスである0x000000000040084dにします。
やっぱよくわからないんですが、64bitの時は1つずらさないといけないみたいです。
そしてwin_fn2()とwin_fn()はなんだったんでしょうか?
pwnかなり苦手意識あったけど、このくらいのイージーレベルならさくっと解けるようになってきた。