2014年12月26日金曜日

Advent Calendar CTF 2014 Write-upのまとめ


ぼっちちーむhorityで参加しました。

170ポイントの25位でした。

アドベントカレンダーっぽい順位で大変縁起が良いですね。

pwnとrevは苦手なのでほとんど触っていません。

それではwriteupを見てみましょう。

Write-ups


(順不同、チームは推測です)

ytokuさん(チーム:ytoku)
https://wiki.mma.club.uec.ac.jp/ytoku/CTF/Writeup/AdventCalendarCTF2014

ShiftCropsさん(チーム:tuat_mcc)
http://blog.shift-crops.net/?cat=32&paged=1

st98さん(チーム:omakase)
https://st98.github.io/diary/posts/2014-12-26-adctf.html

hhc0nullさん(チーム:hhc0null)(pwnable only)
https://gist.github.com/hhc0null/663697b255af29278abf

しおあめさん(チーム:candies)
http://sc123.hatenablog.jp/entry/2014/12/26/001342

志穂さん(チーム:Ellipse)
http://shiho-elliptic.tumblr.com/post/106148779474/advent-calender-ctf-2014-writeup

yagihashooさん(チーム:chikuwa)
http://qiita.com/yagihashoo/items/f0e08ac7ed9f727eed64


大変参考になりますね。

感想


day24のregexp quiz、sudo -u flagman lessでなんとかしたらいいというところまで気づいていたんですが、ずっとexec bash -c "/bin/sh…"で作ったリバースシェルをnetcatで受けて何とかしようとしていたのがとても悔しいです。

なんとかならないんですか?!

socatとかexpectとか初めて聞いたものをプロは当然のように使っているし、なんというか、linuxの基礎から勉強し直しという感じです。

まとめ


開催中のCTFのwriteup(やsolver)をpastebinに貼り付けるような奴は何をやってもダメ
http://pastebin.com/6tShfuju
http://pastebin.com/P0QP4jX4
http://pastebin.com/nWNY5Uyz
http://pastebin.com/iAbafnc6

2014年8月12日火曜日

社会人のための趣味CTFまとめ

DEFCONにセキュキャン…
夏の日差しのように若きセキュリティ人材の活躍が眩しい今日この頃、職場や家族の冷ややかな視線を背中に受けながら、冷房いらずでフラグを探している社会人趣味CTF初心者の皆様、いかがお過ごしでしょうか。

通勤時間を使いスマホの小さな画面でwriteupを読み、なんとなく理解したようでも、いざ実戦となると歯も立たず…。

鬼の居ぬ間に過去問を解いてみても、それが直接得点になるわけではないのでモチベーションが続かない…。

だからといって、易々と教えを乞うのはプライドが許さない…。

社会人趣味CTF初心者が、小さな小さな人権と、問題を解いた大きな喜びを得るには、当然ながら「自分で問題を解く」しかありません。

そこで、社会人でもスキマ時間を使って参加でき、さらにランキングがあってモチベーションが維持しやすい常時開催されているタイプのCTFを、私の主観を交えてまとめてみました。


常時開催のオンラインCTF(順不同)


私がCTFに出会ったサイトです。幅広いジャンルで出題されています。Villager Bは登竜門と言った感じでしょうか。

ユーザが問題を投稿できる珍しいCTF。問題を投稿すると、新着情報がたくさん並んで楽しいです。

最近のアップデートでwriteup投稿機能が付きました。WEBの問題が充実している印象です。無意味なブルートフォースはやめましょう。

日本の強豪チームEpsilonDeltaのCTF。ROPの問題が充実している印象です。特にROP Challenge1~4はステップアップ形式で学べていい感じです。

賛否両論ありますが、全体的に超入門者向けで差別化できています。最近更新されていないのでもう飽きたのかもしれませんね。
 

さまざまなジャンルの問題が結構な頻度で追加されています。writeupを送るとコインがもらえて、そのコインを消費してヒントがもらえます。

pwnだらけのようです。いつかやります。

問題集がいくつかあって、その中でレベルアップしていくようです。いつかやります。

ざっと見た感じいろんなジャンルがありそうです。デフォルトの猫のアイコンかわいいですね。
※mageさん情報ありがとうございます!(8/12追加)


その他役立つサイト(順不同)


CTFのポータルサイト。チームのランキングやCTF開催情報は常にチェックしておきたいですね。

ROP周辺のテクニックを初歩的なものから応用的なものまで詳細に解説されています。大変お世話になっております。

過去のいろんなCTFの問題がまとめてあります。

過去のいろんなCTFの問題とwriteupがまとめてあります。pullリクエストを送るかIssueを上げるとwriteupに追加してもらえるみたいです。

「ctf writeup」とかでググればwriteupがたくさん出てきます。


おわりに


セキュリティエンジニアでもない私のような社会人にとって、特に家庭がある場合、期間限定で開催されるCTFは参加しにくいものです。

貴重な休日にパソコンを開き、いざCTF参戦しようものなら
「また旗取りゲームか」「家族とフラグどっちが大切なんだ」「CTFで飯食えるのか」
などと言った迫害を受けるのが落ちです。

上記のようなサイトがより活発になると、うれしいですね。
そのためには、ユーザ側も積極的に盛り上げていかないとなぁ、と感じます。

他にもこんなのあるよー!などあれば、是非まとめておきたいので、ご連絡頂けるとありがたいです。

良きCTFライフを!

2014年6月18日水曜日

もしかして「糞言語」

経緯

ある日C++でプログラムを作成しているときに
「世の中にはどんな糞言語があるのだろう?」
という疑問がわきました。 

手始めにChromeのアドレスバーに「C++ くそ」と入力してみたところ、
「c++ 糞言語」といった驚きの提案をグーグル先生から受けたので
ちょっと面白くなって、試してみました。

プログラミング言語一覧 

プログラミング言語の一覧はwikipediaから拝借しました。
http://ja.wikipedia.org/wiki/プログラミング言語一覧

判定方法

プログラミング言語一覧から
{プログラミング言語名}+"くそ"
というキーワードを作成し、Google SuggestのAPIに投げ込みます。

具体的には下記のようなリクエストを投げます。
http://www.google.com/complete/search?hl=ja&output=toolbar&ie=utf_8&oe=utf_8&q={プログラミング言語名}+くそ 
すると、検索ワード候補がxmlで返ってくるので
その中に"糞言語"という文字列を含めば糞言語と判定しています。 

作成したスクリプト(kusogengo.py)

import urllib
import re

def getlang():
    s = unicode(urllib.urlopen('http://ja.wikipedia.org/wiki/プログラミング言語一覧').read(),'utf-8')
    return re.findall(r'<li><a.*?>(.*?)</a></li>',s)

for l in getlang():
    res = urllib.urlopen((u'http://www.google.com/complete/search?hl=ja&output=toolbar&ie=utf_8&oe=utf_8&q=%s くそ'%l).encode('utf-8')).read()
    if '糞言語' in res:
        print u'%sは糞言語'%l
    #else:
    #    print u'%sは糞言語ではない'%l

実行結果

>kusogengo.py
Cは糞言語
C++は糞言語
C@は糞言語
HSPは糞言語
Javaは糞言語
JavaScriptは糞言語
Objective-Cは糞言語
Perlは糞言語
PHPは糞言語

まとめ

C@とかそもそも知らないし、個人的にはちょっと誤判定があるように見えます。
皆さんの好きな言語は糞言語でしたか?

2014年6月12日木曜日

CTF各位

periodic cipher

crypto (1pt)

09,39,2f,1f,35,32,0c,42,09,35,17,63,4c,09,15,19,0d,67,39,67,63,5a,51,63,4b,3e,4d,66,16,01,35,0e,19,3f,3e,6a,2f,1f,44

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に向けて精進したいと思います。