advent3
slackにアップされてる画像からGPS情報取得するやつ
この記事は OIC ITCreate Club Advent Calendar 2015 9日目(12/9)の記事です。
slackでアップロードされる画像に位置情報があるのがすごく気になって
いたけれど、誰もつっこまないし、
誰もアドベントカレンダー書かない日だったので、
無理やり何か作ってみました。
暇なのか。暇じゃないです。全然。
slackにアップロードされている画像に位置情報があった場合、Google Mapにピンを立てます。
ピンのアイコンはファイルをアップしたユーザーのslackアイコンで、
ピンに表示されるのはexif情報の時間です。
所属しているslackチームの、web apiのtokenがあれば使えます。
trasla.rbを実行後(実行中)、map.htmlでこんな感じで見れると思います。
GPS情報を公開するのもアレなので内容は適当に編集しています。
jsonをajaxで取得するため、webサーバを立てるなりして下さい。
これで、slackメンバーの活動とかが見れて遊べます。
あとslackはSNSのようにExif情報などは消してくれないので、
閉じた環境ですが、気にする方は一度スマホの設定を良いかもしれません。
余
明日は 紅き衝動
advent
シンプルでキュートなハニーポットを作る
この記事は OIC ITCreate Club Advent Calendar 20152015 4日目(12/4)の記事です。
3日目の記事は、紅き衝動
今日はハニーポット的なものを作ったので紹介しようと思います。 暇じゃない人は読まないで下さい。
そもそもハニーポットとは何でしょう。
Wikipedia先生曰く
とのこと。
世の中にはプニキ以外にも蜜を狙った人やマシンが沢山いて、それを誘い出そうという感じですね。
そんな世の中には色んなハニーポットがあり、
などが有名どころではないでしょうか。
ログやDionaeaFRなどで眺めているだけでも面白いのですが、上記のハニーポットのほとんどがGUIではないため、初心者やGUIが好きな方には扱いづらいかもしれません。
また、アドベントカレンダーのタイトルにCreateなる文字が入ってる上、ツイッタで作るとか書いたような記憶もあるので、今回はとても簡単なGUIハニーポット的なものを作ってみました。
こんな感じ。
試行したユーザー名、パスワードがファイルに書き込まれます。
手作業だと面倒なので、hydraで攻撃してみます
THC Hydraは色んなwebの認証にブルートフォースや辞書攻撃が出来るツールです。
Basic認証の場合はこんな感じで実行します。
$ hydra -l admin -P lower http://localhost:2345
今回はOpenWallが配布しているパスワードファイルを使用します。
[DATA] attacking service http-get on port 2345 1 of 1 target completed, 0 valid passwords found
ログが沢山増えます。
- どこがキュートなの
Qtです。
- 何故Basic認証なの
余
昨晩書いた記事を、今朝アドベントに載せようと思ったところでこれを思いついたので、書いた記事をボツにして授業中に一日ハッカソンしてました。
wiresharkのアレもあって、自分の中で今ElectronとかよりQtがアツいと思って一発ネタで書いてたけど、Qt…ウーン… SIGNALとかSLOTとかあまり好きになれなかったです。rubyで書けるのはありがたい。
qtbindingsのexampleとか見てたら面白そうなのが色々あったので暇があったら試してみたいです。
Basic認証の部分はステータスコード401(Unauthorized)を返しつつ
レスポンスヘッダにWWW-Authenticate:Basic realm=""
を入れるとブラウザとかはBasic認証的な感じになります
あとはお好みで低めのApache等のバージョンとかServerの種類、Server時間、Content-Typeなどを入れるとそれっぽくなると思います。
Basic認証じゃないしパスワードとかそもそもないので安心。 不正アクセスを受けることにしか価値がないのでWikipedia先生の言ってた定義には当てはまると思われます。
以下思ったこととか
ちゃんとしたHoneypotすごい。
winの人はKFSensorとか使うと良い
socket.readするとソケット閉じてくれないのなんとかしたい。
9つどころじゃない首で攻撃してくる
[
明日のOIC ITCreate Club Advent Calendar 2015はtera911さんの「xhyveとdockerで〜」です。
答え合わせ
スゴイ内輪でやってるCTF的なやつの答え合わせ的なやつ
自分が作ったのを自分でWriteup書くという自作自演感。
初心者以下の自分が初めての人用にと作ったのでしょうもない上にあまり面白くもないと思うので、身内用に。
1. ba_ev.zip
zipの中に
- auth.pcap
- password.txt
があって、
auth.pcapはBasic認証
GET /itc/syuku/ HTTP/1.1 Host: -mondaiurl- Connection: keep-alive Authorization: Basic Z29yaXJhOm5lbXV0YWk= Accept: text/html,application/xhtml+xml,application/ ...
Z29yaXJhOm5lbXV0YWk=
は普通にbase64なので
デコードするとgorira:nemutai
wiresharkなら勝手にデコードしてくれる。
実際にBasic認証のページ( -mondaiurl- /itc/syuku/)にアクセスしてみると、
サーバーからのメッセージ: password is Password.txt at line pcap's src ip or mac
と言われる。
英語が稚拙なのは作ってたのが真夜中という言い訳をしつつ、pcapのIPアドレスとかMacアドレスを見てみるとどっちも00:00:00:00:00:ffと0.0.0.255で255。
それでpassword.txtの255行目を見ると
253 flipper 254 franklin 255 takoyaki_tabetai 256 frodo 257 honda 258 horses
怪しい文字列takoyaki_tabetai
が
ちなみにwindowsのメモ帳で開くと改行コードが認識されず全部1行で出るのでsublimeとか他のエディタとかで…
というか何故メモ帳…
とりあえずbasic認証をgorira:takoyaki_tabetai
で入ると完全JSで出来た無理ゲーが出てくる。
Monsterをすべて倒せるPlayer nameをslackでavisに直接投げてね。
とあるのでとりあえずplayer nameのとこに何か突っ込めば良いとわかる。
ページのソースを表示でjsをちらっと見ると
func = "(function(){return new Player('" + name + "',400,20)})" return eval(func)();
文字列のfuncをevalで実行してる部分をなんとかすればいいことがわかる。
god',1000000,1000000)})//
こんな感じでnameにnewするパラメータを入れ、あとの文字列をコメントアウトすれば、
(function(){return new Player('god',1000000,1000000)})//',400,20)})
こんな感じになり、とりあえずクリア出来る。
ハードモードは挿入する文字列に100以上の数字を入れると適当な正規表現パターンに引っかかって強制的に10に書き換えられるので、
god',Infinity,Infinity)})//
とかgod',0xffff,0xffff)})///
とかで文字列使わずに強くするか、
god',NaN,99)})///
とかで不死身にするのが良いかなという感じです。
ちなみに最短は','a
の4文字
簡単解説すると
(function(){return new Player('','a',400,20)})
こうなって、3つ目以降の引数は無視されて、 'a'はNaNに、デフォルトのHP400が攻撃力に。
very HardはPlayer functionとかMonsterの配列いじったりすればなんとかなると。
おわり
2. pcapのやつ
解凍するとw_pcap.pcap
が出てくる。
中身はひたすらSMB2のCreate Requestとかが。
全部目grepしてもいいけど
wiresharkのフィルタで
smb2.write_data
とかするとファイル書き込みだけに絞れる。
するとhint.txtの中身が
imyb://◯◯◯◯◯.◯◯/xiu/alzdm9/xkav4.dyy 1,19,5,12,26,17,27,14,4,16,0,9,19,7,17,16,15,15,18,21,8,13,5,19,18,25,15,16,2,13,2,4,6,20,9,18
1行目imyb://◯◯◯◯◯.◯◯/xiu/alzdm9/xkav4.dyy
がurlっぽく、2行目の数字分戻していくとhttp〜になり、シーザー暗号っぽいとわかる。
全部戻すと
http:// -mondaiurl- /itc/syuku4/hint0.jpg
が出てくる
hint0.jpgをダウンロードして、EXIFを見ると
Make : ~ mj9qOzoaWj56Phob+j6aP0o+Ohv6Pzo/mj9aPro/WjtKG/o+ij6aPuo/ShpaPno+mj5g== Orientation : Horizontal (normal) Resolution Unit : inches Software : WklQpM6l0aW5pe+hvKXJpM/JxLv6pe2hvKXeu/o1yri7+go=
MakeとSoftwareにbase64っぽい文字列が。
デコードサイトとかでデコードすると文字化けするのでエンコードをEUC-JPとかにすると
Make :http:// -mondaiurl- /itc/syuku4/hint.gif Software :ZIPのパスワードは苗字ローマ字5文字
になる。
あとは1個目のgifアニメの途中に出てくる短縮urlにアクセスすればパスワードが出てくるのだけれども、そもそもZIPがない。
さっきのhint0.jpgをunzipとかしてもzipが入っていないのでとりあえずjpegの終端コードを探してみる。
$ hexdump hint0.jpg | grep "ff d9" 00012a0 92 49 24 94 a4 92 49 25 29 24 92 49 4f ff d9 00 00022a0 24 94 a4 92 49 25 29 24 92 49 4f ff d9 00 ff e2 0014cd0 38 45 ff d9 37 7a bc af 27 1c 00 03 c3 d6 67 1c
すると14cd0行目のff d9
のあとに37 7a bc af 27 1c 00 03
とある。
お分かりの通り、これは7zipのヘッダーなので、あとは
$ 7z x hint0.jpg
でanswer.zip
が出てくる。
それにさっきのパスワードを入れて解凍
unzip -P パスワード answer.zip
で答えの404お姉さんが出てくる。
おわり。
3. sql.zip
解凍すると
- answer.zip
- hint2.zip
- q.txt
が。zipにはパスワードがかかっている。
q.txtには
問題 答えを探して見つけてネ http://59.106.210.146:9999/ hint1 zipのpass = 答え テスト用 test:testes
とある。
http://59.106.210.146:9999/にアクセスしてみると、
ユーザー名、パスワードを求められる。
とりあえずユーザー名:'
、パスワード:a
を入力してみるとエラーが。
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0cc175b9c0f1b6a831c399e269772661'' at line 1
SQLインジェクションっぽく、パスワードはmd5に変換されていることがわかる。
とりあえずSQLインジェクションのよくあるやつ1' or 1=1; -- '
をユーザー名に入力してログインしてみると
ログイン成功 id ユーザー名 パスワード(hashed) 8 root c0f7e2cc4e2c4fad6f9e1093e3c97088 9 ika 8242328498dc4ea53c5f624382484fc1 11 avis 7245253e24719ba66a84512838cd02f2 13 kotae 863c8bae7363efc4d998c81126048db0 15 test 6e7906b7fb3f8e1c6366c0910050e595
が出てくる。
大体のやつはググれば出てくる(ハズ
人のやつコピペ
8 root c0f7e2cc4e2c4fad6f9e1093e3c97088 gorira 9 ika 8242328498dc4ea53c5f624382484fc1 11 avis 7245253e24719ba66a84512838cd02f2 nemui 13 kotae 863c8bae7363efc4d998c81126048db0 15 test 6e7906b7fb3f8e1c6366c0910050e595 testes
ikaとkotaeは出てこないので、とりあえずkotaeの03cddbe6f50c559ab6073d5b9c78a450
を入れるとhint2.zipが解答できる。
解凍するとhint.txtが出てきて
md5 レインボーテーブル md5 逆変換 とかでググると…
とか書いてるのでそれっぽいサイトのレインボーテーブルとかでkotaeのパスワードがotukare
であることがわかる。
それでanswer.zipを解答するとans.txtが出てくる。
ちなみに、今回の問題は簡単すぎたと思い、隠し問題というか、唯一わからないikaユーザーのパスワードが隠し問題になっていて、
前回の問題の答えが404のおねえさんだったことから、http://5.106.210.146:9999/aaa
とかにアクセスして404ページを出してみると、sinatraのデフォルト404ページが出てくる。
ページのhtmlを見てみると、
<head> <meta hint="get /404 and login user'ika'"> <style type="text/css"> ...
metaタグにhint属性があり、http://5.106.210.146:9999/404
にアクセスしてみると、ユーザー登録ページが出てくる。
セカンドオーダーsqlインジェクションっぽいけど、ikaユーザーで適当なパスワードでsqlにinsertしてログインすると答えが出る。
おわり
sqlとかよくわからない人用説明
ログイン用のsqlは
query = "SELECT * from user where name like '" + name.to_s + "' and password = '" + mdpass + "';"
こんな感じに文字列で作られていて、それをexecute()で実行している。
mdpassはmd5に変換されてしまうので、nameの方に1' or 1=1; -- '
をすると、実行されるsqlは
SELECT * from user where name like '1' or 1=1; -- '' and password = '" + mdpass + "';"
--
以下はコメントアウトされ、or 1=1
がtrueになり、全ての行が選択されるという仕組み。