CTFやってみた

今日,このようなイベントがありました.

atnd.org

ここで,CTFをしてきました.

OverTheWire: Bandit

このCTFは初歩だということで,CTF初心者の僕にちょうど良いです.

前提

今回のCTFでは,UNIXコマンドを使います. なので,Linuxを使えるようにしましょう.

CTFではおなじみの,Kali Linuxというものをインストールします.

https://www.kali.org/

インストール方法は検索すれば簡単に見つかるので,省略.

https://qiita.com/mah-nyan/items/754206330c0d43c71935

実際に解く

Kali Linuxを使って OverTheWire: Bandit を解いていきます.

Level 0 → Level 1

この問題は,sshするという問題です.普通に,ポートを指定してsshします. Kali で端末を開いて,

ssh bandit0@bandit.labs.overthewire.org -p 2220

すると,readmeというファイルがあるので,

cat readme

これが次のパスワードです.

Level 1 → Level 2

新しく端末を開く,もしくは exit して bandit1 でログインします.パスワードは,マウスでコピペすると簡単に入力ができます.

ログイン後,lsをすると - という名前のファイルがあります. cat - としても見ることができないので,

cat ./-

これで表示されます.

Level 2 → Level 3

lsをすると, spaces in this filename というファイルが出てきます. このファイルをcat すれば良さそうですが,普通に入力するとダメなので,スペースをエスケープしてあげる必要があります. なので,

cat spaces\ in\ this\ filename

Level 3 → Level 4

lsをすると,inhereというフォルダがあるので,中に入ります.

cd inhere

再びlsをしてみますが,中に何もありません. もしかしたら,隠しファイルがあるかもしれないので,

ls -a

.hiddenというファイルがあるとわかります. なので,

cat .hidden

Level 4 → Level 5

先程同様 inhereに入って,lsをします. -file00 ~ -file09 というものがあります.

とりあえず,cat で -file00 を見てみると,

cat ./-file00

文字化けしたようなものが出てきます. 人間が読めるものが出てくるものがあるはずなので,確認します.

file ./*

すると,-file07だけ ASCII text と出てきます.なので,

cat ./-file07

Level 5 → Level 6

inhereに入ると,大量のディレクトリが出てきます. この中から,1033 bytes のものを探します.

find -size 1033c

すると, ./maybehere07/.file2 と出て来るので,

cat ./maybehere07/.file2

Level 6 → Level 7

somewhere on the server と書かれているので,全体から探します. 検索するものは,user が bandit7,group が bandit6,size が 33 bytes なので,

find / -user bandit7 -group bandit6 -size 33c 

Permission denied のファイルも出てきているので,

find / -user bandit7 -group bandit6 -size 33c 2>/dev/null

出てきたものをcat すればOK

cat /var/lib/dpkg/info/bandit7.password

Level 7 → Level 8

lsをすると,data.txtというものがあり,この中から "millionth"が入った単語を探します.

grep millionth data.txt

すると 一つだけ表示されるので,これが bandit8のパスワードです.

Level 8 → Level 9

一回だけ出てきているものを探します.なので sortした後,uniqなものを表示します.

sort data.txt | uniq -u

Level 9 → Level 10

file data.txt

をすると,形式がdataとなっています. そのため,stringsコマンドで文字にします. また,連続する=が含まれているということなので,

strings data.txt | grep ==

Level 10 → Level 11

data.txtはbase64エンコードされているらしいので,デコードします.

base64 -d data.txt

Level 11 → Level 12

問題文に13文字ぶんずらしていると書かれています. ということは,aがn, zがmなので,

cat data.txt | tr ‘[a-zA-Z]’ ‘[n-za-mN-ZA-M]’

この問題,メンバーはpythonで解いていたみたい.

ここで,時間が終わってしまいました.

感想

問題が解けたときの快感が凄まじいです.

次 何をすれば雰囲気が分かるので,man でどのようなオプションがあるのか見ると,大体理解できます.(それでも分からなければGoogle先生に)

あと今回,グループでこのCTFをしていたので,わからないことを気軽に聞けた点がとても良かったです.

CTF少し勉強してみようかな...

ではでは👋


[追記]

しゃしん氏が,level 20までの解き方を載せてくれています.

kutsurogenai.net

プロ生ちゃん回してみた.

この記事は,プロ生ちゃん Advent Calendar 2017 7日目の記事です.


2017年もあとすこしとなってきました.

今年を振り返るといろいろなことがありました.

「5000兆円欲しい」や「けものフレンズ」,「ハンドスピナー」が話題になりました.

ハンドスピナー...!?

ということで,プロ生ちゃんをハンドスピナーの如く回転させました!!!
 (;´Д`) < 強引すぎる 

→ https://ipolyomino.github.io/pronama_spinner/

webでできるハンドスピナーは,うおた氏が作成されていました.

hand spinner

そこで,どんな方法で回転させているのか気になってソースを確認してみると,JQueryRotateというものが使われていました.

jqueryrotate.com

JQueryRotateは,かなりシンプルに書くことができるようです. 例えば,50msごとに3度回転だと,

var angle = 0;
  setInterval(function(){
    angle+=3;
  $("#img").rotate(angle);
  },50);

とてもシンプルで良いですね.

同じ方法でプロ生ちゃんを回転させても良いのですが,面白くないので別の方法を探します.

生のJavaScriptで書いてみた.

html5からcanvas 要素というものが追加されています.

developer.mozilla.org

HTMLの canvas 要素 と Canvas スクリプティング API を使用して、グラフィックスやアニメーションを描画することができます。

要するに JavaScriptを用いて,canvas内の様子を設定することができるというものですね.

今回のように,回転させたりするときに用いると便利なタグです.

コード
const canvas = document.getElementById('normal_canvas');
canvas.height = 300;
canvas.width = 300;

const context = canvas.getContext('2d');

const image = new Image();
image.src = 'image/money.png';
image.onload = () => { 
    rotate();
}

let theta = 0;

function rotate() {
    context.clearRect(0, 0, canvas.width, canvas.height);
    
    context.save();
    
    context.translate(canvas.width / 2, canvas.height / 2);
    context.rotate(++theta * Math.PI / 180);
    context.translate(-canvas.width / 2, -canvas.height / 2);
    
    context.drawImage(image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height);
    
    context.restore();

    setTimeout(rotate, 15);
}

...(´・ω・`)

imageが読み込まれたイベントを取得して,画像を表示.
画像を表示するときには,widthとheightを取得してcanvasの大きさに合わせる.
回転の中心をcanvasの中心にして,再描画. この回転させる関数を定期的に呼び出して...

辛すぎワロタ

JQueryRotateなら数行で書けたものを,生のJavaScriptだと,数倍書かないといけないです.

もっと,うまいことcanvasに再描画して欲しいです.

Grimoire.js で書いてみた.

Grimoire(グリモア).jsとは,Web開発のためのWebGLフレームワークのことです.

もう少し詳しく書きます. まずWebGLについて,

WebGLとは,Web Graphics Libraryのことで,Web上でインタラクティブな2D/3Dグラフィックスをレンダリングするための JavaScript API です.

極端に言えば,Web上で綺麗な2D/3Dを出す技術の一つです.

WebGLの例は,http://webglsamples.org/ を見るとたくさんあります.

このWebGLは見ていて綺麗ですが,かなりいろいろ考えて作る必要があるので大変です.( threejs でググってみると面白いかも)

そこで,Grimoire.js です.

Web開発の中にWebGLを簡単に取り入れることができます.

[参考]

ということで,Grimoire.js でプロ生ちゃんを回してみます.

コード
gr.registerComponent('Rotate2d', {
    attributes: {
        speed: {
            default: 1,
            converter: 'Number'
        }
    },
    $mount: function () {
        this.theta = 0;
    },
    $update: function () {
        this.theta += this.getAttribute('speed');
        this.node.setAttribute('rotation', 0 + ',' + 0 + ',' + -this.theta);
    }
});

少しJavaScript を触ったことがある人なら,大体何をしているのかすぐに分かると思います.

Grimoire.jsは,WebGLフレームワークです.2Dの回転ではなく,3Dの回転も簡単できます!

gr.registerComponent('Rotate3d', {
    attributes: {
        speed: {
            default: 1,
            converter: 'Number'
        }
    },
    $mount: function () {
        this.theta = 0;
    },
    $update: function () {
        this.theta += this.getAttribute('speed');
        this.node.setAttribute('rotation', 25 + ',' + -this.theta + ',' + 0);
    }
});

canvas内の状態は,.goml というファイルで管理しているので,context.drawImage などはする必要ありません.

興味があれば,ソースコードを公開しているのでぜひこちらから試してみてください.

github.com

実際に動くもの

https://ipolyomino.github.io/pronama_spinner/

ではでは👋

ウェブサイト作ったときのメモ

サーバー関係で調べたことメモ.

主にセキュリティのことについて.

www.websec-room.com tylermade.net

sshチェックするやつ

sshcheck.com

SSL証明書の発行

httpsを使おう qiita.com

ログを確認するために少し変更

デフォルトでログに残る情報が少ないので. qiita.com

サイト管理系で調べたこと

Search Consoleへの登録

クロールの状態とか確認できる.
www.google.com

モバイルフレンドリーテスト

モバイルで見るとどうか分かる

https://search.google.com/test/mobile-friendly?hl=ja

Googleアナリティクス

サイトのアクセス数とか簡単にわかる
https://analytics.google.com/

PageSpeed Insights

表示速度,改善すべき場所を確認できる.
PageSpeed Insights

HTML5 Security Cheatsheet

セキュリティ
https://html5sec.org/

Webサイトをセキュアにするための7つ道具

Webサイトをセキュアにするための7つ道具 / 7 tools for Web Applications security // Speaker Deck

上記スライドのリンク

心地よい大学生活を送るために

心地よい大学生活を送るためには,「継続」と「+α」が必要だと思います.

僕は大学に入るときに,「情報科学についての知識を深めて,面白いものを作るぞ!」という決意をしました.

以前にも書きましたが,その熱意が強すぎて思わぬ方向を向いてしまい,大学に入ると空回りしてしまいました.

polyomino.hatenablog.jp

心地よい大学生活を送るためには,程よい熱意を常に持ち続けることが重要だと思います. 強すぎる熱意は自分が疲れていずれ倒れてしまいます.

では,程よい熱意を持ち続けるためにはどうすればいいかというと,「継続」と「+α」です.

まず,何か大きな目標を立てます.例えば,「セキュリティのプロになる」「アプリ開発をして儲ける」 といった具合です.

次に,その目標に向けてまず自分は何ができるのかを考えます.先程の大きな目標を分割するイメージです. 可能な限り小さくしてください.先程の例ですと,「『~~~』という本を読む」や「開発環境を整える」といった具合です.

課題を小さくすることによっておのずと何をすれば良いのかが見えてくるはずです. そして,その小さな課題を「継続」して解決していくことで自分のスキルを向上させることができます.

「継続」をしていると,それが退屈に感じることがあるでしょう.

ここで「+α」が役立ちます.

僕の場合,この「+α」を「勉強会に参加する」としています. https://connpass.com/ などを探してみるといろいろな勉強会などが開催されています.

勉強会には様々な人が来ていていろいろな人から話を聞くことができます.

この話の中に,「自分が知らなかったけど面白そう」と思うものがあるかもしれません.

実際,僕は勉強会で「スクレイピング」という技術を知り,最近楽しんで勉強しています.

勉強会に参加せずとも,「+α」として,「普段あまり話さない先輩に質問する」や「一緒に開発しないかと誘う」などでも問題ありません. 普段と違うことをすると良いです.

退屈な日常に少し変化をもたらしてくれるのが「+α」です.

もし皆さんが大学生活に不安や退屈さを感じているのであれば,「継続」と「+α」をキーワードとして覚えて頂き何かを始めて欲しいです.

それでは,心地よい大学生活を.

iPhoneアプリを自分のアカウントへ引き継いだお話

概要

以前親のアカウントで出していたiPhoneアプリを自分のアカウントへ引き継いだお話を書きます.

経緯

iPhone アプリを高校生のときに作成しました.そのアプリをApp Storeに公開するためには,Apple Developer Program に登録する必要があります.
このDeveloper Programは,成人した人でないと登録することができません.*1
未成年がiPhoneアプリを提出することはできないため,親のアカウントから提出する方法があります.*2

2年前の私は,親のアカウントからアプリを提出することを選びました.

2年を経て現在,私は20歳になったので自分のアカウントを Developer Program に登録しました.
そこで,「どうやって引き継ぐん?」と思い試行錯誤しました.

自分のアカウントで出す.

同じ Xcode Project を自分のアカウントから提出する(失敗)

新しいアプリを提出するのと同じ要領で,iTunes Store へ申請します.

すると,お叱りの文が帰ってきます.

We noticed that your app provides the same feature set as other apps submitted to the App Store; it simply varies in content or language, which is considered a form of spam.

The next submission of this app may require a longer review time.

似てるアプリが出てるってそれワシのアプリや... (´・ω・`)

とまぁ,自分が作ったアプリでも違うアカウントから提出することはNGみたいです.

アプリの譲渡を利用する(成功)

レビュアーさんに「これ僕が2年前作ったアプリでオカンのアカウントから出してるねん(英語)」と送ると,「ここレビューの場所やからサポートに連絡して(英語)」と返ってきました.

僕は翌日,iTunes Connect Support へ連絡をしました.

iTunes Connect Supportさんへ
僕の作ったアプリをオカンのアカウントから自分のアカウントへ移行したいねんけどどうしたらいい? アプリの譲渡もできないんやけど... ちなみに僕のアカウントは ***@***.*** やで (英語)

すると,3日後(土日を挟んだ)Appleのサポートから日本語で返信が返ってきました.

AAA様

この度は App Store Developer Support へお問い合わせいただき、誠にありがとうございます。

AAA様が成人されたのでアカウントの名前をご自身の名前に変更したいとのご要望ですが、一度作成されたアカウント名を別人に変更する事は出来ません。しかし、AAA様の Apple ID: ***@***.*** を確認したところ、すでにAAA様のお名前のアカウントが存在しております。

もし Apple ID: ----@---.--- のアカウントにて公開しているアプリケーションを Apple ID: ***@***.*** のアカウントへ移行されたい場合は、下記のガイドに沿ってアプリケーションの譲渡を行ってください。条件を満たしている場合は譲渡が可能でございます。

https://help.apple.com/itunes-connect/developer/?lang=ja#/deved688524f

また、Apple ID: ----@---.--- のアカウントの有効期限が切れていたため、アプリケーションの譲渡を可能にするため特別に本日より一週間アカウントを有効にさせていただきました。この一週間以内にアプリケーションの譲渡を行っていただけますよう、お願い致します。

ご不明な点、質問等ございましたらお気軽にお問い合わせください。

サンキュー Apple

"特別" にアプリの譲渡を認めてもらえたけど,本来は親のアカウントが有効な期間に自分への譲渡を行わないといけないのかもしれない.

アカウントが有効であれば,譲渡が可能みたい.

もし,親のアカウントで出そうかなと考えている人がいれば気をつけて.
(あまりいないと思うけど)

*1:2017年10月16日現在,日本の場合20歳

*2:これは2年前にAppleのサポートから電話で教えて貰った情報だから変わっているかも

日本科学未来館へ行ってきたよ

ということで,日本科学未来館へ行ってきました!

行く前のイメージとしては”デカい地球のディスプレイがあるとこ”ぐらいで,事前調査無しで行ってきました.

いざ行ってみると,なかなか考えさせられる展示の多い博物館でした.

この科学館には,小さな子供が体験できるような仕掛けが多く施されています.そのため,子供向けの施設と思われるかもしれません. しかし,決してそのようなことはなく大学生の僕が行っても楽しい施設でした.

なので少し僕の気になった展示を紹介します.

技術革新の原動力

私達が普段何気なく利用している製品には,多くの科学技術が利用されていて,その科学技術を作り出した人が必ずどこかにいる. そのような人になるためにはどうすれば良いのかという展示でした.

技術革新の手法

  • むすびつける
  • くみあわせる
  • ひらめく
  • みならう
  • きりかえる

という手法によって日々多くの技術が生み出されています.

ポスト・イット® のが開発された話 や 生体模倣技術 についての解説がありました. 技術革新と聞いて多くの人がはじめにイメージする 「ひらめく」 以外にも技術革新には種類があるということを再認識させられました.

「生命らしさ」を求めて

有名な石黒先生が監修されたアンドロイドが展示されていました. f:id:Polyomino:20170827231509j:plain:h300

見た目が人間にとても似ているけど,どこか少し違和感を感じる.この違和感がなくなれば,このロボットと人間の違いはなんだろう. 考えて行動するかどうかなのか?人工知能を組み合わせればどうなの?

と,改めて自分とは何か, 人間とは何かを考えさせられました. 僕の結論として,この曖昧な境界線を受け入れることによってこの問題は解決するのかなという結論に至りました.

こちら、国際宇宙ステーション(ISS)

単純に宇宙が好きっていうだけです. f:id:Polyomino:20170827234647j:plain 「きぼう」の中をがどうなっているのか見学できます!宇宙食や実験装置(のレプリカ)などが展示されていました.やはり,地上とは環境が大きく違うため,専用のものを開発する必要があるのだなと思いました.この宇宙食一つ,実験装置一つとっても多くの人が考えて作り出したものなので,細かな配慮が至るところにされていました.また,この展示のまわりには宇宙飛行士のサインがたくさん書かれていてとても感慨深いです.ここ以外にも,スロープの途中に宇宙飛行士の顔写真とサインがありました.

f:id:Polyomino:20170827234220j:plain:w300
油井さんのサインもありました!

とまぁ,見学を通していろいろ考えさせられました. ぜひ,一度訪れてみてください.

今日はこのへんで, 明日からまたインターン頑張ります.

インターン開始前日

いよいよ明日からインターンがはじまります.

まだ,口止め書類 誓約書をまだ記入していないのでここに自由に書けるので少し書きますね.

今日は明日へ備えて移動の日でした.

私のインターン先は東京都にあります. そのため,私のような都外に住んでいる人は今日ホテル入りしました.

事前にslackが作られていてお互いの連絡ができる状態であったので,連絡を取り合い晩御飯を一緒に食べました.

今回のインターン先は,得意分野が別々の人を集めているのかと思うほど別々でした.

とはいっても私を含めて3人しか知らないのでなんとも言えないですけど….

では,明日からインターン頑張ってきます.