SECCON Beginners CTF 2019 Write-Up
今年も「Beginners CTF 2019」に参加。
とは言え、最近全く何もしていなかったので、ぶっつく本番での参加となりました。
解けたのは、去年より少なく3問。
解けたというより、見ただけ。
去年より難しく感じたけど、ただ実力が足りないだけかもしれない。
- Reversing [warmup] Seccompare
- Misc [warmup] Welcome
- Misc containers
- Misc Dump
- Crypto [warmup]So Tired
- Web [warmup] Ramen
- Web katsudon
Reversing [warmup] Seccompare
問題で渡されたファイルをIDAで開いただけ。
答え:ctf4b{5tr1ngs_not_eno0ugh}
Misc [warmup] Welcome
IRCにアクセスしただけ。
チャンネルに答えが出てる。
答え:ctf4b {welcome_to_seccon_beginners_ctf}
Misc containers
問題で渡されたファイルをStirlingで開けると
「IHDR」の文字あるので、pngファイルと断定。
バイナリ「89 50 4E 47」で始まる部分を順番にpngファイルとし保存。全部の画像を並べただけ。取りこぼしている「4」を補完して終了。
答え:ctf4b{e52df60c058746a66e4acaf34db6fc81}
Misc Dump
Wireshackにて、Pcapファイルだと解ったけど、どう展開したら良いのか解らなかった。
Crypto [warmup]So Tired
BASE64だとわかり、デコードしてみたけど、解読できなかった。
もう1つ何かしないといけないんだろうけど、解らなかった。
Web [warmup] Ramen
SQLインジェクションで、UNION SELECTを使って、テーブルの情報を引っ張り出すんだと思うんだけど、やり方が解らなかった。
Web katsudon
これもBASE64までは、解ったけど、時間切れ。
後は数個の問題を開いたけど、具体的に何をしたら良いのか。
全然、手も足も出ない状態だったけど、楽しかったので、
またチャンスがあればやってみようと思います。
SECCON Beginners CTF 2018に参加しました
やるやる詐欺で、全然勉強できないのですが、CTFに参加しました。 以前に一度参加したことがあるのですが、それより1つでも解ければ良いなぁと思い参加しました。
初心者向けということでしたが、手も足も出ない。
興味のあるところだけ、適当に勉強してる程度では、難しいです。 やはりちゃんと勉強してみたいものです。
以下が解くことができた問題です。
今度、参加するときのヒントにでもなれば良いと思います。
Crypto
1.[warmup]Veni,vidi,vici
ファイルが3つありました。 バイナリエディタで開いてみました。
- Gur svefg cneg bs gur synt vf: pgs4o{a0zber
- Lzw kwugfv hsjl gx lzw xdsy ak: _uDskk!usd_u
- {ʎ ɥ dɐ ɹ ɓ 0ʇ dʎ ᴚ :sı ɓ ɐ lɟ ǝ ɥ ʇ ɟ o ʇɹ ɐ d pɹ ı ɥ ʇ ǝ ɥ ⊥
1つ目の「Gur」に見覚えがあったので、「ROT13」ではないかと推測しました。 問題文に戻って、「Veni,vidi,vici」をググってみるとカエサルの文字が散見できたので、間違いないと踏み、「ROT13」で解読。
1つ目の解
The first part of the flag is: ctf4b{n0more
2つ目は1つ目の解をヒントに、恐らく「The Second part of」になるだろうと推測。同じようにシーザー暗号ならと仮定し、「Lzw」を「The」にすればいいんだから…。「ROT8」と判明。
2つ目の解
The second part of the flag is: _cLass!cal_c
3つ目はそのまま {ʎ ɥ dɐ ɹ ɓ 0ʇ dʎ ᴚ :sı ɓ ɐ lɟ ǝ ɥ ʇ ɟ o ʇɹ ɐ d pɹ ı ɥ ʇ ǝ ɥ ⊥ を 180度回転させればOK
the third part of the flag: Rypt0 graphy}
全部組み合わせて、答えは
ctf4b{n0more_cLass!cal_cRypt0 graphy}
2.RSA is Power
素因数分解すれば良いんだろうってことしか、わからんかった。 どうやってやるんやろ?
Misc
1.[warmup] plain mail
pcapファイルだったので、Wiresharkで開き、emlファイルで保存。zipファイルがあったので、 それを回答して出てきたテキストファイルを開く。パスワードを聞かれたので、メールファイル内にあったパスワード「_you_are_pro_」を入力。無事開いて、flagゲット。
ctf4b{email_with_encrypted_file}
2.[Warmup] Welcome
公式IRCチャンネルに行けば、ゲットできた。
ctf4b{welcome_to_seccon_beginners_ctf}
てけいさんえくすとりーむず
$ nc tekeisan-ekusutoriim.chall.beginners.seccon.jp 8690
とあったので、Linux上で、ncコマンドで接続。 計算問題を100問解けば、flagゲット。
ctf4b{ekusutori-mu>tekeisann>bigina-zu>2018}
まとめ
私が解けたのは、この4問だけでした。 途中、個人的なハプニングにあって、 大幅に中断しましたが、とても楽しかったです。前回より1問多く解けたのが、せめてもの救いかな。
SECCON2016 Writeup
初めてCTFに参加しました。
と言うのも、興味はあるもののどう勉強したら良いのか解らなかったので、先に競技を覗いてみようと思い参加しました。
初めてなので、勝手が解らず戸惑いました。
登録情報と手元の情報が一致せず、サイトに入れずアカウントを作り直したり…。
「コレは何を答えるの?」と思ったり…。
Vigenere Crypto 100
k: ???????????? p: SECCON{???????????????????????????????????} c: LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ k=key, p=plain, c=cipher, md5(p)=f528a6ab914c1ecf856a1d93103948fe |ABCDEFGHIJKLMNOPQRSTUVWXYZ{} -+---------------------------- A|ABCDEFGHIJKLMNOPQRSTUVWXYZ{} B|BCDEFGHIJKLMNOPQRSTUVWXYZ{}A C|CDEFGHIJKLMNOPQRSTUVWXYZ{}AB D|DEFGHIJKLMNOPQRSTUVWXYZ{}ABC E|EFGHIJKLMNOPQRSTUVWXYZ{}ABCD F|FGHIJKLMNOPQRSTUVWXYZ{}ABCDE G|GHIJKLMNOPQRSTUVWXYZ{}ABCDEF H|HIJKLMNOPQRSTUVWXYZ{}ABCDEFG I|IJKLMNOPQRSTUVWXYZ{}ABCDEFGH J|JKLMNOPQRSTUVWXYZ{}ABCDEFGHI K|KLMNOPQRSTUVWXYZ{}ABCDEFGHIJ L|LMNOPQRSTUVWXYZ{}ABCDEFGHIJK M|MNOPQRSTUVWXYZ{}ABCDEFGHIJKL N|NOPQRSTUVWXYZ{}ABCDEFGHIJKLM O|OPQRSTUVWXYZ{}ABCDEFGHIJKLMN P|PQRSTUVWXYZ{}ABCDEFGHIJKLMNO Q|QRSTUVWXYZ{}ABCDEFGHIJKLMNOP R|RSTUVWXYZ{}ABCDEFGHIJKLMNOPQ S|STUVWXYZ{}ABCDEFGHIJKLMNOPQR T|TUVWXYZ{}ABCDEFGHIJKLMNOPQRS U|UVWXYZ{}ABCDEFGHIJKLMNOPQRST V|VWXYZ{}ABCDEFGHIJKLMNOPQRSTU W|WXYZ{}ABCDEFGHIJKLMNOPQRSTUV X|XYZ{}ABCDEFGHIJKLMNOPQRSTUVW Y|YZ{}ABCDEFGHIJKLMNOPQRSTUVWX Z|Z{}ABCDEFGHIJKLMNOPQRSTUVWXY {|{}ABCDEFGHIJKLMNOPQRSTUVWXYZ }|}ABCDEFGHIJKLMNOPQRSTUVWXYZ{
Vigenere cipher
https://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher
問題をクリックすると上記が表示されるだけだったので、一瞬「で?」と思いました。
「md5(p)=f528a6ab914c1ecf856a1d93103948fe」とあります。
平文の部分がmd5でエンコードされているので、コレをデコードしました。
デコードはWEBサイトでしました。
デコードした答えから、キーを読み解き、
キーが「VIGENERECODE」だと判明。
見直し検証し、デコードした答えをキーでエンコードすると
ちゃんと暗号文になりました。
答え方が解らず、判明したキーの「VIGENERECODE」を入力するも弾かれ
サイトを見るとSECCON{…}で答えてねと書いてあったので、
SECCON{VIGENERECODE}と入力し、弾かれ…。
暫く途方に暮れた後…。
もしかして、デコードで判明した平文を答えれば良いのか?
SECCON{…}ってなってるし…。
と入力。
正解。
やっと一問回答できた!
のは、デコードしてから十数時間後でした。
答えは、
SECCON{ABABABCDEDEFGHIJJKLMNOPQRSTTUVWXYYZ}
basiq Web 100
basiq What is admin's password?☺ http://basiq.pwn.seccon.jp
すっごい時間かけたけど、BASIC認証をどうしたら良いのか分からなかった。
VoIP Forensics 100
VoIP Extract a voice. The flag format is SECCON{[A-Z0-9]}. voip.pcap
これは、pcapファイルなので、Wiresharkに放り込めば良いんだ。
と、USB起動のKali Linuxでは、サウンドドライバーが上手く動いて無い様で…。
音声ファイルを見つけることができたのに、むなしく無音で素通り…。
ごちゃごちゃLinuxの設定をしてるよりは…。と
急遽、WindowsにWiresharkをインストールして、無事再生出来ました。
事前準備の大切さを知りました。
ただ、音声が早くて…。聞き取るのに数回掛かったのと、フォーマットが大文字だと気づかずに数回弾かれました。
答えは、
SECCON{9001IVR}
Anti-Debugging Binary 100
Anti-Debugging Reverse it. bin may some AV will alert,but no problem.
binファイルだから、バイナリーだと思って、「Stirling」で開いてみたんだけど…。
違うみたい…。
答えを見つけられなかった。
その他、"Memory Analysis Forensics 100" や "biscuiti Web, Crypto 300"に挑戦したけど、答えを導き出せなかった。
初めてで、右往左往しながら、ソフトの使い方すらままならない状態での参戦でしたが、非常に楽しかったです。
Exploitについては、開く事すら至りませんでしたが、大体の感じは分かったので、コレを機に勉強していきたいと思います。
ファイルの改ざんチェック Subresource Integrity
Subresource Integrity(SRI)とは
- CDNから呼び込んだファイルが改ざんがされてないか、ブラウザ側で検証するためのセキュリティ機能のこと。
- そのCDNファイルのハッシュ値が一致するかを見てる。
※CDNとは、有名なのはGoogleさんが提供してるjQueryとかかな。
実装方法
- <script>,<link>要素のinitegrity属性値に指定する。
- ハッシュアルゴリズムは、(sha256,sha384,sha512)に対応。
- base64でエンコードされたモノを上記のどれかでハッシュ化。
base64でエンコードされた文字列をsha512でハッシュ化してみた
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" integrity="sha512-U6K1YLIFUWcvuw5ucmMtT9HH4t0uz3M366qrF5y4vnyH6dgDzndlcGvH/Lz5k8NFh80SN95aJ5rqGZEdaQZ7ZQ==" crossorigin="anonymous"></script>
<crossorigin=”anonymous”って属性がセットされてる。
この設定があると、cookie,クライアントサイドのSSL証明書、HTTP認証などのユーザー認証情報が、使えない。
因みに、crossorigin="use-credentials"と指定すると、認証情報が使える。
ハッシュ値の生成は、Opensslコマンドを使って作れるけど、
ハードルが高い人には、オンラインサービスもある。
ただ、Subresource Integrity(SRI)が実装されているブラウザは、2016/10/03現在では、Firefox、Chrome、Opera、Android Browser52、Chrome for Android51となっており、EdgeやSafariでは使えない。
WindowsでSassを使う
前回インストールして、放置していたモノがSSLの証明書期限切れでエラーが出て、アップデート出来なったので、入れなおすことにしました。
その際、すっかり忘れていて、色々調べるハメになったので、今回は書き留めておこうと思います。
1.とりあえずRubyインストール
Sassを使うには、Ruby環境が必要なので、何はともあれ、Rubyのインストール。
リンク:Downloads
2016年7月現在、以下のとおりなので、最新版2.3.0を選択してダウンロード。
では、インストールしていきます。
言語を「日本語」にして、「OK」をクリック。
「同意する(A)」のラジオボタンを選択し、「次へ(N)」
「.rbと.rbwファイルをRubyに関連づける」の2つにチェックを入れ、
「インストール(I)」
※「Rubyの実行ファイルへ環境変数PATHを設定する」にチェックし忘れると、手動でPATHを通さなければ、いけなくなりますので、ご注意を。
※.rbと.rbwファイルをRubyに関連づける」にチェックを忘れても対して問題はなさそうだけど、.rb(コンソールで動くRubyスクリプト)と.rbw(Winで動く、GUI、Rubyスクリプト)をRubyと関連付けてくれるので、ファイルをダブルクリックするだけで、Rubyスクリプトが実行できるようになり便利。
お疲れ様でした。
コマンドプロンプトで、確認してみましょう。
ショートカットキー:Win+「R」+「cmd」と入力し、「ENTER」クリック
まずは、Rubyのバージョンチェック。
「 ruby -v」と入力。
と表示されれば、OKです。
2.Sassをやっとインストール
Rubyをインストールしたので、gemが使えるようになりました。
ここからの作業は、コマンドプロンプトでgemコマンドを使って行ないます。
ちゃんとgemが動くか確認するために、バージョン確認をしておきます。
「gem -v」と入力
C:\Users\hogehoge\gem -v
2.5.1
と表示されれば、OKです。
ちなみにバージョンが古い場合は、
「gem update --system」でアップデートできます。
次に、文字化けを防ぐために、文字コードの設定をします。
「set LANG=ja_JP.UTF-8」と入力。
特に何にも起こらないです。
それでは、Sassをインストールしましょう。
「gem install sass」と入力
Fetching:Sass-3.4.22.gem(100%)
Successfully insatalled sass-3.4.22
.........
1 gem installed
と表示されれば、OKです。
バージョンの確認をします。
「sass -v」と入力
Sass 3.4.22 (Selective Steve)
と表示されれば、OKです。
こちらも因みに、バージョンが古い場合は
「gem update sass」でアップデートできます。
コレで、やっとSassを使える環境が整いました。
それでは、sassコマンドを使って、cssファイルのコンパイルに挑戦してみてください。
それについては、また次回に書くとします。
canonical属性タグ
たまたま見つけたタグが知らないものだったので、調べてみました。
1.canonical属性タグとは
link要素の属性の一つ。
- URLの正規化に関係するもの
- URLの正規化をしてないとSEO的に不利
- 設定を間違えると検索結果から削除されるので要注意
- リンクの評価に関係するもの
そもそも重複するものがないなら、設定する必要はない。
2.canonical属性を設定したら
優先的にするURLは被リンク数をみて決めた方がSEO的にいいかも。
3.記述法
<head>
<link rel="canonical" href="検索結果に優先的に表示させたいURL">
</head>
4.設定しといた方がいい場合
- wwwの有無、index.htmlの有無、httpとhttpsでどの場合でも同じページが表示される(重複してる)場合。
Googleは、それぞれを別のURLと見做すので、それぞれについてるリンクが拡散しちゃう。 -
ユーザー セッションや検索の仕方で、同商品ページに複数の動的 URL が生成される場合
- ECサイトなどで、色違いやサイズ違いだけのページ。
色やサイズが違うだけで、他の内容が同じ場合、重複コンテンツと見做される。どれか1つを優先し、その他を「canonical」で重複宣言させよう。 - モバイルサイトが別URLの場合。
PCサイト:www.hogehoge.com
モバイルサイト:m.hogehoge.com
pcサイトに
<link rel="alternate" media="only screen and (max-width: 640px)" href="http://www.hogehoge.com">
モバイルサイトに
<link rel="canonical" href="http://hogehoge.com">
参照:別々の URL - ABテストを行っている場合
2つのほぼ重複したページになるので、どっちかにcanonical 指定 - AMP実装
AMP実装するとAMP用のHTMLが必要になる。AMPページと非AMPページの内容が重複するので、どっちかにcanonical 指定
非AMP
<link rel="amphtml" href="https://hogehoge/url/to/amp-version.html">
AMP
<link rel="canonical" href="https://hogehoge/url/to/regular-html-version.html">
参照:AMP ページの Google 検索ガイドライン
5.推奨事項
Googleの見解
- 重複ページの本文がcanonicalページにもある。
- canonicalのリンク先が確かに存在すること(404等でないこと)
- canonicalのリンク先「noindex」のメタタグが付いてないこと
- canonical指定はhead要素の中で。
- canonical指定は1ページ1つだけ。
6.canonical設定の間違い
- ページネーションの1ページ目をcanonicalのリンク先にする。(←そもそも2ページ目移行が重複ページじゃないから)
- 絶対アドレスのつもりで書いた相対アドレスの記述。
link要素内では、どちらの書き方も使えるが「http://」や「https://」といったスキームなしに書かれた場合、相対アドレスと判断される。ドメインから指定するときは気を付けて。 - canonicalの意図しない指定
テンプレートで作成した時、元々指定されていたcanonicalが設定される - カテゴリページ、ランディングページで、特集記事へのcanonical
カテゴリにcanonicalを設定するとカテゴリがインデックスされなくなる。 - body要素に記述
- canonicalは絶対ではない
どう処理するかは、検索エンジン次第 - 違うドメインでも有効なのか
→異なるドメインでもcanonicalは有効
OpenSSLのアップデート
どこかにメモしたつもりだったのに、見当たらないので…。
yumで一括に入れてるopenssl関係をアップデートします。
1.現状確認
yum info openssl
「Installed Packages」下に書かれてるモノが、現在インストールされてるもの。
新しいパッケージがあれば、「Updates Packages」が表示される。
インストール済みパッケージの「Release」より数字が上であることを確認して、「Arch」が一緒のものがあれば、アップデート。
2.アップデート
yum update openssl
途中で「yes / no」に応えるのが面倒な人は、予め引数をつけて
yum -y update openssl
無事「Complete!」が表示されたら、確認へ。
3.バージョンの確認
rpm -qa | grep openssl
openssl-更新したバージョン openssl-devel-更新したバージョン
が表示されればOK
4.再起動が必要なプロセスを見つける。
本当は、「reboot」するのが、一番良いと思う。
でも、出来ない時は最低限の関連サービスを再起動する。
lsof | grep DEL | grep -e crypto -e libssl
つらつらと、プロセス名が出るので、それらをメモっておいて、1つずつ再起動。
service httpd restart service vsftpd restart service mysqld restart service postfix restart service sendmail restart service sshd restart
などなど、こんなもんかな?
その後、再び
lsof | grep DEL | grep -e crypto -e libssl
何も表示されなければOK
お疲れ様でした。