センスがないブログ

趣味の話とかいろいろ

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のとこのファイルにデータが書き込まれます。

これが問題なのか、仕様なのかは知りません。

結局これのバグ潰しをしたところで点が入る訳でも無かったようですね。

意味が解らない。

*1

 

まあそんな感じでした。

とにかくadminに入れなかったのが悔やまれるなぁって感じの大会でした。

*1:雰囲気から察するにスクリプトを運営側で一度もテストしていない??

他機種対応(笑)吸盤手帳型スマホケースをまともに使えるようにする

タイトルだけでは意味不明だと思いますので軽く説明

 

先日ゲーセンに行きまして

UFOキャッチャーでスマホカバーを取りました(ボーカロイドのかわいいやつ)

 

それが他機種対応とか書いてあったんでどんな保持の仕方するのか若干期待しながら開けたわけですよ。

f:id:NonSense:20161015002820j:plain

そしたらこんな感じの吸盤だったんです

 

これ始めのうちは結構よくスマホにつくんですけど、1〜2時間くらいしてくると取れるんですよこれが

他の人もよくスマホが外れて困ってるとかいうのよく見かけますし

 

んでこれを普通に売ってる感じの手帳型スマホケースにできないかと思いましてこの記事を

 

それで具体的にどういう風に改良するかというと

「吸盤取っ払って普通のスマホケースくっつけりゃいいじゃん!!!」

みたいなノリです

 

それじゃあ自分がやったことを下に書いてきます

 

 

まず既存のシリコン製っぽい吸盤を取っ払います

f:id:NonSense:20161015003632j:plain

こんな感じに、

糸で縫ってあるだけなのでハサミで切るなりカッターで切るなり下の写真の道具使うなりで取ります

f:id:NonSense:20161015003834j:plain

これ

名前なんて言うんですかね?

小学校とか中学校とかの裁縫のセットとかに入ってるやつ

 

それは置いておいて、次は、自分の使っているスマホのケースを用意します

僕の場合はiphone6なのでそれのケースを新しく用意しました。

セリアで売ってる透明のハードケースです。

 

シリコンとかのソフトケースでもできるとは思いますが負荷に負けてひきちぎれても僕は知りません。

 

次にケースに穴を開けるための目印をつけていきます。

紐と針を通すための穴なのでケース自体が柔らかくて針を通せるなら開ける必要はないと思います。

f:id:NonSense:20161015004435j:plain

透明のケースならもともと糸が通っていたところに細いマーカで点を打てばそれでいいと思います。

不透明のケースならば、もともとの穴から針刺して傷をつけて目印にするとかですかね?

 

それで、次は、穴を開けて行きます。

穴の径は針が通ればいいので誤差のマージンとって大きめに1mm〜1.2mmくらいでいいと思います。

1mmの穴を開けるにはピンバイス持ってるならそれで、

持ってなかったら、ダイソーとか行けば精密ドリルとか言って1.5mmのセットでドリル変えられないピンバイスみたいな感じで売ってるのでそれを使えばいいです。

ダイソーのそれは結構折れやすいので気をつけて作業しましょう。

 

それで穴を開けるとこんな感じ

f:id:NonSense:20161015005411j:plain

もともとの穴が等間隔ではないのでだいぶキモいですが仕方ありません

 

そしたら、あとは、ひたすら糸を通して縫っていきます。

針と糸は適当に用意して、縫い方は適当に開けた穴全部通るようにして

 

 

それで縫い終わったらちょっと引っ張ったりして強度確認して終わりです

 

こんな感じに

 

結構ちゃんとくっついていい感じです

吸盤の時よりもスマホが落ちないし、分厚くならないのでとてもいい感じです

elecrowで基板を頼んだ話

学校でやってるロボコンの小さい大会用にモータードライバを作ろうと思いまして

nekolab.blogspot.jp

の回路を参考にパターン引いてみました。

 

なんだか小さくしなさいみたいなお達しあったので大体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になって画像付きのメールが来てました。

f:id:NonSense:20160920201136j:plain

中身はだいたい、

こんな発送方法(僕の場合はエアメール)で発送したよ

だいたい7-25日で着くと思うよ

あと追跡番号も送っておくよ

 

出来が良くて満足してくれたら5つ星つけてね

満足しなかったら私たちに教えてね

よろしく

みたいな感じです(超意訳)

 

特に何かデザインで指摘されたところなかったけれどもちゃんと出来てますかね?

 

10/5追記

ロボコンの地区大会とかあって更新遅れてましたけど9/30に基板が届いていました。

f:id:NonSense:20161005211437j:plain

こんな感じです。

10枚頼んだけれど12枚送ってくれました。

シートとかの関係なんでしょうか?

 

シルクが0.2mmくらいずれていましたがパターンにかぶるとかはなかったのでいい感じです。

eagleのデフォのフォントサイズより2サイズくらい落としたサイズにしたらちょっと潰れる感じありました。

でも普通に読めるのでいいかなという感じです。

 

f:id:NonSense:20161005212448j:plain

こんな感じで一枚だけ部品乗っけて見たんですが、自分のハンダが悪かったのか、光るはずのLEDが光らなくてあるぇー(・ε)みたいな感じでした。

多分LEDの付け方が良くなかったんだと思いますけど

なんせこの基板で一番小さい部品ですし

 

とりあえず基板はちゃんと届きましたよという話で