2014年3月5日水曜日

DEFKTHON CTF 2014 Write-up

DEFKTHON CTF 2014 にちょろっと参加したのでお昼休みを利用して興味深かったもののみWriteup。

(先にSECCONのWriteup書けという声が聞こえてきそうですが、
既にたくさんの素晴らしいWriteupをスーパーなこわい方々が書いておられるので遠慮しておきます…)

Web 200

Auth Me In

最初SQLインジェクションをいろいろ試してみたけどだめだった。

もしかしてNoSQLかなぁ…

?userid[$ne]=a&password[$ne]=a

flagが表示されてしまった。

Web100が全然ダメだったので、拍子抜けでした。


Reversing 200


elf。

IDAで見てみると、forkして生成した子プロセスに数字を渡して、
子プロセスがその数字からflagを生成しているぽい。

ただし、子プロセスが自身のプロセスIDを求めてくるので、psで確認してから入力。

子プロセスはIDが正しいことを確認した後、文字列を生成して表示するのだが、

if(1==0) printf("%s",flag);

のような感じになってしまっているので、if(1==1)となるようにgdbでスタックの値を書き換えたらflagが表示された。

Rev100が全然だめだったので、拍子抜けでした。

Reversing 300


exe。

バイナリエディタで見てみると、なんだかpython臭漂う内容だった。

動かしてみると、C:\Users\ユーザ\AppData\Local\Temp配下に_MEIXXXXX(X:数値)フォルダを生成してそこにpythonのdllやらなんやらを置いていた。

ググってみたら、pyinstallerがそういう動きらしいので、さらにぐぐってpyinstallerをextractするスクリプトを見つけた。


extractすると、pythonソースが見れた。
#AJIN ABRAHAM | OPENSECURITY.IN 
from passlib.hash import cisco_pix as pix
import sys,base64
user=""
xx=""
if(len(sys.argv)>1):
     x=sys.argv[1]
     hashus = pix.encrypt("DEFCON14-CTF-IS", user=x)
     z=[89,86,69,121,100,82,69,103,98,47,48,103,80,71,77,121]
     for zz in z:
          xx+= chr(zz+(275*100001-275*1000-27225274))
     hashgen = pix.encrypt("DEFCON14-CTF-IS", user=base64.decodestring(xx))
     if(hashgen==hashus):
          print "Oh Man You got it! But :( ===>    " + str(base64.encodestring(base64.decodestring(xx)))
     else:
          print "Naaaaaaa !! You are screweD"
else:
     print "Password !!"
やってることは
・zから生成されるbase64文字列xxをデコードしたものをpix.encryptで暗号化したもの
・引数(argv[1])をpix.encryptで暗号化したもの
が等しいかどうかをチェックして、等しければxxをbase64デコードしてbase64エンコードしたもの(=xx)を表示している。

xがb64decode(xx)と同じであれば良いので、下記のスクリプトでxxを作ってdecode。
from base64 import b64decode
z=[89,86,69,121,100,82,69,103,98,47,48,103,80,71,77,121]
xx = ''
for zz in z:
    xx+= chr(zz+(275*100001-275*1000-27225274))
print b64decode(xx)
出てきたものがflagだった。

まとめ

上記以外で解けたのはmisc200と300、recon100でした。

スコアボードを見るとseccon勢もちらほらでしたね。

Recon以外のジャンルは100点の問題が僕の頭ではサッパリで、
逆に他の問題があっさり解けてしまうという感じでした。

インド人怖い。

来年のsecconに向けて精進したいと思います。