きゅうり。

主にCTF関係のことを書いていく気がします

DEFCON 2016 xkcd writeup

前に解いたことあるシリーズ。

IDA x64のfree版が出たとのことでお試し。

単純に動かすと flag を開けないと言われるので適当に用意してやる。

何か入力すると MALFORMED REQUEST と言われる。

さて、このプログラムの動きを IDA で確認してみる。

f:id:Kyuri:20180227183248p:plain

最初の分岐は flag ファイルの有無を確認して読み込み、次の分岐(画像)では文字列比較をしていることがわかる。

入力→strtok→strcmp→strtok→strcmp ...

という流れが一目でわかる。

なので、後は MALFORMED にならないような文字列を整える。

SERVER, ARE YOU STILL THERE? IF SO, REPLY "hoge" (4 LETTERS)

という感じになる。

ただし、 hoge と 4 の部分は自由。

文字列比較の後の処理はどうなっているかを疑似的に表すと以下の通り。

a = strlen(hoge)
heap[buf] = hoge
heap[buf+4] = \x00
b = strlen(heap[buf])
if a == b:
  print "NICE TRY"
else:
  print heap[buf]

ここで、読みだしたフラグもheapに置かれていることに注目する。

そこで、ちょうどフラグまで埋まるようにhoge部分を調整してやり、4の部分を適当に大きくしてやるとフラグまでprintされる。