0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

picoCTF 2018 quackme - Points: 200

Posted at

問題

image.png

解いてみた

まずはプログラムをダウンロードします。
mainというファイルでした。
念のためBZで見てみます。

image.png

ELFファイルでした。
一応「pico」で検索してみましたが、ありませんでした。

とりあえず動かしてみます。

image.png

一応オーバーフロー的な話の可能性もあるので大量の文字を入力してみます。

image.png

特に変化はありません。
IDAを使ってみます。

image.png

mainの中ごろに起動したときに表示される文字列があります。
その間でcallされているdo_magicが怪しいので中を見てみます。

image.png

ループがあったあとに分岐があって「You are winner」とか書いてあるのでここに行けるようにしたらうれしいことがありそうです。

ループの中身を見てみます。

image.png

8048858hっていうのはダブルクリックすると

image.png

だということがわかります。
greetingMessageっていうのはこれもダブルクリックして

image.png

だということがわかります。

処理の流れとしては8048858hと入力した文字列をXORしてその結果のバイトとgreetingMessageを比較している風です。ちょっと自信ないですが、とりあえずこれでやってみます。

入力文字 xor 8048858h = greetingMessage

を満たすような入力文字が知りたい。
xorの性質から、上記の式がなりたつなら

8048858h xor greetingMessage = 入力文字

も成り立つはずなのでそれを調べる。

8048858hのHEXはIDAに書いてある通りで

0x29 0x06 0x16 0x4F 0x2B 0x35 0x30 0x1E 0x51 0x1B 0x5B 0x14 0x4B 0x08 0x5D 0x2B 0x56 0x47 0x57 0x50 0x16 0x4D 0x51 0x51 0x5D

です。
greetingMessageはpythonを使いました。

image.png

こんな感じでしょうか。
これを実行すると以下の配列が得られます。

['0x59', '0x6f', '0x75', '0x20', '0x68', '0x61', '0x76', '0x65', '0x20', '0x6e', '0x6f', '0x77', '0x20', '0x65', '0x6e', '0x74', '0x65', '0x72', '0x65', '0x64', '0x20', '0x74', '0x68', '0x65', '0x20', '0x44', '0x75', '0x63', '0x6b', '0x20', '0x57', '0x65', '0x62', '0x2c', '0x20', '0x61', '0x6e', '0x64']

この2つをxorします。これもpythonで。

image.png

こんな感じでしょうか。
この結果は

image.png

でた!

けど、まさかのこの答えは間違いでした。。。
XORする元のHEXが違うんでしょうか。

ヒント見てみます。

image.png

んーオブジェクトダンプしましょう。みたいなことですよね。
何か間違いがあるかもしれないのでもう一度見直してみます。

同じやり方を試してもしょうがないので他のやり方で。
gdbで起動してdo_magicを見てみます。

gdb ./main
~中略~
(gdb) disas do_magic

image.png

途中で文字列が書き換えていることを考慮してbreakpointで0x080486c0でとめて、そのときの0x8048858を見てみます。

まず止めます。

image.png

ここで0x8048858を見ます。

image.png

同じですね。。。

ちなみに今扱っているELFファイルは問題文のリンクからファイルをダウンロードしたんですが、 /problems/quackme_2_45804bbb593f90c3b4cefabe60c1c4e2. からアクセスできるファイルで検証してみます。

image.png

はい、違いますね。。。

29 06 16 4F 2B 35 30 1E 51 1B 5B 14 4B 08 5D 2B 53 10 54 51 43 4D 5C 54 5D
29 06 16 4f 2b 35 30 1e 51 1b 5b 14 4b 08 5d 2b 56 47 57 50 16 4d 51 51 5d

上がリンクからダウンロードしたもので、下がshellから取ったものです。後半が違いますね。
まさかダミーを仕掛ける罠があるとは思ってませんでしたよ。
問題の横に書いてある解けた人数1195人の人たちは最初からこれに気づいたんでしょうか。

これでpythonを直してみます。

image.png

これで実行してみます。

image.png

違うのが出ました。これで再度mainを実行してみます。

image.png

You are winner 出ましたー。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?