問題
解いてみた
昨日まで全く気づきませんでしたが、200点の問題がまだ残ってました。
新規追加された?
ソースを見てみます。
picoCTF 2019 OverFlow 2 - Points: 250
https://qiita.com/CTFman/items/a52d658d15c2f902c3ee
これと同じ感じでvuln()のリターンアドレスをflag()の先頭にしてあげればよい問題だと思います。
今回は引数ないので前の問題よりラクな問題です。
まずはflag()の先頭アドレスを調べます。
flag()の先頭アドレスは0x0000000000400767だということがわかりました。
ん?いつもより桁数が多い気がします。
64bitかな?
64bitでした。
桁数が変わるだけで内容は一緒の考えで良いんですかね?
64bit初めてな気がします。
とりあえず今まで通りのやり方でやってみます。
次にするのは何文字入力すればvuln()のリターンアドレスが上書きされるか調べます。
適当に100文字いれて試してみます。
espないなーと思ってたら64bitなのでrspですね。
rspは0x37665866だということがわかりました。
リトルエンディアンに気を付けながら文字を調べます。
fXf7でした。
入力した文字列を確認すると73文字目からでした。
ここをflag()の先頭アドレスに書き換えて実行してみます。
んーダメでした。
近くのアドレスでやってみます。
?
popの次の位置に飛ばすとなぜかflagがでました。
謎です。