SECCON 2014 CTFに初めて参加しました

先日、CTF for Beginnersに参加しましたので、初めてCTF予選にも参加してみました。

解いた問題は以下の6つです。合計で600点獲得できました。

  • 練習問題(100点)
  • このパケットを解析せよ(100点)
  • decode me(100点)
  • 箱庭SQLiチャレンジ(100点)
  • 重ねてみよう(100点)
  • 879,394bytes(100点)

CTF初心者ですが、Write-upを書いてみました。

【練習問題

練習用の問題で、単純にFlagを入力するだけです。

【このパケットを解析せよ

seccon2014.pcapngを Wiresharkに読み込んだところ、FTPの通信ログのようです。flag.txtというファイルをGETしていましたので、このファイルのデータを読んだところこんな内容が。

RkxBR3tGN1AgMTUgTjA3IDUzQ1VSM30=

BASE64ぽいのでデコードしたらFlagがでてきました。

decode me】

encoded.txtの内容をバイナリエディタでみたところ、

FRPPBA 2014

ebg13/47

という文字列が。

FRPPBA 2014はSECCON 2014なのかなと推測し、並べてみたところ規則性が。

FRPPBA 2014→SECCON 2014

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm

これってROT13という暗号方式らしいです。でもバイナリをみる限りどうも2バイト文字も含まれているようで、それを扱うにはROT47というものがあるらしいです。

これも ebg13/47 → rot13/47 と一致しますし。

これを扱えるツールはnkfらしいので、Windows版のnkfをインストールして、表示してみたら・・・

>nkf -r encoded.txt

SECCON 2014 に参加のみなさまこんにちは。 rot13/47 に気付くとは流石です。 nkfコマンドで簡単にデコードできることにも気付きましたか? というわけで、おめでとうございます! フラグは半角英数文字に変換してから入力してください。 FLAG{Have fun SECCON2014}

これでFlagがとれました。

【箱庭SQLiチャレンジ

手始めに以下を入力

' OR 1=1--

ID=0 NAME=Tanaka AGE=54 ADDRESS=Tokyo SALARY=90000.0 ID=1 NAME=Paul AGE=32 ADDRESS=California SALARY=20000.0 ID=2 NAME=Allen AGE=25 ADDRESS=Texas SALARY=15000.0 ID=3 NAME=Teddy AGE=23 ADDRESS=Norway SALARY=20000.0 ID=4 NAME=Mark AGE=25 ADDRESS=Rich-Mond SALARY=65000.0

おやおや。丸見えです。でも、Flagはここではなさそうです。

他のテーブルをみてみたいので次のように入力。

' OR 1=1 ; SELECT sql FROM sqlite_master; --

ID=0 NAME=Tanaka AGE=54 ADDRESS=Tokyo SALARY=90000.0 ID=1 NAME=Paul AGE=32 ADDRESS=California SALARY=20000.0 ID=2 NAME=Allen AGE=25 ADDRESS=Texas SALARY=15000.0 ID=3 NAME=Teddy AGE=23 ADDRESS=Norway SALARY=20000.0 ID=4 NAME=Mark AGE=25 ADDRESS=Rich-Mond SALARY=65000.0 sql=CREATE TABLE COMPANY(ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL,AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL ) sql=NULL sql=CREATE TABLE SECCON(FLAG TEXT NOT NULL)

SQLコマンドの履歴が見えました。CREATE TABLEでテーブル名やスキーマがわかりました。SECCONというテーブルがあるようです。しかも、FLAG というTEXTがあります。これですね。

' OR 1=1 ; SELECT * FROM SECCON; --

ID=0 NAME=Tanaka AGE=54 ADDRESS=Tokyo SALARY=90000.0 ID=1 NAME=Paul AGE=32 ADDRESS=California SALARY=20000.0 ID=2 NAME=Allen AGE=25 ADDRESS=Texas SALARY=15000.0 ID=3 NAME=Teddy AGE=23 ADDRESS=Norway SALARY=20000.0 ID=4 NAME=Mark AGE=25 ADDRESS=Rich-Mond SALARY=65000.0 FLAG=FLAG{EnjoySQLi}

これでFlagがとれました。

【重ねてみよう

afterimage.gifというアニメーションGIFのファイルが提供されました。白い点がランダムに表示されるものです。

afterimage.jpg

問題の通り各コマを重ねると何か見えるのでしょう。

とりあえずアニメーションGIFを作成するようなツールを探してみたところ、Giamというツールがありましたので、これでafterimage.gifを読み込みました。次にツールで重ねて表示してみたところ、

WS000000.jpg

QRコードらしきものが現れました。画像を白黒反転をしてiPhoneのQRコードで読み取るとFlagがとれました。

【879,394bytes

Filesystem001.binというファイルシステムのデータのようです。

ファイルサイズが 879,394bytesのファイル名を答えろとのことなので、とりあえず879,394をHEXにしたところ、D6B22になります。これがファイルサイズとしてどこかにあるはずです。

たぶんFAT32だと思うので、バイナリエディタで開いてファイル名らしきものをキーにFATの構造に照らし合わせてファイルサイズが先ほどのHEX値と同じものを見つけました。でもロングファイル名のようです。次にVFATの構造と照らし合わせて、ロングファイル名を求めました。それがFlagでした。

以上、今回は初めての参加で、100点の問題ばかりで終わってしまいましたが、参加されたかたのwrite-upを参考にしてテクニックを身につけたいと思います。

でもFlagがとれたときは気持ちいいですね。次回もぜひ参加してみたいと思います。

VFDシールドを修理しました

以前製作したVFDシールドを落っことしてしまいまして、VFD(蛍光表示管)が1つ割れてしまいました。

repair_vfd1.jpg

危険なので割れたVFDを取り外します。リード線を切断して取り外したのちに、はんだシュッ太郎でハンダを除去しました。

repair_vfd2.jpg

デジットさんにVFDを注文して到着しました。

repair_vfd3.jpg

さっそく取り付けます。こんな感じかな。

repair_vfd4.jpg

VFDシールドの修理完了です。無事点灯しました。

repair_vfd5.jpg

VFDのスペアを買っておいたのでまた割れても大丈夫かな。

iMacのDVDドライブをSSDに交換してみた(換装編)からの続きです。

iMacの分解はリスクもありますので自己責任でお願いします。

SSDドライブへの交換が完了しましたので、iMacを組み立てていきます。分解と逆の手順で進めていきます。

90度縦にしている液晶画面パネルを元の位置に戻します。このとき不用意にケーブルを引っ張ったりせず、指紋を液晶画面パネルにつけないように注意して作業します。

縦置きにした状態で、ケーブルを元通りに取り付けていきます。

左側は2本

imacstep23.jpg

中央も2本

imacstep24.jpg

ケーブルの取り付けが完了したら、液晶画面パネルを元の位置に戻して、静かに本体を倒します。

imacstep25.jpg

液晶画面パネルを固定していた8本のT-8ネジを締めて固定します。

液晶画面に指紋がついてしまった場合はここで丁寧に拭き取ります。私の場合はiPhoneの液晶画面保護シートを貼るときに使ったクリーニングクロスを使いました。

次に外してあったアクリル板を取り付けます。強力な磁力で本体とくっつきますので位置決めに注意しながら正しい位置で固定します。

imacstep26.jpg

いよいよ電源投入です。4つのドライブが表示されました。SSDはあらかじめiMacにUSBで接続してMacOS Xをインストール済ですのでこのように認識します。

imacstep27.jpg

SSDを選んで起動してみます。

imacstep28.jpg

速い!これまでとは比べ物にならないスピードで起動しました。

imacstep29.jpg

無事SSD交換完了です。あとはTRIMの設定と環境設定の移行を進めて終了です。

iMacの旧起動ディスクである内蔵の500GBにはiPhotoのライブラリを置くことにし、それ以外はすべてSSDに移行しました。

起動ディスクになったSSDはTime Capsuleで自動バックアップされますが、iPhotoライブラリが入った旧起動ディスクはバックアップされないので、その点は工夫しないといけません。定期的にバックアップするための外付けHDDを接続して対応することにしました。標準機能でバックアップできるとよいのですが。

ちなみにこの作業で我が家のWindows PCとMacはすべてSSD実装済となりました。

iMacのDVDドライブをSSDに交換してみた(分解編)からの続きです。

iMacの分解はリスクもありますので自己責任でお願いします。

DVDドライブを観察すると、温度センサーらしきものが張り付いています。

imacstep10.jpg

ゆっくり保護シールを剥ぐと基板が見えます。慎重に基板本体も剥いでいきます。

imacstep11.jpg

次にDVDドライブを固定しているユニットの4本のT-8ネジを外します。

ここに2カ所

imacstep12.jpg

さらに2カ所あります。

imacstep13.jpg

4本のネジを外すとDVDユニットが外れます。

imacstep14.jpg

外したDVDユニットはこんな感じです。

imacstep15.jpg

DVDドライブを取り外すために、電磁シールドのアルミシールを剥がします。

imacstep16.jpg

DVDドライブを固定している4本のネジを外すと、DVDドライブが取り外せます。

imacstep17.jpg

ここでDVDドライブをSSDドライブに交換できるキットの出番です。

まずキットにSSDをとりつけます。これでSSDドライブの大きさと接続コネクタがDVDドライブと同じになります。

imacstep18.jpg

先ほどのプラスチックの枠にSSDドライブ交換キットを取り付けます。

ここで1つ問題があり、プラスチックの枠に2つほど小さな爪がでていて、それが邪魔になります。

imacstep19.jpg

私の場合は、この2つの爪はニッパーで折ってしまいました。もうDVDを載せることはないでしょうから。

imacstep20.jpg

DVDドライブを取り付ける要領で、SSDドライブを取り付けます。剥がしたアルミシールをもとに戻します。

imacstep21.jpg

DVDユニットをiMac本体に取り付けて、T-8ネジで固定します。温度センサーもSSDのケースにくっつけます。

imacstep22.jpg

これでDVDからSSDへの交換が終わりました。

このあとiMacのDVDドライブをSSDに交換してみた(組立編)に進みます。

iMacのDVDドライブをSSDに交換してみた(準備編)からの続きです。

iMacの分解はリスクもありますので自己責任でお願いします。

材料が揃ったところでiMacを分解する必要があります。

分解の方法はASCII.jpの記事を参考にしました。少し古いですが基本構造は同じと思います。

まずは正面のアクリル板を外します。吸盤を隅に取り付けて引っぱると上側に隙間ができます。

imacstep1.jpg

その隙間を利用して慎重にアクリル板を外すと液晶画面が現れます。

imacstep2.jpg

外したアクリル板はほこりがつかないように立てかけておきましょう。

imacstep3.jpg

次に傷がつかないようにバスタオルとかを敷いて、そこにiMacを寝かせます。

imacstep4.jpg

液晶画面ユニットはT-8のネジで固定されていますのでそれを外します。ネジの近くに強力な磁石があるのでネジやドライバーがくっつきやすいです。ピンセットなどでネジを固定しながら作業することをおすすめします。

imacstep5.jpg

外したネジはどの位置のネジかわかるように記録しておきましょう。私はこんな感じで図の上に置くようにしています。

imacstep6.jpg

ネジを外すと液晶画面が動くようになります。

この状態で再びiMacを慎重に縦置きにして、液晶画面を少しずつ前に倒すと接続ケーブルが何本か見えますので、これを慎重に外します。

左側に2本。

imacstep7.jpg

真ん中に2本。

imacstep8.jpg

左側の2本のケーブルと真ん中のフラットケーブルでないケーブルを1本外したところで、そのまま液晶画面を90度縦向きにすることができました。この状態でDVDドライブにアクセスできますので、真ん中のケーブル2本は外さなくてもよいかもしれません。(未確認)

imacstep9.jpg

ちなみに内部は相当ほこりがたまっていましたので、エアダスターで吹き飛ばしつつ掃除機で吸い取りました。

あと不注意にも液晶画面を触ってしまい、少し指紋がついてしまいました。これはあとでなんとかすることにしましょう。

このあとiMacのDVDドライブをSSDに交換してみた(換装編)に進みます。

iMac(21.5-inch, Mid 2011)のDVDドライブが突然動かなくなってしまいました。DVDメディアをいれようとしても吸い込んでくれません。実は以前使っていたMacBookProでも同様にDVDドライブが突然動かなくなったのです。この時はDVDドライブを新しいものに交換しました。

現行のiMacはすでにDVDドライブは非搭載なので特に本体に搭載されている必要はなさそうです。このスペースにSSDを取り付けたかたをちらほら見かけたので、私も試してみました。

iMacの分解はリスクもありますので自己責任でお願いします。

まず材料を集めます。

  • SSDドライブ(あらかじめiMacにUSBで接続してMacOS Xをインストールしておく)
  • SSDドライブをDVDドライブに取り付けるためのキット
  • T-8のドライバー
  • 吸盤

SSDドライブは240GBのものを購入しました。

ssd240gb.jpg

T-8のドライバーは以前に購入していたものです。

t8screwdriver.jpg

正面のアクリル画面をはずすために100円ショップで吸盤を買いました。

sucker.jpg

あとはDVDドライブの代わりにSSDを取り付けるためのキットです。何種類か同様なものがありますが、とりあえずこれにしてみました。

これで材料は揃いました。iMacのDVDドライブをSSDに交換してみた(分解編)に進みます。

RAPIROをpythonで動かしてみました

RAPIROと遊ぶ時間がなかなか取れなかったのですが、少し遊んでみました。

先日RAPIROに取り付けたRaspberry Piにログインして、pythonでRAPIROを動かしてみました。

サンプルプログラムを参考にしてテストプログラムを作りました。単純にUARTにコマンドを投げるだけのシンプルなものです。

import sys

import serial
import os
import time
import datetime

com = serial.Serial('/dev/ttyAMA0', 57600, timeout = 10)

sys.stdout.write('write #M0\n')
com.write("#M0")
time.sleep(5)

sys.stdout.write('write #M1\n')
com.write("#M1")
time.sleep(5)

sys.stdout.write('write #M2\n')
com.write("#M2")
time.sleep(5)

sys.stdout.write('write #M7\n')
com.write("#M7")
time.sleep(5)

sys.stdout.write('write #M0\n')
com.write("#M0")

これを実行してみました。

$ sudo python rapiro_test.py
write #M0
write #M1
write #M2
Traceback (most recent call last):
File "rapiro_test.py", line 19, in
com.write("#M2")
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 485, in write
raise SerialException('write failed: %s' % (v,))
serial.serialutil.SerialException: write failed: [Errno 5] Input/output error
$

なぜかエラーがでます。
調べたところUARTはOSのコンソールになっているということがわかりました。

psコマンドで確認すると

$ ps ax | fgrep AMA
2039 ? Ss+ 0:00 /sbin/getty -L ttyAMA0 115200 vt100
2055 pts/0 S+ 0:00 fgrep --color=auto AMA

確かにgettyがttyAMA0を使っています。
とりあえずコンソールから切り離します。まずはcmdline.txtの修正。

$ sudo cp /boot/cmdline.txt /boot/cmdline_backup.txt
$ sudo vi /boot/cmdline.txt

これを

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

こうしました。

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

次にinittabの修正

$ sudo vi /etc/inittab

これを

#Spawn a getty on Raspberry Pi serial line
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

コメントアウトしました。

#Spawn a getty on Raspberry Pi serial line
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

rebootして確認

$ ps ax | fgrep AMA
2069 pts/0 S+ 0:00 fgrep --color=auto AMA

これで大丈夫。pythonで正常に動くようになりました。

rapiro_uart.jpg

Lenovo Yoga Tablet 8を買いました

Lenovo Yoga Teblet 8を購入しました。購入動機は3G版でもそこそこ安く、おまけに3月末まで4000円キャッシュバックキャンペーンをやっているのです。レビュー評価も良いようで、Nexus7 2012並みのスピードとのことで使えそうです。

到着したYoga Tablet 8です。純正のスリーブケースも買いました。

yoga8_1.jpg

純正スリーブケースはいい感じです。マグネットで自然に吸い付きます。

yoga8_5.jpg

でも純正ケースに付属の液晶保護シートの端が梱包が悪く折れ曲がっていました。本体に貼付けてもこんな感じ。ここは減点ですね。

yoga8_4.jpg

裏返して、手持ちのmicroSDカードと、手持ちのIIJmio SIMカードを取り付けましたが、外側からはカードを装着しているのかしていないのかも分かりません。何かに当たった拍子でカードが抜け落ちるということは無さそうです。

yoga8_6.jpg

いつものようにセットアップをしたところ、特に何もしなくてもIIJmio SIMが認識されてアンテナが立っていました。この点は面倒なAPNなどの設定をしなくても良いので楽です。

yoga8_7.jpg

Yoga Tablet 8の特徴でもあるバッテリーシリンダーですが、これを使った傾斜は非常に見やすく、立てることもできますので非常に便利でした。

スピードも各種レビューのように以前使っていたNexus7 2012ぐらいでしたので、ストレスもなく操作することができます。

問題は液晶保護シートが今ひとつということですが、これはまたの機会に交換したいと思います。

RAPIROにカメラを取り付けました

RAPIROにRaspberry Piのカメラモジュールを取り付けました。

頭の中に取り付けますが、力がかかる部分ではないので、とりあえず2本のネジだけで固定しています。

rapiro_camera.jpg

カメラレンズの穴と、カメラモジュール基板のネジ穴が一致するためにはフレキシブルケーブルを上にして取り付けます。このケーブルの片端はRaspberry PiのHDMIとLANコネクタの間にあるコネクタにとりつけます。Raspberry Piへの接続方法や設定方法、カメラ関連ソフトウェアのインストールなどはRaspberry PiのCameraページが参考になります。

早速、Raspberry Piにログインして、カメラで画像を撮ってみました。

コマンドは以下のようになります。

pi@raspberrypi ~ $ raspistill -w 640 -h 480 -o capture.jpeg

撮影したcapture.jpegをMacに転送して表示したところ・・・

capture.jpeg

あれれ、逆さまになってしまいました。カメラモジュールの取り付け方を間違えたのかなと一瞬思いましたが、ネジ穴の位置から考えるとあの取り付け方しかできません。

何らかの方法で上下を反転させれば良いはずなので、いろいろ調べたところ、それを行うためのパラメタを見つけました。

-rot Set image rotation (0-359)

このパラメタを180と指定すれば上下反転されるはずなので、以下のコマンドを入力しました。

pi@raspberrypi ~ $ raspistill -w 640 -h 480 -rot 180 -o capture1.jpeg

撮影したcapture1.jpegをMacに転送して表示したところ・・・

capture1.jpeg

今度は正常に表示できました。

別コマンドになりますが、もちろんビデオ撮影もできています。

単なるストリーミングという使い方もできますが、いずれは画像認識を試してみたいですね。(残念ながらこのあたりのノウハウはありませんので、これから勉強ですが・・・。)

あと、いろいろRAPIROをいじっていたらふと気がつきました。

rapiro_led.jpg

このUSBコネクタの横にある、縦のスリットは何なのかと思っていたのですが、実はここからRaspberry Piの基板にあるLEDが良く見えるのです。このためにスリットを用意しているのではないかなと。良く考えられていると感心しました。

RAPIROにmbedを載せてみました

RAPIROが完成してRaspberry Piを載せてみました。

まずは、Raspberry Piの環境設定です。ボード単体で動かしてPythonのシリアルモジュールのインストールや無線LANドングルの設定など一通り済ませました。

rapiro_raspberry_pi.jpg

設定が終わったところで、RAPIROに取り付けます。さすが専用設計のためRaspberry Piがピッタリ載ります。

rapiro_raspberry_pi2.jpg

あとは、Raspberry PiにログインしてPythonで書いたサンプルプログラムを実行するとコマンドに応じた動きをすることができました。カメラモジュールも購入していますが、それはまた後ほど。

少し動かしてみましたが、想像以上にバッテリーが無くなります。デバックにはACアダプタが必須と思われます。電源電圧がだんだん落ちてきてRAPIROが変な動きになってしまいました。

rapiro_raspberry_pi3.jpg

やむなくエネループを充電している間に、Raspberry Piの変わりにmbedをつないでみました。

実はRAPIROの電源をいれたあとに、Raspberry PiのLinux OSの起動に少し時間がかかるのが気になったのです。これがmbedだと電源ON即動くのではと考えたのです。

Raspberry PiとRAPIROのサーボモータを制御しているArduinoとの間の通信はシリアルですので、他のマイコンでも制御可能です。通信速度は57600bpsのようです。

mbedをブレッドボードに取り付けてワイヤーを引き出し、RAPIROのシリアルコネクターに接続しました。接続図は以下の通りです。

RAPIROシリアル --- mbed
---------------------------
1 5V ------- p2 VIN
2
3 GND ------ p1 GND
4 TXD ------ p28 tx
5 RXD ------ p27 rx
6 (BLACK)
---------------------------

実際に接続した写真です。接続は4本しかありません。
rapiro_mbed1.jpg

mbedのオンラインコンパイラでさくっとプログラムを書きました。

RAPIROの電源を入れると無事動き始めました。

rapiro_medb2.jpg

動いている様子をYouTubeにアップしておきました。

今回は単純なコマンドをRAPIROに送ることを試しましたが、Bluetoothでリモコン制御にしたり、様々なセンサーを使った制御などmbedが得意とする分野では手軽に使えるのではないかと思います。

月別 アーカイブ

ウェブページ

Powered by Movable Type 6.0.3

最近のコメント

アイテム

  • WS000000.jpg
  • afterimage.jpg
  • imacstep29.jpg
  • imacstep28.jpg
  • imacstep27.jpg
  • imacstep26.jpg
  • imacstep25.jpg
  • imacstep24.jpg
  • imacstep23.jpg
  • imacstep22.jpg