flag)やってみた。ctfとは?初心者入門や勉強方法。flag)やってみた。ctfとは?初心者入門や勉強方法。flag)を勧めてくれたのでやってみた。ゲーム感覚でプログラミングやセキュリティを学ぶことが出来るので、継続して記事にまとめていきたい。CTFとは何か、そして入門サイトや勉強方法、一部の問題の解き方などをまとめる。flagと呼ばれるセキュリティコンテストの一つ。和訳すると、「旗を捕まえろ」で、その名前の通り、セキュリティの穴を見つけて旗=フラグを見つけることが目的になる。ジャンルは多岐にわたり、WebのいわゆるSQLインジェクション(入力フォームなどにSQL文を打ち込む)を使うことや、ある文章をあたえられて、そこから暗号文を解読するようなものまでより取り見取りである。上の文章だけだとよくわからないと思うので、暗号解読の例を出してみる。今回は「シーザー暗号」と呼ばれる、あのローマ帝国のユリウス・カエサルが使っていたとされる暗号を使う。その内容は至って単純で、「原文をアルファベットを〇文字ずらした文章を作る」というもの。zhrxz」という意味不明の文章になり、暗号化完了というわけである。元の文章を復元することが目標となる。入門サイト今回知り合いから紹介されたのは以下のサイト。CpawCTF競プロと似ているUIなので、すぐに登録してチャレンジできる。AtCorderなどと違うのは、毎週コンテストがある形ではなく、いつでも挑戦してレベルアップを目指せる点だろう。時間があるときなら何時でも出来るので、隙間時間に勉強できるのが良い。レベル1をやってみたので、試しに2問(というか1問)解説していく。最初に例に出したシーザー暗号。アルファベットをずらすだけで、文字数も指定されているので後はずらすコードを書くだけ。(頑張って手動で復元してもいいが・・・)今回はshell芸で解いてみた。答えの核心を書くのはNGなので、あくまで解説のみ。アルファベットをずらすコードはこうなる。a-za-z詳しく分解していく。zhrxz”この部分は、echoコマンドで暗号文を出力しているだけ。続いてやや複雑なこの部分。AをBに置き換えるということが出来るもの。a-za-zという区切りになるので、$()で囲まれた以下のprintf部分を解説していく。)\a-zまず、$()は、内側にあるコマンドを先に実行した結果を出力してコマンドラインに組み込むことが出来る。printfコマンドは、0埋めなど、文字のフォーマットを指定して、その通りに出力することが出来るコマンド。%Nsで、N埋めの空白で埋めた文字列を出力することが出来る。aとなり、空白が一個前についている。今回はずらす数の分だけ、暗号文の前に空白を入れている。空白を全てtrコマンドを使ってドットに置換する。先ほどのコマンドを読みやすくすると、以下のような状態になっている。a-za-zこちらを解説する前に以下のコマンドとその実行結果を見てもらいたい。bcdefgh#bcdbcdこのコマンドはどういうことかというと、trは複数文字のSETがある場合、同じ列数の場所にある単語へと置換されるということである。A-Zで小文字大文字置換が出来るのもそういう訳である。a-za-zとすることで、a-zの対応が一文字ずつずれることがわかる。要するに、こういう状態になる。abcdefg(省略)xyz※z後ろがa-zで二つになっているのは、最初に渡した文字をずらした際にzを超えた時のため。これで、N文字ずれたシーザー暗号を解読することができた。%NsのNをいじれば何文字でも対応できる(26文字を超えると追加のa-zが必要になるが)まとめというわけで、長々と解説したが以上のような方法で問題を解いて楽しむのがCTFである。勉強方法としては、暗号解読については暗号そのものがどういう仕組みなのかを勉強すること。その仕組みをどうすれば機械的に解読できるか考えることが必要となってくる。Webについては、いくつか代表的な攻撃があるので、それらを覚えておくのが良いだろう。上記のサイトを使って一問ずつ進めつつ、わからなくなったら適宜調べるというのがよさそうだ。いろんな人が参加してくれると嬉しい。valley(スタデューバレー)やってみた。某配送システム白猫プロジェクトのアイシャが大好きなエンジニアの卵。Java/Shell/C++/HTML/Sass/rustかgoやりたい。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。WordPress.。