(先に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に向けて精進したいと思います。
0 件のコメント:
コメントを投稿