No cON Name CTF Quals 2014 Writeup

MISCall(Misc 100)

.tar.gzのファイルを展開すると、gitリポジトリが出てきます。
ファイルはflag.txtのみで、Nothing to see here, moving along...とか書いてあります。
git logを見てもinitial commitのみ。
そこで.git/objects/を見ます。
$ git cat-file -p <ハッシュ値>でファイルが見られるので、いろいろ漁るとs.pyというファイルがあります。

#!/usr/bin/env python
from hashlib import sha1
with open("flag.txt", "rb") as fd:
    print "NCN" + sha1(fd.read()).hexdigest()

あとはもとのflag.txtをダンプしてsha1をとれば終了です。
ただし、gitのハッシュはファイルのsha1そのものではないのでそこは注意が必要です。
参考:http://stackoverflow.com/questions/5290444/why-does-git-hash-object-return-a-different-hash-than-openssl-sha1
Flag:

NCN4dd992213ae6b76f27d7340f0dde1222888df4d3

cannaBINoid(Bin 300)

32bitのELFです。
objdumpで逆アセンブルコードを読むと、

  1. freadでstdinから0x80バイト読み込む
  2. openとmmapでargv[0](つまり自分自身)を0x80バイトぶんメモリにロードする
  3. 2つのバッファが等しければ"You got it!"をputsで表示

よって実行ファイルの先頭0x80バイトがkeyとなるので、このsha1をとればOKです。
Flag:

NcN_effaf80a641b28a8d8a750b99ef740593bb3dcbd