ELIFE眞空 ぼちぼちいきます

日常自分が忘れてしまいそうなことをクリップしています。

SECCON Beginners CTF 2019 Write-Up

今年も「Beginners CTF 2019」に参加。

とは言え、最近全く何もしていなかったので、ぶっつく本番での参加となりました。

 

解けたのは、去年より少なく3問。

解けたというより、見ただけ。

去年より難しく感じたけど、ただ実力が足りないだけかもしれない。

 

Reversing [warmup] Seccompare

問題で渡されたファイルをIDAで開いただけ。

f:id:enjoylifevc:20190526162900p:plain

答え: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」を補完して終了。

containers

答え: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つありました。 バイナリエディタで開いてみました。

  1. Gur svefg cneg bs gur synt vf: pgs4o{a0zber
  2. Lzw kwugfv hsjl gx lzw xdsy ak: _uDskk!usd_u
  3. {ʎ ɥ 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の設定をしてるよりは…。と

急遽、WindowsWiresharkをインストールして、無事再生出来ました。

 

事前準備の大切さを知りました。

 

ただ、音声が早くて…。聞き取るのに数回掛かったのと、フォーマットが大文字だと気づかずに数回弾かれました。

 

答えは、

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)とは

  1. CDNから呼び込んだファイルが改ざんがされてないか、ブラウザ側で検証するためのセキュリティ機能のこと。
  2. そのCDNファイルのハッシュ値が一致するかを見てる。

※CDNとは、有名なのはGoogleさんが提供してるjQueryとかかな。

Google Hosted Libraries

 

実装方法

  1.   <script>,<link>要素のinitegrity属性値に指定する。
  2. ハッシュアルゴリズムは、(sha256,sha384,sha512)に対応。
  3. 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コマンドを使って作れるけど、

ハードルが高い人には、オンラインサービスもある。

SRI Hash Generator



ただ、Subresource Integrity(SRI)が実装されているブラウザは、2016/10/03現在では、FirefoxChromeOperaAndroid Browser52、Chrome for Android51となっており、EdgeやSafariでは使えない。 

subresource-integrity

WindowsでSassを使う

 

前回インストールして、放置していたモノがSSLの証明書期限切れでエラーが出て、アップデート出来なったので、入れなおすことにしました。

 

その際、すっかり忘れていて、色々調べるハメになったので、今回は書き留めておこうと思います。

 

1.とりあえずRubyインストール

Sassを使うには、Ruby環境が必要なので、何はともあれ、Rubyのインストール。

リンク:Downloads

 

2016年7月現在、以下のとおりなので、最新版2.3.0を選択してダウンロード。

f:id:enjoylifevc:20160704152350p:plain

 

では、インストールしていきます。

f:id:enjoylifevc:20160704152720p:plain

言語を「日本語」にして、「OK」をクリック。

 

f:id:enjoylifevc:20160704153029p:plain

「同意する(A)」のラジオボタンを選択し、「次へ(N)」

 

 

f:id:enjoylifevc:20160704153600p:plain

Rubyの実行ファイルへ環境変数PATHを設定する」

「.rbと.rbwファイルをRubyに関連づける」の2つにチェックを入れ、

「インストール(I)」

※「Rubyの実行ファイルへ環境変数PATHを設定する」にチェックし忘れると、手動でPATHを通さなければ、いけなくなりますので、ご注意を。

※.rbと.rbwファイルをRubyに関連づける」にチェックを忘れても対して問題はなさそうだけど、.rb(コンソールで動くRubyスクリプト)と.rbw(Winで動く、GUIRubyスクリプト)をRubyと関連付けてくれるので、ファイルをダブルクリックするだけで、Rubyスクリプトが実行できるようになり便利。

 

f:id:enjoylifevc:20160704154917p:plain

お疲れ様でした。

 

 

コマンドプロンプトで、確認してみましょう。

ショートカットキー:Win+「R」+「cmd」と入力し、「ENTER」クリック

 

まずは、Rubyのバージョンチェック。

 

ruby -v」と入力。

C:\Users\hogehoge\ruby -v

ruby 2.3.0p0 (2015-12-25 revision 53290) [x64-mingw32]

 と表示されれば、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属性を設定したら

  1. 正規URL(優先的URL)を検索エンジンに伝える
  2. その他のページを重複ページだと検索エンジンに伝える

優先的にするURLは被リンク数をみて決めた方がSEO的にいいかも。

 

3.記述法

<head>

<link rel="canonical" href="検索結果に優先的に表示させたいURL">

 </head>

4.設定しといた方がいい場合

  1. wwwの有無、index.htmlの有無、httpとhttpsでどの場合でも同じページが表示される(重複してる)場合。
    Googleは、それぞれを別のURLと見做すので、それぞれについてるリンクが拡散しちゃう。
  2. ユーザー セッションや検索の仕方で、同商品ページに複数の動的 URL が生成される場合
  3. ECサイトなどで、色違いやサイズ違いだけのページ。
    色やサイズが違うだけで、他の内容が同じ場合、重複コンテンツと見做される。どれか1つを優先し、その他を「canonical」で重複宣言させよう。
  4. バイルサイトが別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
  5. ABテストを行っている場合
    2つのほぼ重複したページになるので、どっちかにcanonical 指定
  6. 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. ページネーションの1ページ目をcanonicalのリンク先にする。(←そもそも2ページ目移行が重複ページじゃないから)
  2. 絶対アドレスのつもりで書いた相対アドレスの記述。
    link要素内では、どちらの書き方も使えるが「http://」や「https://」といったスキームなしに書かれた場合、相対アドレスと判断される。ドメインから指定するときは気を付けて。
  3. canonicalの意図しない指定
    テンプレートで作成した時、元々指定されていたcanonicalが設定される
  4. カテゴリページ、ランディングページで、特集記事へのcanonical
    カテゴリにcanonicalを設定するとカテゴリがインデックスされなくなる。
  5. body要素に記述
  6. canonicalは絶対ではない
    どう処理するかは、検索エンジン次第
  7. 違うドメインでも有効なのか
    →異なるドメインでも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

 

お疲れ様でした。