KOSENSEC2016に参加した話(軽いWriteUpのようなもの込)
高専セキュリティコンテスト2016にzabun_oyamaとして参加しました。
今回初開催の大会だったのでいろいろとトラブルが多かったですね。というかトラブルしかなかったというか、なんか凄かったです(語彙力)
このセキュリティコンテストですが、各チームにIoTサービスを提供する感じのサーバのアドレスが開始直後に渡されて、そこにSSHで接続して、リモートで脆弱性修正なりバグ潰しなんかをしていって点を稼ぐ形式でした。
珍しいことに問題文が一切無く、修正するべき箇所のジャンルだけが示されるだけでした。
サーバが提供するサービスは、今回の競技課題のIoT車のステータスを確認したりだとかシステムの時間を変更するだとか、ファイルをアップロードするだとかそういうサービスです。このサービスに行き着くためにはbasic認証を通らなければなりません。
自分たちのチームはI2(?)の300点問題しか解けなかったです。
一番解けてるチームが多かったやつですね。
これは、/home/scuser/直下だかのbackdoorなるいかにもなディレクトリがあるので中身を確認します。
するとREADMEがあってcatなりで中身みるとpassword_is_backdoorみたいなことが書いてあります。同じディレクトリにもう一個なんかファイルがあった気がしますが忘れました。なんか中身がなくてファイル名で「これはデバック用ですよ」みたいなこと書いてあるだけのファイルだけだった気がする。
それで、passwd-とかindex_old.phpのページとかでユーザ一覧みるとbackdoorなるユーザが存在しているのが分かります。
さっきパスワードは教えてもらったので
$su backdoor
してパスワードにbackdoor入れるとログオン出来ます。
ユーザ名とパスワードが同じなのはパスワードが弱いので自分で適当なパスワードに変えてやります。
すると300点が手に入ります。
他の問題はhttp://サーバ名/admin/の中に入れないと話になりません。
adminのパスは"password"だったようです(同じ学校の別チームに聞いた)
まあ典型的な弱いパスワードですよね。
これに気づけると結構な得点を稼げると思います。
adminに入ってからはまずシステム時間を変えるページがあるのでそこでOSコマンドインジェクションして/var/www/html/の下のファイルの権限を777にしときます。
そしたら、.htpasswdの中身を書き換えて、adminのパスを変えます。多分これでI2のどれかの点が入ると思います。
他は、IoTCarのステータスを表示するstatus.phpがあってこれをadminのページから見ると表の一部でエラーを吐きます。ソース読むと、数値しか入らないところに直で文字列突っ込んでるのが分かります。これを直せば多分点が入ります。
他はインジェクションできるコードとかを直したり、p=ファイル名でファイル表示しちゃう感じのよくある脆弱性持ちのfile.phpを直したり、サーバの中身全部見れちゃうindex_old.phpとかいう危ないやつ消したり、index.htmlをubuntuのデフォページじゃなくてadminのあたりに飛ぶようにすればいいんじゃないんですかね?
ここら辺は競技時間中にやったことじゃないので合ってるかは知りません。
あと、競技終了後にいろいろ議論になってますが、サーバによってiotcarの実行ファイルがあったり無かったり、その実行ファイルの所有者はrootでiotcar.pyの中でsystemにコマンド投げて自分のユーザであるscuserにroot権限与えられちゃうってのはさすがにどうかと、今回優勝したチームは見事に当たりのサーバを引いて、開始30分でrootを取れたそうです。
多分rootが取れるのは運営側では意図してなかったと思います。
デフォでは/var/www/html/admin/の中のファイルはscuserには読み込み権限しか無く、所有者はwww-dataさんになっていてadminページからインジェクションするとこいつの権限でscuserに書き込み権限を与えることが出来ます。まあ当然rootは取れないはずです。
あと面白かったのは、127.0.0.1のどっかだかのポート(忘れた)でudp通信して/etc/iotcar/の中のデバイスを模したファイルに書き込むiotcar.pyスクリプト
これ最初の状態では構文エラーでて実行出来ませんでした。
何分だか経って運営側から修正されたコードが渡されました。が、これも正しく動きません。
まず、udpで受け取るデータは文字列になって届きます。それをそのまま数値と比較してるので、何度データ送りつけてもif文で弾かれて何も起きません。
次に、ファイルの開くモードが間違ってたりしてるので直します。
ここら辺は僕は直接触ってないので詳しく言えないですがそんな感じのことをしてやるとiotcarのとこのファイルにデータが書き込まれます。
これが問題なのか、仕様なのかは知りません。
結局これのバグ潰しをしたところで点が入る訳でも無かったようですね。
意味が解らない。
まあそんな感じでした。
とにかくadminに入れなかったのが悔やまれるなぁって感じの大会でした。
他機種対応(笑)吸盤手帳型スマホケースをまともに使えるようにする
タイトルだけでは意味不明だと思いますので軽く説明
先日ゲーセンに行きまして
UFOキャッチャーでスマホカバーを取りました(ボーカロイドのかわいいやつ)
それが他機種対応とか書いてあったんでどんな保持の仕方するのか若干期待しながら開けたわけですよ。
そしたらこんな感じの吸盤だったんです
これ始めのうちは結構よくスマホにつくんですけど、1〜2時間くらいしてくると取れるんですよこれが
他の人もよくスマホが外れて困ってるとかいうのよく見かけますし
んでこれを普通に売ってる感じの手帳型スマホケースにできないかと思いましてこの記事を
それで具体的にどういう風に改良するかというと
「吸盤取っ払って普通のスマホケースくっつけりゃいいじゃん!!!」
みたいなノリです
それじゃあ自分がやったことを下に書いてきます
まず既存のシリコン製っぽい吸盤を取っ払います
こんな感じに、
糸で縫ってあるだけなのでハサミで切るなりカッターで切るなり下の写真の道具使うなりで取ります
これ
名前なんて言うんですかね?
小学校とか中学校とかの裁縫のセットとかに入ってるやつ
それは置いておいて、次は、自分の使っているスマホのケースを用意します
僕の場合はiphone6なのでそれのケースを新しく用意しました。
セリアで売ってる透明のハードケースです。
シリコンとかのソフトケースでもできるとは思いますが負荷に負けてひきちぎれても僕は知りません。
次にケースに穴を開けるための目印をつけていきます。
紐と針を通すための穴なのでケース自体が柔らかくて針を通せるなら開ける必要はないと思います。
透明のケースならもともと糸が通っていたところに細いマーカで点を打てばそれでいいと思います。
不透明のケースならば、もともとの穴から針刺して傷をつけて目印にするとかですかね?
それで、次は、穴を開けて行きます。
穴の径は針が通ればいいので誤差のマージンとって大きめに1mm〜1.2mmくらいでいいと思います。
1mmの穴を開けるにはピンバイス持ってるならそれで、
持ってなかったら、ダイソーとか行けば精密ドリルとか言って1.5mmのセットでドリル変えられないピンバイスみたいな感じで売ってるのでそれを使えばいいです。
ダイソーのそれは結構折れやすいので気をつけて作業しましょう。
それで穴を開けるとこんな感じ
もともとの穴が等間隔ではないのでだいぶキモいですが仕方ありません
そしたら、あとは、ひたすら糸を通して縫っていきます。
針と糸は適当に用意して、縫い方は適当に開けた穴全部通るようにして
それで縫い終わったらちょっと引っ張ったりして強度確認して終わりです
こんな感じに
結構ちゃんとくっついていい感じです
吸盤の時よりもスマホが落ちないし、分厚くならないのでとてもいい感じです
elecrowで基板を頼んだ話
学校でやってるロボコンの小さい大会用にモータードライバを作ろうと思いまして
の回路を参考にパターン引いてみました。
なんだか小さくしなさいみたいなお達しあったので大体30x45くらいの基板サイズにしました
ついでにTO-220よりちっこいNchなFETならだいたい使えるようにした
それで小さくするためにいっぱいSMD使ったので自分では基板作れないと…
なので基板外注しようと思って9/14にelecrowに注文入れました
eagleつかってパターン引きました。
ガーバー吐かせるのはCAMのファイルが商品紹介的なページ下辺りにあるのでそれを突っ込みます
注文するときにイオンのJCBカード使おうとしたんですが、カードが対応していませんみたいなエラーが出たので父親のマスターカード貸してもらってやったらうまくいきました
注文方法とかは他のブログさんとかいろんなとこで紹介されてるから省略
配送方法はケチったのでエアメールで
大体2週間くらいですかね?
今テスト期間で月末にはロボコンの地区大会とかいうクソ日程なのでいろいろ落ち着いてから届く感じが理想ですね
9/17現在Confirmedのままなのでもう少し時間かかりそうですね
9/17 19:00追記
ステータスがPCB Processingになりました
23:30追記
ステータスがIn productionになりました
製造中ですね
9/20追記
Shippedになって画像付きのメールが来てました。
中身はだいたい、
こんな発送方法(僕の場合はエアメール)で発送したよ
だいたい7-25日で着くと思うよ
あと追跡番号も送っておくよ
出来が良くて満足してくれたら5つ星つけてね
満足しなかったら私たちに教えてね
よろしく
みたいな感じです(超意訳)
特に何かデザインで指摘されたところなかったけれどもちゃんと出来てますかね?
10/5追記
ロボコンの地区大会とかあって更新遅れてましたけど9/30に基板が届いていました。
こんな感じです。
10枚頼んだけれど12枚送ってくれました。
シートとかの関係なんでしょうか?
シルクが0.2mmくらいずれていましたがパターンにかぶるとかはなかったのでいい感じです。
eagleのデフォのフォントサイズより2サイズくらい落としたサイズにしたらちょっと潰れる感じありました。
でも普通に読めるのでいいかなという感じです。
こんな感じで一枚だけ部品乗っけて見たんですが、自分のハンダが悪かったのか、光るはずのLEDが光らなくてあるぇー(・ε・)みたいな感じでした。
多分LEDの付け方が良くなかったんだと思いますけど
なんせこの基板で一番小さい部品ですし
とりあえず基板はちゃんと届きましたよという話で