問題
解いてみた
添付ファイルをダウンロードして、解凍します。
何のファイルかわからないのでBZで見たところ、ELFファイルでした。
Linuxの実行ファイルです。Windowsでいうexeみたいなイメージ。
bintextでフラグがないか見てみます。
flagの中は変数が入るっぽくて答えは分かりませんでした。
直前に怪し目な文字列があったので勘でやってみましたが、どちらも違いました。
- CTF{0n3_W4rM}
- CTF{zLl1ks_d4m_T0g_I}
IDAを使ってフローを見てみます。
なんか正解するとflagが出てきそうです。
アセンブリを読むのは骨が折れるのでUbuntuで動かしてみます。
引数にユーザ名とパスワードを入力してくれというエラーで何もすることなく終了しました。
ユーザ名とパスワードわかりませんが、さっきの文字列が怪しげなのでやってみます。
ダメでした。ユーザ名とパスワードを逆にしてみます。
ダメでした。
が、よく読んでなかったのでさっき気づきませんでしたが
Incorrect username
という文字があることに気づきました。
最初のときはパスワードが違うというエラーで今回はユーザ名が違うというエラー。
ということは1回目はユーザ名はあっていたということになりそうです。
もう一度IDAを見てみます。
単純に文字列を比較しているだけっぽいので、あってると思うのですが。。。
と思ったらその前の右に行く処理がちょっと気になります。
右に行くとまた上に戻るようです。
もしかしたら入力した文字列を編集しているのかもしれません。
が、アセンブラが読めません。
調べたところ
Linuxのltraceコマンドを使うと関数呼び出しを見ることができるようです。
これでstrcmpを見ればいいのではないでしょうか。
やってみます。
大量のデータがあふれてきてこれは厳しい。
ファイルに出力します。
そしてtest.txtの中からstrcmpを見ます。
パスワードの1つ目の引数の文字がひっくり返ってる。
さっきのIDAを見る限り1つ目の引数はたぶん入力の文字列の方だと思いますが、一応確認してみます。
これを実行して再度test.txtのstrcmpを見ます。
はやり入力した文字列がひっくり返るようです。
さっきの謎の処理のところでひっくり返しているんでしょう。
なのでひっくり返した文字列を引数にして再度実行してみます。
やりました。