SECCON2014 CTF オンライン予選(英語)write-upとかまとめ予定地

2014年12月6日0900~7日1700(日本時間)で開催されました。

とりあえず、後で解く用のメモ。write-upは後で

Crypto:100:Easy Cipher
Crypto:200:Decrypt it (Easy)
Crypto:300:Decrypt it (Hard)
Crypto:400:Ms.Fortune? Misfortune. : 4096-bit RSA
Binary:100:Shuffle
Binary:100:Reverse it
Binary:200:Let’s disassemble
Exploit:300:Advanced RISC Machine
Exploit:500:ROP: Impossible
Exploit:400:Holy shellcode
Exploit:500:Japanese super micro-controller
Web:100:jspuzzle
Web:200:REA-JUU WATCH
Web:300:Bleeding “Heartbleed” Test Web
Web:400:Binary Karuta
Web:500:XSS Bonsai (aka. Hakoniwa XSS Reloaded)
QR:200:QR (Easy)
QR:300:SECCON Wars: The Flag Awakens
QR:400:BBQR
Forensics:100:Get the key.txt
Forensics:300:Read it
Forensics:400:UnknownFS
Forensics:500:Confused analyte
Programming:100:Choose the number
Programming:400:The Golden Gate
Network:100:Get the key
Network:300:Get from curious “FTP” server
Network:200:version2

Crypto:100:Easy Cipher

87 101 108 1100011 0157 6d 0145 040 116 0157 100000 0164 104 1100101 32 0123 69 67 0103 1001111 1001110 040 062 060 49 064 100000 0157 110 6c 0151 1101110 101 040 0103 1010100 70 101110 0124 1101000 101 100000 1010011 1000101 67 0103 4f 4e 100000 105 1110011 040 116 1101000 0145 040 1100010 0151 103 103 0145 1110011 0164 100000 1101000 0141 99 6b 1100101 0162 32 0143 111 1101110 1110100 101 0163 0164 040 0151 0156 040 74 0141 1110000 1100001 0156 056 4f 0157 0160 115 44 040 0171 1101111 117 100000 1110111 0141 0156 1110100 32 0164 6f 32 6b 1101110 1101111 1110111 100000 0164 1101000 0145 040 0146 6c 97 1100111 2c 100000 0144 111 110 100111 116 100000 1111001 6f 117 63 0110 1100101 0162 0145 100000 1111001 111 117 100000 97 114 0145 46 1010011 0105 0103 67 79 1001110 123 87 110011 110001 67 110000 1001101 32 55 060 100000 110111 0110 110011 32 53 51 0103 0103 060 0116 040 5a 0117 73 0101 7d 1001000 0141 1110110 1100101 100000 102 0165 0156 33

Crypto:200:Decrypt it (Easy)

cript1.zip

Crypto:300:Decrypt it (Hard)

g^k=69219086192344
20c2.zip

Crypto:400:Ms.Fortune? Misfortune. : 4096-bit RSA

encrypted.gpg is encrypted by 4096-bit RSA algorithm. But I'm sure you can decrypt it.

problem.tar.xz

encrypted.gpgは実際に4096-bit RSAで暗号化されている。 でも、君ならきっと復号できるはずだ。

Binary:100:Shuffle

find the string before randomizing.

shuffle

Binary:100:Reverse it

Reverseit

Binary:200:Let’s disassemble

nc disassemble.quals.seccon.jp 23168

Exploit:300:Advanced RISC Machine

Read flag.txt
http://micro.pwn.seccon.jp/arm/

Exploit:500:ROP: Impossible

ropi.pwn.seccon.jp:10000

以下の擬似コードのように、"/flag"を読み込んでその内容をstdoutに出力せよ

open("/flag", 0);
read(3, buf, 32);
write(1, buf, 32);

【注】実行ファイル"vuln"はIntel Pin tool(ソースコードはnorop.cpp)で守られています。
vuln
norop.cpp
norop_conf

Exploit:400:Holy shellcode

サーバ hebrew.pwn.seccon.jp:10016 から keyword.txt をゲットしよう。

UTF-16LEのヘブライ文字だけで書かれた聖なるシェルコード
http://hebrew.pwn.seccon.jp/nikud/hebrew-utf16le.html
サーバファイル:

stage16
stage16_conf
例:

$ vi holy.nasm
BITS 32
db 0x24,0xFB,0x34,0xFB,0x1E,0xFB,0x1F,0xFB
db 0x0a
$ nasm -f bin holy.nasm -o holy
$ cat holy | nc hebrew.pwn.seccon.jp 10016
ご加護を!

Exploit:500:Japanese super micro-controller

Read flag.txt
http://micro.pwn.seccon.jp/sh/

Web:100:jspuzzle

jspuzzle.zip
You need to fill in all blanks!

Web:200:REA-JUU WATCH

http://reajuu.pwn.seccon.jp/

Web:300:Bleeding “Heartbleed” Test Web

http://bleeding.pwn.seccon.jp/

Web:400:Binary Karuta

http://binkaruta.pwn.seccon.jp/binkaruta/
約35種類のarchからダンプが表示されます。正解を選択してください。
100回連続で解いてください。
60秒でタイムアウトされます。また間違うと60秒のペナルティがあります。

Web:500:XSS Bonsai (aka. Hakoniwa XSS Reloaded)

bonsaiXSS.zip

* This challenge have 2 answers (2 steps).
If you collect 2 answers, you can get full point (500pts).

[#9 "XSS Bonsai" 動作環境について]
Bonsai XSS の問題が上手く動作しない場合は Visual Studio Express 2013 Web (evaluation) か別のバージョンの Visual Studioのインストールした環境で試してみてください。

テストはstage1 で以下を入力してみてください。

";alert('XSS');//

“Congratulation” のアラートウィンドウが表示されステージ2に進めば正常に動作しています。お手数をおかけします。

[#10 "XSS Bonsai" 動作環境について2]
「send」 ボタンを押しても何も動作がしない場合には、IEのセキュリティセッティングのインターネットゾーンの設定を以下の画像のように変更をしてみてください。
http://files.quals.seccon.jp/bonsai_ie_settings.png

QR:200:QR (Easy)

世界一面白いジョーク:
昨晩フランネルケーキを食べる夢を見たんだけど、
朝起きたらQRコードが半分なくなってたんだ!

QR:300:SECCON Wars: The Flag Awakens

# Not need Japanese text to solve this task.
# If you need it ? see below :)
http://pastebin.com/uXByBZv5

QR:400:BBQR

Let's enjoy BBQR!

Forensics:100:Get the key.txt

forensic100.zip

Forensics:300:Read it

Readit

Forensics:400:UnknownFS

このイメージは名状しがたいファイルシステムでフォーマットされています。 私が思うに、このファイルシステムはFATファイルシステムと似ていますが、実際のところ分かりません。
解析して、隠されたキーを探しましょう。
https://seccon2014.b.storage.sakura.ad.jp/unknownfs.zip

Forensics:500:Confused analyte

次のIOC(hoge.jpg)のブラックボックスに当てはまる文字列を入れてください。 (解答形式 SECCON{string})

hoge.zip (pass:infected)

Programming:100:Choose the number

nc number.quals.seccon.jp 31337

sorry fixed URL

Programming:400:The Golden Gate

暗号文と一緒にエンコーダーボードを見つけた。解読を助けて欲しい!
The cipher text: BQDykmgZ0I6SaQnq4o/iEONudetXdPJdpl1UVSlU69oZOtvqnHfinOpcEfIjXy9okkVpsuw2kpKS==

Main: エンコーダーボード写真(GooleDrive)
Mirror: https://seccon2014-online.b.storage.sakura.ad.jp/encoder_board_photos.zip

Network:100:Get the key

nw100.pcap

Network:300:Get from curious “FTP” server

ftp://ftpsv.quals.seccon.jp/

Network:200:version2

もうすぐ version 2 が来るけど準備はいいかい?
srv h2o.pwn.seccon.jp.

SECCON2014 CTF オンライン予選(日本語)write-upまとめ予定地

SECCON CTF オンライン予選(日本語)にodprojectで出て、1000点51位ぐらいでした。

とりあえず、自分で書くのはあとにして、早い人のwrite-upをメモっておく

バイナリ300:ダンプを追え

他にもまとめ作ってくれてる人がいたのでそっちをみてもいいかも
SECCON 2014 CTF オンライン予選 みんなのWrite-upまとめ – sonickunのブログ

VS2010のIntelliSense修復メモ

Windows XP上でVisual Studio 2010を使用すると、コード補完ツールのIntelliSense(インテリセンス)が機能しなくなるという不具合が発生する場合があるそうです。
手持ちのマシンで試してみたところ、見事に当てはまっていました。
WinXPのサポート終了まで半年を切り、あまり役に立つことはないと思われますが、せっかくですのでその復旧手順を残しておきます。

不具合の再現

まず、こちらで確認できた再現環境は以下の通りになります。
それぞれ最新版のアップデート(2013/10/30現在)を適用しているものとします。
もちろん、この環境を満たせば必ず発生するというわけでも、他の環境では起こらないことを保証するわけでもありません。

  • Windows XP Professional SP3
  • Visual C++ Express 2010 SP1

この状態でVisualStudio2010を起動して適当になコードを打ちこみ、IntelliSenseを起動します。

VS2010でIntelliSenseが機能しない
VS2010でIntelliSenseが機能しない

…反応がありません。
ログを出力するように設定しても、特に何も表示されないようです。

原因はWindowsの更新プログラム

Stack Overflowによれば、2013年9月に配布されたWindowsのアップデートパッチ「KB2876217」の適用後に不具合が発生したようです。

コントロールパネルから「プログラムの追加と削除」を起動し、「プログラムの変更と削除」を選択します。この時、「更新プログラムの表示」にチェックを入れます。
たくさん項目があって見当たらないときは、配信日である2013年9月9日を目安に探してみると良いかもしれません。

WinXPセキュリティ更新プログラム KB2876217
WinXPセキュリティ更新プログラム KB2876217

不具合の直接の原因はともかく、これを削除してみましょう。
ただし、セキュリティパッチを削除するということは、それだけマシンが危険に晒されるということです。可能であれば別の手段(他OSやIDEを使用するなど)を取るべきと思います。

パッチを削除したら、Windowsを再起動します。

復旧確認と自動更新の停止

再起動後、きちんとIntelliSenseが機能しているかチェックしてください。
手元のマシンでは以上の方法で復旧しました。手順自体は簡単ですが、Windowsのパッチに原因があるということに気付かないと、ひたすら再インストールを繰り返して涙目になってしまいます。

Windowsの設定でアップデートを自動にしている場合、KB2876217が再インストールされて元の木阿弥です。
自動更新を切る、あるいは更新の通知が出たときにインストールせずに再通知しないようチェックを入れるようにしましょう。

Masonryを使ってdivをタイリングする

先日、ODプロジェクト総合ウェブサイトのトップページのデザインを修正しました。

段組のレイアウトにするためfloatを使って配置していたのですが、その途中、特定の条件下でデザインが大きく崩れてしまうという問題に直面。
それについての簡単な説明と、僕が取った解決策を以下に記しておきます。

まずは、ざっくりと。

ブロック要素(div等)をを並べて記述すると、縦に連なって表示されることが多いと思われます。
ここでCSSの float:left を指定すると、左から順番に並ぶよう配置されます。

ブロック要素にfloat:leftを指定する(1)
ブロック要素にfloat:leftを指定する(1)

ブラウザの表示領域の右端に到達すると、次からは下に移動します。
ここでは、ブラウザのウィンドウサイズを変更して、その状態を発生させています。
ブロック要素にfloat:leftを指定する(2)
ブロック要素にfloat:leftを指定する(2)

綺麗にタイリングされていますね。
固定デザインには向きませんが、ユーザの環境に合わせて見た目が変化するウェブページの完成です。
ここまでは特に問題ありません。

異なるサイズのブロックを並べる

ですが、これが異なるサイズの場合はどうなるでしょうか。

高さの異なるブロック要素を並べる
高さの異なるブロック要素を並べる

例えばこのような、高さ(height)が異なるブロック要素を用意します。
先ほどと同じように、ウィンドウ幅を狭めてみましょう。

しまった! バラバラに配置されてしまった!
しまった!バラバラに配置されてしまった!

ご覧の通り、酷いことになっています。

もう少し見てみましょう。
1番(赤色)~3番ブロック(黄色)が一列配置され、そこで右端に到達します。
そして4番(緑色)が改行されるわけですが、左端である1番ブロックの下ではなく真下に置かれてしまっています。
これは縦に長い2番ブロック(オレンジ色)に阻まれてしまっている、と考えられます。

同様に5番(水色)と6番(青色)も、2番が邪魔になっています。
6番は上端がほんの少し引っかかっているだけですが、それでもダメです。
そして7番(ピンク色)になって、ようやく阻む物が無くなったので左端に配置されるわけですが、かえってそれが妙な空白を生み出してしまっています。

このレイアウト崩れが気になる場合、手作業で順番や高さを調整すれば良いことになります。
せっかくですし、何か自動的に解決してくれる方法が無いか探してみましょう。

Masonryを導入してみる

……と、探してみましたら、割とあっさり見つかりました。
MasonryというJavaScriptライブラリです。有名みたいですね。
ちなみにMasonは石工という意味らしいです。まさにタイル貼りといったところでしょうか。

JavaScriptライブラリのデファクトスタンダードであるjQueryを導入していれば、このMasonryはプラグインとして簡単に扱うことが出来ます。
もちろん、単独でのMasonry導入も可能とのことです。

[js title=”ヘッダ部分” htmlscript=”true”]
<head>
<script src="jquery-1.10.2.min.js"></script>
<script src="masonry.pkgd.min.js" ></script>

<script>
$(function()
{
//タイリング設定
$(‘article’).masonry(
{
itemSelector: ‘.itemSelector’,
columnWidth: 100, //width,margin,border等の合計
});
});

</script>
</head>
[/js]
2~3行目:
scriptタグでjQueryとMasonryライブラリを読み込みます。

6行目~:
jQuery向けのコードです。

9~13行目:
Masonryの設定を記述しています。
ここでは、HTMLソース内の article 要素をレイアウト領域全体とし、その中のitemSelectorクラスを実際に配置するブロックとしています。
また、columnWidth は1カラムの横幅です。ブロックの横幅にマージン等を加算した数値を記述します。

[html title=”本文”]
<article>
<!–タイリングするブロック–>
<div class="itemSelector"> 01 </div>
<div class="itemSelector"> 02 </div>
<div class="itemSelector"> 03 </div>
<div class="itemSelector"> 04 </div>
<div class="itemSelector"> 05 </div>
<div class="itemSelector"> 06 </div>
<div class="itemSelector"> 07 </div>
</article>
[/html]

続けて Body 内を以上のようにコーディングします。
article タグや itemSelector クラスにしていますが、設定さえすれば何でもOKです。
すると、以下のようなレイアウトになります。(実際には更に色指定などを追加しています)

Masonryによるレイアウト
Masonryによるレイアウト

だいぶ整いましたね!
どうやらこちらは、その時点で一番高さの合計が低いカラムを探し(同値の場合は左側を優先)、その下に配置する……というアルゴリズムのようです。

もちろんこれは極端な例ですが、それなりの効果を望めると思います。

注意点など

画像読み込みのタイミング

Masonryでのレイアウトには、各カラムの高さ情報が必要となります。
そのため、画像ファイル等を読み込む場合は、ロードのタイミングによっては綺麗に配置されません。
imgタグにwidth/heightを設定したり、あるいは読み込み完了を検知するライブラリを別途導入するなどで回避できるとのことです。

padding設定

itemSelectorで指定したブロック要素に対し、CSSでpaddingの値を設定しようとしたところ、上手く行きませんでした。
理由は分かりませんが、このブロック要素の内部に更に

タグでブロックを作り、そちらにmarginなりpaddingなりを設定することで解決できました。

Oculus Rift購入手順

最近、巷で話題のゲーム用ヘッドマウントディスプレイ「Oculus Rift(オキュラスリフト)」が気になって仕方ありません。

"Orlovsky and Oculus Rift" by http://galyonkin.com http://creativecommons.org/licenses/by-sa/2.0/deed.en http://en.wikipedia.org/wiki/File:Orlovsky_and_Oculus_Rift_%289084790214%29.jpg
“Orlovsky and Oculus Rift” by http://galyonkin.com
http://creativecommons.org/licenses/by-sa/2.0/deed.en
http://en.wikipedia.org/wiki/File:Orlovsky_and_Oculus_Rift_%289084790214%29.jpg

探せば輸入代行もあるようですが、OculusVR社は日本への発送も行っているようでしたので、公式通販してみることにしました。
英語オンリーな海外サイトゆえ、日本での買い物とは多少異なる部分がありましたので、その購入方法をメモしておきます。

注文してみよう

まず、OculusVR社の公式サイトから、Oculus Rift開発キットの注文ページを探しましょう。
Pre-Order Nowと書かれたリンクがありますので、これをクリックします。

OculusVR公式サイトのスクリーンショット
OculusVR公式サイトのスクリーンショット

Oculus Rift Development Kitの注文ページには、幾つかのフォームがありますが、これを埋めていきます。
文字コードがUTF-8になっているので、Addressの欄は日本語でも大丈夫かもしれませんが、念のため英語で書くことにしました。
また、クレジットカード番号など極めて重要な情報を入力することになりますので、セキュリティには十分に気をつけてください。

Order Form(注文フォーム)

Product
品物名。当然、Oculus Development Kitを選択します。
Qty
数量。quantityの略らしいです。
✓ I understand this hardware is intended for developers and it is not a consumer product.
開発者向けの商品であることを把握してますか?というチェックボックス。ONにします。

Payment Method(支払い方法)

VISA/MasterCard/Discover
クレジットカードで購入する場合に選択。これを選択したときは、以下のクレジットカード情報も入力する必要があります。
PayPal
電子決済サービスのPayPalを利用する場合に選択します。注文ページ入力後、PayPalのサイトで認証(支払い)を行います。
Card Number
クレジットカードの番号。
Expiration (MM/YY)
クレジットカードの有効期限。
CVV2
クレジットカードのセキュリティコード。カード裏面に書かれていたと思います。
Promo Code
プロモーションコード。何らかの方法でコードを貰った人は入力するらしいですが、詳細は不明です。

Billing Information(請求先)

Country
国名。Japanを選択します。
Company
会社名。個人なら空欄で良いでしょう。
First Name
購入者の下の名前。
Last Name
購入者の苗字。
Phone
電話番号。国際電話番号を付けて、+81-xx-…とした方が良いかもしれません。
Email
メールアドレス。当然ながら英語で送られてきますのでスパムフィルタに注意しましょう。
Address
市町村名より後の住所。例えば永田町1丁目7番1号ならNagata-cho 1-7-1とします。
Address 2
住所その2。建物名などを書く欄ですが、スペルが分からない建物が多いので困りものです。
City
区市町村名。例えば千代田区なら、ChiyodakuかChiyoda-kuのように書きます。
State / Province
都道府県名。
Zip / Postal Code
郵便番号。ちなみにZIPコードというのはアメリカ用の番号なので特に気にしなくて良いでしょう。

Shipping Information(送り先)

✓ Same as billing information
請求先と配達先が同じ場合にチェックします。チェックを外すと住所等の入力欄が表示されます。

以上を入力してcontinueボタンを押すと確認画面が出ます。
送料分の加算などもありますので、きちんと確認し、問題なければ購入します。
自分はPayPal支払いだったのですが、このタイミングで認証を行いました。

その後、確認メールが届きます。注文番号が記載されているので失くさないよう注意しましょう。
また、https://www.oculusvr.com/sales/のリンクから、状況確認や宛先変更ができるようです。