はじめに
先日、WEST-SEC#7 CTFを通じてセキュリティの基礎知識、技術、対策、設定を「楽しく」学ぶに参加してきました。
「参加後にSNSで感想を発信してくれる人枠」として参加したので、今回記事にしてみました。
ただし、運営側からCTF問題の答えの掲載はご遠慮願います
と指示があったので答えまでは記載してません。
練習問題
TXTレコード
Q)west-sec.techのTXTレコードを見よ。
hint)
TXTレコードという単語から名前解決をするのだろうと予測。
早速、nslookup
コマンドで試してみた。
$ nslookup west-sec.tech
Server: 192.168.10.1
Address: 192.168.10.1#53
Non-authoritative answer:
*** Can't find west-sec.tech: No answer
あれ、うまくいかない。
今度はオプションをつけてみる
$ nslookup -type=txt west-sec.tech
main parsing west-sec.tech
addlookup()
make_empty_lookup()
...(略)
Non-authoritative answer:
printsection()
west-sec.tech text = "What is the color of 100-1?"
...(略)
txtレコードにコメント(なぞなぞ?)を発見。
これを解くと、flagをゲット。
Where
Q)写真の場所は?
hint)
OSINT問題でした。有名な神社っぽいけど似てる神社が他にもあるかも、、
暗号
公開鍵暗号
Q)
1111111を素因数分解し、小さい方の値と、この仕組みを使った暗号方式を続けて答えよ。
たとえば、値が 12 で暗号方式が AES であれば、 12AES がFLAG
hint)
以下のサイトを使った。
映画「サマーウォーズ」の主人公はたしか素因数分解の仕組みを使った暗号
を一瞬で解いてた気がする
OSコマンドインジェクション
PHPの関数
Q)
この問題は、脆弱性Webサーバにログインした後、「メールアドレスの変更」画面からメールアドレスを変更する処理に関する問題である。
添付にあるソースファイルを見よ。
hint)
添付されたchange_mail_confirm.php
を確認。
<?php ... ?>
で囲まれた箇所を注意深く見る。
(メールアドレスを変更する処理が記載されてそうなキーワードはsendmail
とかnew_mail
とかかなぁ。。。)
コマンド実行
Q)
この脆弱性Webサーバのユーザアカウントの中で、naで始まるユーザ名を答えよ。
※実際にメール変更をしたり、攻撃を利用して不正行為をしないこと。不適切な行為を見つけた場合、即座に退出いただきます。
hint)
診断対象へアクセスする。(サイトのログイン画面?)
まずは、正常系を確かめたかったので、新規登録からユーザを新規登録する。
登録するデータは適当でも問題なさそう。
新規登録が終わったら、現在の情報画面へ遷移する。(所謂、マイページ画面)
追記以下の画面ではユーザ:b a
としてログインしてます。
この問題はOSコマンドi脆弱性を利用するので、画面内でこの脆弱性がありそうな箇所を探す。
そういえば、別の問題(PHPの関数
)で「メール変更」の箇所にOSi脆弱性の可能性があることが分かった。
そこから、/etc/passwd
ファイルを見れるか確認。(答えの箇所は隠してます。)
ちなみに、、、ほかにも脆弱性がてんこ盛りでした。。
【ディレクトリトラバーサル】
怪しい写真アップロード機能の画面を発見。
アップロードした写真を表示してくれる機能もある。
ここにディレクトリトラバーサル脆弱性があるんじゃないかと疑ってみる。
ディレクトリトラバーサル脆弱性を利用して/etc/passwd
ファイルを確認。(答えの箇所は隠してます。)
この方法でもflagをゲットできた。
【XSS】
【SQLi】
ユーザ情報を見る画面にSQLi脆弱性を発見。
自分の情報はURLの?id=250
で確認できる。
URL:http://(省略)/user_information.php?id=250
idの入力値を?id=250' OR 'a'='a
に改変してみると、DBに登録されているユーザ情報を確認することができた。
URL:http://(省略)/user_information.php?id=250' OR 'a'='a
ログ分析
本項目では、splunk
を使用した。
基本操作などは運営側が作成したドキュメントを参考にしてほしい。
URL:https://west-sec.com/entry/splunk
Splunk1
Q)
■初期操作
・Splunkにログインしてください。
・左上の「Search & Reporting」
・検索画面が表示されたら、 検索窓に「index=main」を入力、時間を「全時間」にして、緑の検索ボタンを押す
■問題
Splunkには、いくつかのログが投入されている。今回の場合、いくつのログファイルが投入されているか。
※デフォルトで表示されるようにはなっているが、左のバーの「すべてのフィールド」で「source」がチェックされていることを確認しておこう。
hint)
問題文に書かれた手順通り、作業を実施する。
表示されている値
の個数を数える。
Splunk2
Q)
ログは、データ量が最も多い以下を使う(今後も同じ)
source="secure-20210719.log"
これは、Linuxサーバにおける/var/log/secureのログであり、ログイン試行などを含むセキュリティ関連のログが保存されている。
さて、このログにおいて、最も多くログイン試行をしたユーザにおける、その試行回数を答えよ。
【参考】
・ログイン試行の失敗のログの例(の抜粋)は以下であり、vagrantというのがログイン試行したユーザ名である。
Invalid user vagrant from 179.167.166.51 port 40976
・初期状態から実施するには、検索窓に「index=main」を入力、時間を「全時間」にして、緑の検索ボタンを押す
hint)
問題文から条件文を考える。
index="main" source="secure-20210719.log" |stats count by user | sort -count
最も多くログイン試行をしたユーザはuser
であることが分かった。
Splunk3
Q)
※同じくsecure-20210719.logのログにて
ログインに成功したのは何回か
hint)
action="success"で絞る。
index="main" source="secure-20210719.log" action="success"