センスがないブログ

趣味の話とかいろいろ

高専SECCON2018に参加しました(日記とWrite-Up) #kosensc

こんにちはセンス無いです。

今回KOSENSCに小山高専のチーム" 074m4K053n (おたまこうせん) "略称"074m4"として参加しました。

チーム構成は4年生な僕と、自作OSとかしちゃう系の同級生1人と、たしか専攻科1年のpythonできる系の先輩と数学ができる先輩でした。

 

前回の木更津高専さん主幹の大会はインテンシブ・イングリッシュとかいう教科のせいで行けるはずの会場に行けなかったうえ、参加すらもできなかったというクソ仕様でした。

今回はちゃんと大会に参加できました。よかったね。

今回は会場が福岡(だっけ?)なので、会場には行かずにリモート参加です。

 

学校のラウンジを借りてみんなでPC持ち寄って参加しました。

手前側がぼく達のチームで、奥が別のチーム" おやまようちえん(おやまどうぶつえん) "略称:"およ"です。毎回毎回チーム名なんなんですかね。

KOSENSCのslackのrandomに顔入り写真をアップロードしてしまう情報リテラシーのかけらもない学校ですうちは。(でかいポカリのペットボトル顔の前で持ってるのが僕です)

 

それで、そんな頭の悪い学校のチームの結果は、3250点で総合3位でした。

webに弱いのが見え見えですね。(というかwebの配点高くない????)

今回のチームは僕がちょっとwebの知識あるくらいな感じだったので、脆弱性名と攻撃方法ををpythonが書ける系のおにいさんにぶん投げるみたいなノリでweb問解いてました。

"およ"のほうも7位なのでだいぶ頑張れたと思います。拍手拍手!

 

全23問の中で僕が解いたのは、たしか

  • 07 シンプルなQRコード [Binary 200]
  • 08 旅行の写真 [Crypto 200]
  • 10 Basic認証 [NetWork 100]
  • 18 更新されたIoT対応デバイス [Misc 50]
  • 20 サイトを見ていただけなのに [Misc 50]
  • 21 謎のファイル [Misc 100]
  • 23 攻撃ログ [Misc 300]

なはずです。

以上が間違っていなければ、僕がsubmitした分の得点は1000点分ですね。

他の人に解き方だけ教えて、解いてもらったものとかもあるのでもうちょっと貢献できているはず。

 

これからCTF始めそうな学校の低学年とかにも備えて、僕が解いたやつ以外にも解法を聞いてるやつもWrite-Upしていこうと思います。そこそこ丁寧めに書くつもりです。

 

00 Sample [Sample 100]

 

やるだけ。

 

01 まどわされるな! [Binary 100]

 渡される問題ファイル"flag.out"をcatするなりfileなりするとELFであるとわかります。

とりあえず、stringsに突っ込むなり、catするなり、テキストエディタに突っ込むなりすると

flag is SCKOSEN{you_are_go... oops! I Forgot!

 というテキストが見つかります。見つかるはずです。彼は脳内メモリが26bytesしか無いようです。ナメてますね。

(僕はこの問題を解いていないし、実行したらどうなるかとか知らないです。)

これが、"片方のフラグ"らしいです。

そして、このflag.outを、メモ帳に突っ込んでjpgのマジックナンバーFF D8 FF EE(.リ.)を目Grepするか、binwalk(win環境ならDataCutter.exeとか)に突っ込むとケツにjpgがくっついているとわかります。

そのバイナリを取り出すと

こんなのが出てきます。

これらを結合したらフラグです。

 

問題の"まどわされるな!"は、おそらくELFの解析のこととかでしょうね。

 

マジックナンバー(ファイルの頭についてる識別コード的なもの)はいくらか覚えていると便利なので一回は目を通して見よう!!! マジックナンバーまとめ

 

02 ログインしたい! [Binary 100]

渡されるのはELFらしいですが、解いてないし、話も聞いてないので解法知らないです。

stringsとかltraceとかstraceすればフラグ出るんじゃないんですか(適当)

 

03 printf [Binary 100]

とりあえず、ncしてみます。

するとなんだか、

みたいなのが出てきます。接続毎にthe secret is in の値は変わるようです。

what do you want:

と聞かれるので

Money!!!

とか書いてEnterッタッーンってすると、

there is no Money!!!

 って言われます。ナメてますね。

そして、この結果と問題名、からメタ推論すると、内部のコードは

printf("what do you want:");

scanf("%s",str);

printf("there is no %s",str);

みたいになっていると思われます。

そして、"%x %x %x"とか入力すると、

このようにアドレス値っぽいのが出力されます。

これらのことから、典型的なFormat String Attack(書式文字列攻撃)が効くやつとわかります。

さらに、" the secret is in "とか言っているあたりから、そこに表示されているアドレスにフラグがあると目星をつけます。

僕はコード書けない系なので、先輩に脆弱性と攻撃手法を伝えてコード書いてもらいました。先輩は脆弱性知らなかったっぽいのでぼくの間接的得点です。+100

とっても典型的な問題なので、解き方とかコードとかは調べればいくらでも出てくると思います。

 

04 XOR,XOR [Binary 200]

 ぼくは何もしりません。

なんかプログラムの中でフラグを作っているらしいので、デバッガ使って適当なところで止めたりすると、フラグが出てくるそうです。しらんけど

 

05 Simple anti debugger [Binary 250]

これも知らないです。

先輩が

アセンブラ高級言語だなぁと思いながら、バイナリ書き換えた

 とか言ってました。

デバッガを弾いてるとこのコードを書き換えて、"Simple non anti debugger"にしてdgbぶん回して解いたって言ってましたよ。

 

06 exchangeable if [Crypto 100]

次のような画像が渡されます。

ナメてますね。

このファイルをstringsにかけるなりすると、

md5=2009d1c114ed83f57cf8adde69fd6ca8 

という文字列を見つける事ができます。

ぼくが分かったのはここまででした。

しばらくしたら、数学のできるおにいさんが、

トイレ行ってたらなんかフラグでてたww 

 みたいなこと言っててsubmitしたらsuccessしてました。こわい

解法を聞いたところ、あのMD5はフラグのハッシュだったらしいです。

不明な文字がxxxxの4文字で、入りうる文字は大小英数字の計62文字っぽくて、全ケースは62^4=14776336です。

確かにトイレ行ってる間に出そうな数です。

コード書いて、ハッシュが一致したものがフラグです。

 

07 シンプルなQRコード [Crypto 200]

こんなことしてたので当然この問題はぼくに回ってきました。

 

はい。

問題では、次のようなQRコードが渡されます。

なんかすっごいみたことありますねこういう問題。

SECCON CTF 2013のonline予選[forensics 400]の問題ですね。

eleclog.quitsq.com

はい。ここのブログ様のようにやりましょう。

数学のできるお兄さんに、上のブログURLをぶん投げて、誤り訂正ビットから、マスクパターン指定子を計算してもらいました。

結果は0b011 = 3らしいです。

この結果を用いて、手でごちゃごちゃやろうとしてるところに同級生くんが強そうなツールを見つけてきてくれました。

github.com

めっちゃ強そうですね。(名前大好き)

このツールに文字列にしたQRの配置をぶん投げると、デコードしてくれます。

とりあえず問題のQRコードを文字列化するコードを適当に書きます。(ぼくはHSPで書いた)

そんでもって、このツールに突っ込みます。

すると、

不明なモード指定子 

みたいな感じで怒られてしまいます。

デバックモードのオプションをつけて実行してみると、モード指定子が書いてある、右下のパターンを見ると、確かに存在しないモード指定子になっています。(確か0b1010)

ぼくは一回、数学のできるお兄さんに出してもらったマスクパターンでマスキングした画像を作っていて、そのパターンとは明らかに違っていたので、おそらく"ツールがはじき出したマスクパターンが間違っている"と予想立てしました。

このツールは-mオプションでマスクパターン指定子を指定することができるそうなので、計算してもらった"3"を指定して実行してあげると、フラグが出てきます。

 

08 旅行の写真 [Crypto 200]

次のような画像が渡されます。

何かを隠しているそうです。

とりあえず、中のデータを見てみましたが、特に怪しそうなところは見当たりません。

よくわかんないので

png ステガノ

でGooglingしました。

すると、トップでこんな記事が出てきました。

ステガノグラフィーの解析について

"うさみみハリケーン"の"青い空を見上げればいつもそこに白い猫"のヘルプっぽいです。

読み進めると、赤色数値のビット0を抽出するとフラグが出てくる例とかが書いてあります。

こういう系かなと思ってとりあえずソフトをDLして、突っ込んで"ステガノグラフィー解析"を押しました。

こんな感じの画面になります。

左上の"次候補"を押して行くと

いろいろなタイプの表示をすることができます。

 こんな感じで。

とりあえず次候補をクリックしまくってみます。

こんな感じになります。

どうやら、緑と青のビット[3:0]に本来の画像ではないデータが入っているっぽいです。

 

そしたら、画面右上の"ビット抽出"を押します。

 こんな画面になります。

そしたら、さっき見つけた怪しそうなビットに対応するとこにチェックを入れます。

 そして、"バイナリデータ"表示を押すと、

フラグが出てきます。

 

いやぁ、マジで便利ですねうさみみさん。

コード書こうとしたらすごいめんどくさいし、そもそも兆候を見つけられない気がします。

ちなみに、この問題は僕がFirst Solverでした。

初日終了時点で " あの " insecureさんちも解けてなかったのでだいぶ浮かれてました。

 

09 CMA [Crypto 250]

数学のできるおにいさんが解いてました。

問題の.txtを読むとRSA暗号の問題っぽいです。

ファイルでは公開鍵n,eの組とそれに対応する暗号文cが2つづつ与えられています。

それらの値を見ると、

n1=n2

e1≠e2

であるとわかります。

そしてファイルには、

Dec(c1) == Dec(c2) == m?: True 

 と最後に書いてあります。

c1とc2を解読した結果が一致しているということでしょう。

このような場合には、Common Modulus Attackが有効です。

あとは適当に調べて書いてある通りに実行すれば解けるはずです。

inaz2.hatenablog.com

ももテクさんめっちゃ参考になるはずです。

 

09 RSA? [Crypto 300]

これも数学のできるおにいさんが解いてました。

おにいさん曰く、問題文の

冪演算のない世界線に来てしまった。

から、ヒントを得たそうです。

 

通常のRSA暗号の仕組みは、

暗号化 : c = m^e mod n

復号 : m = c^d mod n

の式で表されます。

しかし、この問題では冪演算が存在しないそうなので、冪演算の代わりに掛け算を使っているのではないかという予想を立てたそうです。

そうすると、暗号化の式は c = m*e mod n となります。

これを復号する場合は m = c/e mod n となりそうです。

あとは計算して文字列化して終わりです。

 

10 Basic認証 [NetWork 100]

pcapが渡されるので、とりあえずWireSharkで開いてみます。

そして、適当なパケットを右クリして追跡でTCPストリームなりHTTPストリームなりを表示してみると

こういうのが出てきて、

Authorization: Basic am9objpzOG9YKnpsY3JvOD8jd2xibHByNA==

 の最後のブロックをBase64でデコードすると、

 john:s8oX*zlcro8?#wlblpr4

 となります。

それで、ストリームの最後の方に

<p>flag is here

<a href="/flag.zip">flag.zip</a>.</p>

<p>(zip password is john's password.)</p>

 と書いてあるのでflag.zipを取り出します。

ファイル -> オブジェクトをエクスポート -> HTTP でflag.zipがある行を選択して保存します。あとは書いてある通り、johnさんのパスを突っ込んで回答したらフラグが出てきます。

 

11 ログインしてフラグを入手せよ。 [NetWork 150]

ぼくは解いてないので知らないです。

これを解いたおにいさん曰く、akictfに同じような問題あるそうです。

そのWrite-Upを探せば解けるはずです。

 

12 サーバーから情報を抜き出せ!

 問題で与えられているサーバーにアクセスするとこんな感じの画面が出てきます。

画像が頭おかしくて好きです。

このページは画像しか表示していないうえに、ソースコードにも怪しいところがありません。

わかんないので、画像を右クリして新しいタブとかで開いてみます。

するとURLがこのようになります。この状況からメタ推論して、このリクエストにはディレクトトラサーバルちゃんトラバーサルの脆弱性があると考えます。

問題文で、フラグのファイルは"flag.txt"ということが分かっているので、とりあえず、filenameのパラメータに書いて見ます。

 

はい。このディレクトリにはそんなもの存在しないそうです。

僕はここで詰まったので、先輩に状況を投げたら、" ../flag.txt "指定したら行けた!!ってなってました。

そういうことらしいです。

これも僕の間接的得点ですねきっと。+100

 

14 アカウントを奪え [Web 300]

問題のサーバーにアクセスすると、

こんな表示になります。

kosenjohでログインしろとのことなので、Useridにそれ突っ込んでPasswordにpasswordとか1234とか弱そうなパスをとりあえず突っ込んで見ます。ただ、なんか違うっぽいのでSQLインジェクションとかできるんじゃね??とか思い始めます。

Useridにkosenjoh、Passwordに典型的なSQLiの'OR 1=1;-- を突っ込むと

こんなページに飛ばされます。

古戦場から逃げるな!!

さっきのフォームのphpコードですね。

この問題の最終目的は"kosenjoh"のパスワードを抜くことだそうです。

コードを読む感じでは、SQLのクエリの結果は成功か失敗かしかわからなそうです。

こういう場合はブラインドSQLを使います。1文字づつ調べて行くやつです。

僕はコード書けない人種なので、pythonのおにいさんにこのソースのページと参考になりそうな記事をぶん投げたら解いてくれました。

間接的得点+300

 

15 47405b599e22969295ebed486d7343cb [Web 300]

解けなかった問題その1

とりあえず問題名が謎なので調べて見ると、

"SQL Injection"のMD5ハッシュだそうです。

はい。ヒントですね。

問題のサーバーにアクセスしてみます。

こんな表示です。SQLiしろってことらしいのでとりあえず上のNo.に'OR 1=1;-- を入れてみます。

こんな感じのデータの組が83件表示されますValueはなんだかAsciiコードっぽいですが、あんまり関係なさそうなのでスルーしました。

(insecureさんのWrite-upにデコードした結果が書いてありました。ここにはフラグないでwフラグはだれかのパスやぞwwみたいな感じになるらしいですよ。

スルーしたけど、あってもなくてもあんまり関係なさそうだったので良かったです。

 

んで、したのログインフォームっぽいとこも調べて見ます。

ぼくあんまりかじってないので、詳しく書けないんですが、IDにadmin突っ込んで、適当なインジェクション仕込むと、Welcomeとか表示されたそうです。

どうせadminのパスワードがフラグだろうと踏んでいたので、pythonのおにいさんにブラインドSQLのコード組んでもらってやってもらってたんですが、なぜか途中で404が吐かれるようになって結局解けずじまいでした。

相当悔しがってました。わかる。ちゃんとしたWrite-Up読みたければinsecureさんのとこ見に行くといいと思うよ。

furutsuki.hatenablog.com

 

16 進撃せよ [Web 300]

解けなかった問題その2です。

WAFの問題でした。

アクセスしてみます。

"test.txt"をクリックするとtestと表示されました。

URLを見ると、

http://waf.kosensc2018.tech/list/dGVzdC50eHQ= 

 となっていました末尾は明らかにBase64なのでデコードしたら"test.txt"になりました。

次に"flag.txt"をクリックすると、

ってなります。 わふ~~~

また、ファイル名はBase64エンコードしなくても、アクセスできるみたいです。しかし、相変わらずflag.txtはわふ~~~ってなります。

つまりは、(平文にflagが含まれている) or (Base64でデコードした結果にflagが含まれている) っていうことですね。たぶん。

どうにかしてflagを含まずにflag.txtと表現するという方針でいろいろやってたんですけど、全部ダメでした。

例えば内部がshell的なものと想定してfl''ag.txtと入れてみたり、文字列連結のシェル芸とかしてみたりしてました。

途中やってて、../のb64エンコードを突っ込んだら、無が表示されたので、ディレクトリトラサーバルちゃんがいるって気づきはしました。気づきは。

他の人のWrite-Upみると../../../../../etc/passwdが成功するらしいです。ぼくも同じようなことやったんですけど多分../の数が違うのだけを入れていた可能性がとても高いです。残念。まあ見れていたところで、その先は絶対進められなかったとおもいますけどね。

 

この問題は"flag.txt"を2回b64エンコードすることでflagを取れたそうです。エスパー問題らしいです。

とても単純でした。エスパー力が足りませんでしたね。

これ解けていれば2位になれていたので、とっっってもくやしいです。くぁwせdrftgyふじこlp;@:「」あsdfあsdf

 

はい。まあ仕方ないですね。こういうこともあります。トランプの裏側から番号当てるゲームをしまくって10月のonline予選に備えます。どうせまたSECCON{STAR_WARS}とかでてくるから。

 

17 人大杉を見たくない [Misc 50]

KOSENSCのMisc問はほとんどがGoogling力を試される感じですね。

www.atmarkit.co.jp

まあこれじゃないですか?

正解知らないんでわかんないですけど、たぶんavaliabilityです。

 

18 更新されたIoT対応デバイス [Misc 50]

Joke RFCですね。いつものって感じです。

Hyper Text Coffee Pot Control Protocol - Wikipedia

https://tools.ietf.org/html/rfc7168

コーヒーのやつを知ってればお茶のも知ってると思います。

コーヒーをお茶向けに拡張したやつらしいですよ。

Joke RFC伝書鳩プロトコルとかも結構好きです。

 

19 君の名は2018 [Misc 50]

前回のKOSENSCで"君の名は"っていう問題が出たらしいですね。

これも調べるだけです。

これはだいぶ話題になったので知ってる人がほとんどだと思います。

 

20 サイトを見ていただけなのに [Misc 50]

気合で調べましょう。

ドライブバイダウンロード - Wikipedia

pythonのおにいさんはハイフン区切りを見逃していたらしくて投げてました。いただき

 

21 謎のファイル [Misc 100]

とりあえずファイルをダウンロードします。

zipらしいです。よくわかんないのでとりあえず展開しましょう。

はい。分かる人は一瞬でわかると思うんですけど、Microsoft Wordのファイル構造です。(wordってディレクトリがあるからそれでも気づけるかも)

あとは、"rename_me.xml"とかいうファイルがありますね。

名前変えればよさそうです。

wordのファイル(.docx)を作って、拡張子を.zipに変えて展開してみましょう。

CTFやったことのある人ならば、オフィスのファイルは全部zipで展開できるってのを知ってると思います。知らなかった人はおぼえて。

さっきの問題のやつと比較してあげると、"rename_me.xml"は"[Content_Types].xml"にリネームしてあげればよさそうです。

名前を変えたら、zip圧縮して、拡張子を.docxに変えてWordとかで開いて見ましょう。

縦書きでフラグが出てきます。

 

22 ディスクが足りない! [Misc 100]

悲痛な叫びですね。

ファイルをダウンロードすると.gzのファイルをもらえます。

展開しまくるとフラグが出てくるそうです。

僕解いてないので知らないです。

 

圧縮しまくると1bitとかになっちゃうって思いこんでるやつですね。かわいい。

 

23 攻撃ログ [Misc 300]

ファイルを落っことしてくると、Apacheさんのアクセスログっぽいです。

生のテキストだとクソ見づらいので適当なビューワを落としてきました。

www.vector.co.jp

こんな感じ。生テキストよりずっといいです。

一応1万行ちょっと全部目を通した感じだと、セッションハイジャックしようとしてたり、windows\system.iniとか/etc/passwdとかを見ようとしたりファイルアップロードで書き換えようとしてるような感じでした。なんかゲームサーバーとか社員用のファイルエディタとかブラウザ、その他いろいろな機能を提供してるみたいですね。全く関係ないです。

技術的な観点からログを探すならば、攻撃が成功してるであろうログをピックアップしていく感じになるでしょう。やるなら、コードが200以外でファイルをいじっているようなログとか。

そういうのはめんどくさいので問題として成立するようなログを探す方向でやりました。このログは、ほとんどのログが重複していて、唯一のログというのが見当たりません。

つまり、他のログと重複していない唯一のログを探し出すのが目標になります。

落としてきたツールの機能をいろいろ使って調べてみたところ、ログの中にAgentが3種類登場することがわかりました。

  • Content-type:-
  • Content-type:application/x-www-form-urlencoded
  • Content-type:multipart/form-data;

これらの3つです。そして、一番下のmultipart/form-data;は11039行のログの中でたった1つしか存在していませんでした。

192.168.10.26 - - [29/Aug/2018:20:56:37 -0700] "POST /fileupload/upload.action HTTP/1.1" 500 347 time:49 Content-type:multipart/form-data; boundary=---------------------------100000000000

このログですね。

これをsha-1でハッシュしたのを送って300点!かとおもったらなぜか、不正解。

結局sha-1ハッシュを大文字で書いていたのが悪かったみたいです。

小文字でsubmitしたら通りました。そこら辺2種類登録しといてほしいですね。

 

Content-type:multipart/form-data;はファイルアップロードのときに出るやつなので、これをアテにして解いていく感じなんですかね。

おそらくディレクトリトラバーサル経由のファイルアップロードでシステム書き換えられた!みたいな想定で。

 


 

以上、結局全問触れてしまいました(需要がなさそう)。自分が解いてないやつは詳しく書いてないですけど、多分調べれば全部解けるので、まあそういうことで。

 

今回もとても楽しめたので、来年も是非参加したいですね。

KOSENSCは難易度がSECCONの予選とかよりも学生向きで、解きやすいのが多くていいですね。(KoHやりたかった)

あとは要望というか、愚痴というかなんですけど、スコアグラフとかのページを公開してほしいなぁって思ったりしました。youtubeの配信だと切り替えの時間が早すぎてまともに見れなかったんですよね。

それと、ジャンル分けをもうちょっと詳しくしてほしいなぁって思いました。ステガノだとかreverseだとかそういう

 

次はSECCON online予選になるのでWebを解けるようにして挑みたいですね。

今回のKOSENSCはなんだかwebの1問あたりの配点すごく高かったですね。Webはぼくらのチームの弱点なので、とてもつらい感じでした。

でもまあ、全正答まで2問に迫れたのでだいぶ良かったと思います。

 

こんなかんじですかね。

わざわざここまで10,829文字も読んでくれてありがとうございました。

参加者、運営陣の方々おつかれさまでした。最後の方とかスコア白熱しててとってもいい大会でした!

shupaconf4に行ってきました

こんにちはセンス無いです。

 

前回のshupaconf3に参加して、なんだかとっても楽しかったので、今回も参加してみました。

 

今回の会場は横浜近辺のおしゃれな感じの“THE CAVE”っていう地下のお部屋でした。若干かび臭かったのも雰囲気ですね。

 

時間をずっと12時からだと思っていてその時間にお家を出たけれど、本当は13:30からだったらしくて、時間ができてしまいました。

なので、暇を潰しに秋葉原でお買い物していきました。お家のキムワイプが無くなりかけで、買い足そうと、千石に行ったら、Sサイズのキムワイプに700円の値札が貼ってあって、ボッタクリにも程があるなって思いました。値札見ないでレジ持って行ってたらと思うと、こわいですね。

そのあとは、秋月行ったりメロブ行ったり、そこそこ楽しんでから、会場の最寄り駅にむかいました。

 

今回は、お話しのネタを用意していなかったので、お話聞くだけの存在で行ったんですけれども、当日に、ぱかさんが「平成最後の夏で一本つくって」って言ってくれたので、総ページ5枚のパワポを即興で作りました。“内容は無いようです”

 

みんなのお話が終わってから、ぱかさんが”なぜか“持ってきていたチャイナ服(?)を着る大会になりました。見事に標的になりました。他の参加者さん達も同じように標的になってました。

服をきた後、なんと、ぱかさんのメイクアップの標的にもなりました。人生で初めてのメイクでした。うれしいですね。

ちゃんとかわいくなってたらしいですけど、あとで自分の写真みると、やっぱり「うわっ」ってなりますね。よくわかんないです。

ぱかさん以外にも道具を持ち込んでる人がいっぱいで、ウィッグとか口紅とか、なんでも出てくる空間でした。こわいですね。

あとから思い出すと、かなりおかしな空間が出来上がっていたなぁとおもいます。

 

今回の、shupaconf4が最後のshupaconfらしいです。ぱかさんはとってもやさしくて、楽しい感じの人なので、またいつか会えたらいいなぁって思ってます。DiNNERの分のお返しもしたいですしね。

 

ただのつまんない日記みたいになっちゃってますけど、結論は、すっっごくゆるい感じの会で、楽しかったですってことです。

あとは、まあ、各々いろいろあると思うんですけど、また同じメンツで会える時があればいいなぁっていうだけです。

 

これでおわりです。ありがとうございました

 

shupaconf3に参加してきました

こんにちは。

最近こっちのブログで記事を書いていないセンス無いです。

 

学校で所属しているエレ研のブログの方に最近、一本記事を投稿したので見てもらえればいいなとおもいます。

東京高専で開催された高専カンファレンスin高尾2018で発表したもの紹介というか作り方の記事です。

eleken.jp

 

さて本題ですけど、先日5/5に開催されたshupaconf3に参加させていただきました。

申し込みするまで、しゅーぱかさんをフォローすらしていなかったぼくがなぜ参加したかというと、

これです。

 

当時ぼくは高尾のカンファに参加して「カンファ楽しいやん!もっと参加したいな?」みたいなテンションだったので速攻で申し込みしました。

 

以上、動機でした。

 

当日の話をします。

当日は方向音痴な@R_I_R_Uさんと一緒に行くことにしていましたので、適当な場所で合流して、上野経由で柴又まで行きました。

帝釈天の参道はGW中だったので人がいっぱいいましたね。全然進めません。

ちょうど1時くらいだったので天丼の匂いが犯罪的でした。

 

4分くらい歩いて会場につきました。会場はいい感じにおしゃれな空間でしたね。一人では絶対いけなさそうです。

会場にはすでに参加者の大半がいました。名札を書いて、開始まで待機です。

ぼくの名札です。はがきサイズで自由に書いていいと言われたので、自由に書きました。

 

当日はLT形式の発表で、一人5分もしくは10分,15分の発表時間と決められていましたが、めっちゃ緩かったです。時間あんまり関係無かったですね。

ぼくは発表をしない聞くだけな"傍観者"で申し込みしたので、気が楽です。

 

みなさんの発表の内容ですけど、最初はなんかこう、「Twitterと上手に関わる方法」とかそういう感じだと思っていたんですけど、めっちゃ技術色が強い発表が多い印象でした。

Unityでゲームエンジン作る話とか、CMSを構築する話とか、サイトジェネレータ作ってる話とかがあった気がします。

技術色強くない話もありました。会社入ってからの生活の話とか、好きな曲をめっちゃオススメする話とか、ボールペンオタクが本人不在で動画で発表するのとか、質問の自由時間が発表のほとんどを占めるようなよくわかんないやつとか。

1週間前なのでしっかり覚えてないです、すいません。

 

そして、LT聞いていると自分もなんかお話したくなってきました。

なんだか飛び入りで発表することが許されてしまったので、たまたま持ち込んでいた自分のノートPCを起動させてちょっと準備しました。

 

発表するまでの間に休憩時間が15分くらいありました。暇だったので、たまたま持ち込んでいた麻雀牌と取り出して、3人麻雀しました。

上がれなかったです。

 

ぼくの発表ですけど、高尾LTで発表した、左手デバイスを自作した話か、QRコードを手読みする話のどっちを聞きたいか手を上げてもらった結果、QRコードを手読みする話になりました。

個人的に左手デバイスを自作した話のほうがスライドの完成度が高いのでそちらのほうがよかったんですけど。

ちなみに、QRコードを手読みした話のスライドはエレ研の新歓LTで発表したやつそのままです。

授業中にQRコードを読んだ結果をTwitterに投稿したら伸びたので調子に乗って発表当日に3時間くらいでまとめた低クオリティなものです。

ちなみに該当ツイートはこれです。

 

 実際の発表はそこそこウケ取れましたね。よかったです。

 

その後、部屋の隅でPCいじってたら、しゅーぱかさんにポッキーを大量に口に詰め込まれました。

f:id:NonSense:20180513160217j:plain

まさしくこんな感じです。ひどいいじめですね。美味しかったです。

 

こんなところでしょうか。

他になにか思い出したら追記するかもしれません。

 

総括としてとても楽しかったです(小並感)

ただみなさんとお話があんまりできなかったきがするのでまたどこかで合いたいなぁと思いました。

横浜くらいなら行けるので次やるなら横浜がいいです。

 

以上です。中身のない記事を読んでいただき、ありがとうございました。

BMS用IIDX専コンを自作

きっかけは弐寺専コンが欲しいと友人に頼まれたことです。

友人はACサイズなことと1P2P切り替え出来ることと小さいのがいいと言うのでその方向で設計します。

 

はい。

一応中身の補強用の垂木的なものも全部書いてあります。

頑丈に作ることで板の反響から来る騒音を軽減できます。(個人的見解)

 

天板と底板は9mm、側面の板は12mmで設計しました。

裏面は鬼目ナットを突っ込んでネジで固定して、メンテ用に取り外せるようにしました。

 

これで設計は終わりなのでホームセンターに行って板を買ってきます。

見た目と強度的にMDF板にしました。

ホームセンターだと板カットのサービスがあるのでとても便利です。

 

買ってきたので仮組みしてみます。

ホームセンターのお兄ちゃんが上手だったので精度はかなりいいです。

 

寸法の間違いが無いのでとりあえず、側面だけボンドで組み立てます。

ボンド塗っておもりで加圧して放置です。

 

次に皿を作ります。

皿は黒のABSの2mm板を使います。

学校の工房を借りて気合で丸く削りました。

CGじゃないです。

はざいやさんとかに頼むときっと楽です。

これと一緒に皿の下の土台になる木を削ります。

12mm板を2枚重ねて24mmにします。

多分これくらいでACとおんなじくらいの位置になります。

皿本体はこれでOKです。

 

次にボタンを取り付ける板を作ります。

友人仕様に1P2P切り替えの機能を要求されているので、本体とは分離した板にボタンを取り付けます。

筐体本体への取り付け穴は完全に対称にしてあるので180度ひっくり返して使えます。

下に4mmのMDF、上に2mmのアクリル板の2層構造です。

ついでに間に挟む紙も作ります。

こういう。

ダサいです。

 

次に皿の構造部分を作ります。

クラスメイトに3Dプリンタでフランジとエンコーダの歯を印刷してもらいました。

便利ですね。

結局このエンコーダの歯は使うことにはなりませんでしたが。

 

3Dプリンタがない場合はM8くらいのぼボルトを使うといいです。

皿に穴開けてナットで止めれば終わりです。

エンコーダの歯はレポート用紙の一番最後の厚紙とかそういう奴を切って使うといいです。

僕もそうしました。

 

これで大体部品揃ったので組み立てます。

ボタンはお金が無いのでお金が出来るまではとりあえず自分の専コンのボタンを付けておきます。

エンコーダはさっき言ったように紙です。

センサーは秋月で売ってる透過型のフォトインタラプタです。

基板は自作物です。

pic18f2550でMicrochipさんのサンプルプログラムを適当に改造して使ってます。

 

USB接続でPCからはゲームパッドとして認識されます。

このように。

Infinitasはやってないですがせっかくマイコン積んでいるのでInfinitas仕様の皿の挙動も実装しました。

動くかはわかりません。テスト出来ないので。

 

以上です。

友人君は今年大学受験なり就職なりする年なので今年度中は僕が遊んでいるつもりです。

 

今年中は僕が持っているので小山高専工陵祭のエレ研だかEE専門企画のところにおいておく予定です。

僕が遊んです。来てくみてださい。

 

 

テストプレイ動画あげました。

www.youtube.com

チュウニズムのエミュレータを作ってみる

どうも、センス無いです。

 

これまで、たまにTwitterに上げてたチュウニエミュの進捗ですが、ブログの方にまとめて行きたいと思います。(まとまってたほうが幸せになれる人多いと思った)

進捗があり次第、このページに追記していく感じでいこうと思います。

Tweet貼り付けてく感じでいいですよね 

あんまり更新頻度高くないと思います。

 

 

 

  • 譜面仕様を軽く説明
  • 4/8更新分進捗
  • TAPの追加
  • FLICKの追加
  • HOLDの追加
  • SLIDEの追加
  • AIRの追加
  • どうでもいい開発道中(日記含む)

譜面仕様を軽く説明

リズムの記述方法はBMS形式と同じです。

ヘッダ部も既存のBMS形式とほとんど同じです。

ただ、チャンネルと実データ部はチュウニズム用にだいぶ変えました。

チュウニズムは音再生は無いので…

詳しい仕様は要望があれば、早期に公開しますが、ソフトがリリース可能になったときと同時に公開するつもりでいます。

(一番早いのは本人に直接聞くこと)

 

 

4/8更新分進捗

アルストロメリアの紫譜面を借りて実際のゲームに近い形での描画・再生テストです。

 

 

TAPの追加

 

 

FLICKの追加

 

 

続きを読む

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

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

 

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

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

 

 

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

 

こんな感じに

 

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

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