Transcript
Page 1: RuCTFEに参加したよ

RuCTFEに参加したよ結果より記憶に残る大会だったよ

Page 2: RuCTFEに参加したよ

自己紹介Tiwtter:  abend@number3to4

Webアプリケーションのセキュリティをメインでやってます。おくど 3( okudo3)で CTFなどに参加してます。

おくど 3は、つぶれてしまった格安の立ち飲み屋の名前(おくどさん)に由来します。そんなわけで、数字の「 3」は「さん」と読みます。

Page 3: RuCTFEに参加したよ

RuCTFEの概要 1日本時間の 12月 14日 19時から 12月 15日 4時まで 9時間(最初の 1時間は設定するための時間)で、参加チームのサーバに保存されている FLAGの奪い合うなさけ容赦ない大会。

脆弱なままのサーバだとやられたい放題。こっちが FLAGをとって、得点をゲットしたとしても FLAGを取られて得点を簡単に失う。

強者のみが生き残れるという世紀末状態を体感可能。

Page 4: RuCTFEに参加したよ

RuCTFEの概要 2得点は、 FLAGを取得すると得られる。 FLAGの正規表現は、 /^\w{31}=$/であるとのこと。ただ、 FLAGだけではなく SLAも求められる。

得点 =  FLAGポイント ×  SLA

SLAは、 2分おきに主催者がチェックして、サービスが落ちていたら、 SLAが減点される。

どちらかが 0だと、得点はもう一方をどんだけ稼いでも評価されないということ。

Page 5: RuCTFEに参加したよ

RuCTFEのネットワーク環境VirtualBoxのイメージを 3つ配布され、以下のネットワークを構築しました。

Router

Master Test

セグメント A

踏み台サーバ Internet メンバ

PC

セグメント B

他チームMaster

FW

Routerには、 VPN設定をしてMaster同士で FLAGを奪い合う。

メンバがMasterにアクセスできるように踏み台サーバ、 RouterにSSHで多段ログインして、アクセス。

Page 6: RuCTFEに参加したよ

CTFが開始して 1Masterのイメージは事前にパスワードつき状態で公開されており、開始と同時にパスワードが公開される。

展開して立ち上げたのはいいが、認証情報がないのでNW設定できない。

Page 7: RuCTFEに参加したよ

CTFが開始して 2ログインしないと何もできないので、Masterを diskとしてmountして/etc/shadowを書き換えてログインしたらというアドバイスをもらいやってみたよ。

ちなみにこれがセットされていたよ。

root:$6$kaNpfH1w$crSf1X33TcX8MydzbFR96JyFPYrl2.lfU5YorCDUnGSk/bmF56x3bCaT4xZB1Y1FdKwt2xKf8b4IR/vcdgc3N1:15986::::::

john the ripperにかけたが、 3時間かけても終わらなかったのであきらめました。

簡単なパスワードに書き換えて、ログイン成功!!その後、NW設定変更して、全員アクセスできるようになってやっと競技開始。

Page 8: RuCTFEに参加したよ

サーバで稼働しているサービスいろいろと稼働しているが、 8000番で稼働するサービスがWebサービスということで、そっちを見ることに。競技上の名称は、 contacts。

0.0.0.0:22 0.0.0.0:3000 127.0.0.1:5432 0.0.0.0:18360 0.0.0.0:8000 127.0.0.1:270170.0.0.0:3306 127.0.0.1:6379 0.0.0.0:48879 127.0.0.1:280170.0.0.0:8081 0.0.0.0:4369 0.0.0.0:4242

Page 9: RuCTFEに参加したよ

Contactsの調査 1とりあえず、 telnetで 8000番たたくと平文で帰ってきたが、さすがにコマンドラインだけでWebアプリケーションを見て回るのは面倒だったので、ポートフォワードしてブラウザで見れるように。

Page 10: RuCTFEに参加したよ

Contactsの調査 2Address bookになっており、検索や登録ができる。

Page 11: RuCTFEに参加したよ

Contactsの調査 3登録したアドレス情報を、取得してみると・・・

Page 12: RuCTFEに参加したよ

Contactsの調査 4結果には、登録したパスワードも表示されていた。

パスワードの形式を見て、 Base64だなって思いながらも、それ以外に FLAGの形式もそういえばそうじゃんって思い出した。

Page 13: RuCTFEに参加したよ

Contactsの調査 5ブラックボックスだけではなく、手元にソースがあるのだからホワイトボックス的にも見てみようよってことで、中身を確認。

if [[ $password = *'*'* ]]; then echo Security alert returnfi

local results=`$ldapsearch -LLL -H $ldapsocket -x -b "dc=ructfe,dc=org"-s sub "(&(objectclass=inetOrgPerson)(cn=${name} ${surname})(userPassword=${password}))"`

Address bookは、 LDAPで管理されており、入力値のチェックもされておらず情報を抜き取りたい放題になっているなってことに気づく。

Page 14: RuCTFEに参加したよ

Contactsの調査 6平文だからというのと、うまく通るまで LDAPインジェクション試すよりも他のチームからの攻撃手法をパクって、こっちも攻撃しようと考え、 tcpdump。

/?action=info&name=*&surname=*)(%7C%20(userPassword=*&password=11)

これね。じゃあ、 FLAG取得に向けて動くか。

Page 15: RuCTFEに参加したよ

Contactsの調査 7スコアボードの下位チームでかつ Contactsサービスが稼働しているチームにまずは行うことに。

<div class="contact"><div class="name" style="font-size: x-large; margin-bottom: 5px"><b> Kieran Lancaster </b></div><div class="phone"> <span class="phone_text">Phone:</span> +55(909)92 783 54 </div><div class="mail"> <span class="mail_text">Mail:</span> 1RX23RHCGKPEQP2EQ8ZN8BA7YH5QGS1= </div><div class="password"> <span class="password_text">Password:</span> ZThoc2l1a3Y= </div></div>

パスワードじゃないけど、 \w[31]=に合致するので、スコアサーバに送信。

Page 16: RuCTFEに参加したよ

Contactsの調査 8どうやらOKだったようで。

..:: RuCTFE Get-Flags service ::..

Your team id is 66Enter your flags, finished with newline (or empty line to exit)B3UF46DO5KSQ4CHL0CMX3V83E4QDJG1=Accepted

Goodbye!

そんなわけで、同様の手法を用いて 5つの FLAGをゲットー!!

Page 17: RuCTFEに参加したよ

Contactsの調査 9数分で更新されて・・・

ついに、 FLAGページにチームのアイコンがのったぁー!!

Page 18: RuCTFEに参加したよ

Contactsの調査 10ヒャッハーって喜んだが・・・

上位チームは桁が違いすぎる。。。

Page 19: RuCTFEに参加したよ

色々と頑張ってみたけど色々とDoSされたり、 shellとられたりと FLAG5つくらいでは埋められないほどFLAGを取られまくってしまった。

そんな結果は、 174チーム中 66位だった・・・

Page 20: RuCTFEに参加したよ

まとめやられたい放題やられたので、防御する能力を向上させないとだめだなと思った。だからといって、攻める方もOKではないので、いろいろと頑張らないと思った。

ただ、日本チームで FLAGを取ったのが okudo3のみだったので、結果より記憶に残る大会だった。

あと、それ以外のサービスも、攻撃パケットを解析して、まとめようかと。


Top Related