MK勉強記

【CTF】防衛省サイバーコンテスト2024参加記録

作成日:2024-02-25

main image

はじめに

2,3ヶ月くらいCTFの勉強をしておらず、お久しぶりのCTFでした。

結果としては、122位(314位中)という結果でした。

Untitled.png

セキュリティ分野はすげえ人がいっぱいいるので、その中でのこの順位は、自分的に悪くない順位だったと思います。

ただ、解けなくて悔しかった問題やヒント使わずに行けたと思う問題もありました。

今大会を参加してまたCTFのモチベーションが上がったので勉強を再開していこうと思います。

反省

問題文を理解するのが早くできた気がしました。ツールもなんとなく使うというよりは、使えそうか調べてから使うことができました。

悪かった点としては一つのやり方に集中してしまったときに、ヒントをみたら「それさっき考えてたわ」みたいなのがあった。

思考をまとめながら問題を解いてくことが大切だと思いました。

解けた問題

正答できた問題は以下になりました。Miscが比較的簡単でした。

Crypto

  • Information of Certificate 10pt
  • Miscellaneous

  • Une Maison 10pt hint -3pt
  • String Obfuscation 10pt
  • Where is the Legit Flag? 20pt
  • Network

  • Discovery 10pt hint -2pt
  • FileExtract 10pt
  • Programming

  • Logistic Map 10pt
  • Trivia

  • The Original Name of AES 10pt
  • CVE Record of Lowest Number 10pt
  • MFA Factors 10pt
  • Web

  • Browsers Have Local Storage 10pt
  • Insecure 20pt
  • Writeup

    Information of Certificate

    問題文: Easy.crt ファイルは自己署名証明書です。証明書の発行者 (Issuer) のコモンネーム (CN) 全体を flag{} で囲んだものがフラグです。

    解答形式:flag{XXXXXXXXXXXXXXXXXX} (半角英数記号)



    Easy.crtファイルが渡されました。そもそも自分はcrtファイルが何かわかっていなかったのでそれを調べました。

    認証局の署名の真正性を証明するための中間証明書らしい←終わってから知った笑

    コモンネーム(CN)を取り出す必要があり調べていたらopensslコマンドを使って情報を取り出すことができるということを知りました。

    openssl x509 -in Easy.crt -text

    CN=<コモンネーム>というふうに書いてありました。

    Browsers Have Local Storage

    問題文: にアクセスしてフラグを見つけ出し、解答してください。

    解答形式: FLAG{************}

    Untitled.png

    ディベロッパーツールを使って一発でした。

    Insecure

    問題文: あなたは社内ポータルサイト( ページが安全に保護されているかチェックすることになりました。 以下のログイン情報を用いてサイトにログインし、管理者の profile ページに記載されている秘密の情報を見つけてください。 なお、依頼の際に「管理者ページのidは0だよ」というヒントをもらっています。



    ログイン画面からログインした後に、プロフィールページへ飛ぶボタンがありました。

    与えられたログイン情報は一般ユーザであったので、プロフィールページにはそのユーザの情報が表示されていました。

    プロフィールに飛ぶまでのリクエストをBurpで確認しました。

    最初のリクエストは以下のようになり、その後 /profile_success.phpにリダイレクトされました。

    GET /show_profile.php?id=1 HTTP/1.1 Host: 10.10.10.33 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.159 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Referer: http://10.10.10.33/dashboard.php Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9 Cookie: PHPSESSID=d2b85d27da625d3f10a4a33d078fa0e3 Connection: close

    問題文に管理者のidは0と書いてあったので、id=0でリクエストしてみました。

    すると以下のようなリクエストになりエラーのページにリダイレクトされました。

    GET /profile_error.php HTTP/1.1 Host: 10.10.10.33 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.159 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,_/_;q=0.8,application/signed-exchange;v=b3;q=0.7 Referer: [http://10.10.10.33/dashboard.php](http://10.10.10.33/dashboard.php) Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9 Cookie: PHPSESSID=d2b85d27da625d3f10a4a33d078fa0e3 Connection: close

    一般ユーザでプロフィール画面開いたときにprofile_success.phpにリダイレクトされていたので上記のリクエストをerrorからsuccessに変更したらFlagが書いてあるページに行きました。

    Discorvery

    問題文: あなたはクライアントに依頼されて リリース予定の Web サーバー「10.10.10.21」に問題がないか確認することになりました。対象サーバーにインストールされている CMS のバージョンを特定し、解答してください。

    解答形式: flag{..., ********: *****} (バージョン番号, リビジョン番号)

    └─$ nmap 10.10.10.21 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-25 11:20 JST Stats: 0:00:13 elapsed; 0 hosts completed (1 up), 1 undergoing Connect Scan Connect Scan Timing: About 82.12% done; ETC: 11:20 (0:00:03 remaining) Nmap scan report for 10.10.10.21 Host is up (0.16s latency). Not shown: 998 closed tcp ports (conn-refused) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http Nmap done: 1 IP address (1 host up) scanned in 17.21 seconds └─$ curl 10.10.10.21 <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx/1.25.3</center> </body> </html> └─$ nmap -sV 10.10.10.21 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-25 11:21 JST Nmap scan report for 10.10.10.21 Host is up (0.14s latency). Not shown: 998 closed tcp ports (conn-refused) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0) 80/tcp open http nginx 1.25.3 Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 24.62 seconds

    nginx使ってることだけはわかった。

    ブラウザを使うとschatzsuche.ctfにリダイレクトされたが、何も表示されず。

    /etc/hostsファイルに10.10.10.21 schatzsuche.ctfを追加

    Untitled.png

    が表示された。

    curlを使ったが思ったような出力はでず。

    wpscanを使ったが、wordpressではなく。

    wappalyzerを使ったがnginxしか検出されず。

    dirbを使ったら以下のような出力

    └─$ dirb http://schatzsuche.ctf ----------------- DIRB v2.22 By The Dark Raver ----------------- START_TIME: Sun Feb 25 11:54:54 2024 URL_BASE: http://schatzsuche.ctf/ WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt ----------------- GENERATED WORDS: 4612 ---- Scanning URL: http://schatzsuche.ctf/ ---- + http://schatzsuche.ctf/cmsadmin (CODE:301|SIZE:162) ==> DIRECTORY: http://schatzsuche.ctf/ftp/ + http://schatzsuche.ctf/index.html (CODE:200|SIZE:428) + http://schatzsuche.ctf/robots.txt (CODE:200|SIZE:4700) ---- Entering directory: http://schatzsuche.ctf/ftp/ ---- (!) FATAL: Too many errors connecting to host (Possible cause: COULDNT CONNECT) ----------------- END_TIME: Sun Feb 25 12:00:01 2024 DOWNLOADED: 4794 - FOUND: 3

    とりあえず、robots.txtを見てみたがよくわかんなかった。

    /cmsadminにリクエストすると/webEdition/にリダイレクトされた。

    とりあえず使われているCMSはwebEditionっていうことがわかった。

    Untitled.png

    ソースにバージョン3と書いてあったり、License.txtのパスが書いてあったからここらへんにヒントあるだろうと思い調べた。

    Untitled.png

    2007年6月29年に関係があるかと思ったがなく。

    ヒントを見たらftpがどうたらこうたらと書いてありました。→dirbに出力されてたわ。。。

    /webEdition/ftp/にリクエストしたらパスワードが書いてあるファイルがありました。

    そのユーザとパスワードを使ってログイン→helpのinfoの部分にバージョンが書いてありました。

    参考

    FileExtract

    問題文: 添付の FileExtract.pcapng ファイルからフラグを見つけ出し、解答してください。

    解答形式: flag{**********}

    Wireshark使った。

    follow のtcp streamを使ってftpのやりとりを確認

    Untitled.png

    s3cre3t.zipにflagがありそうということがわかったので、その通信を

    follow → tcp stream → rawを選択してファイルで保存

    保存したファイルはzipファイルであったのでunzipコマンドで開く

    password聞かれたので、上記画像の br2fWWJjjab3 を使ったらzipファイルを開けました。

    参考

    The Original Name of AES

    問題文: Advanced Encryption Standard (AES) は、公募によって策定された標準暗号です。 現在採用されているアルゴリズムの候補名は何だったでしょうか?

    CVE Record of Lowest Number

    問題文: 最も番号が若い CVE レコードのソフトウェアパッケージにおいて、脆弱性が指摘された行を含むソースファイル名は何でしょう?

    解答形式:flag{XXXXXXXXX} (半角英数・記号)

    MFA Factor

    use maiison

    画像が渡された。真ん中の方がバーコードっぽくなっていたので以下のサイトを使ったらFlagが出力されました。

    String Obfuscation

    Where Is the Legit Flag?

    Logistic Map

    問題文: 下記のロジスティック写像について、x_0 = 0.3 を与えた時の x_9999 の値を求め、小数第7位までの値を答えてください(例:flag{0.1234567})。なお、値の保持と計算には倍精度浮動小数点数を使用してください。

    ロジスティック写像: x_{n+1} = 3.99 x_n (1 - x_n)

    解答形式:flag{X.XXXXXXX} (半角数字)

    def logistic_map(index): x_n = 0.3 for i in range(1, index): x_n = 3.99 * x_n * (1 - x_n) return x_n print(logistic_map(10000))

    最初logistic_mapの引数を9999にしていて合わなかった。

    Profile

    profile photo

    地方公立大学院修士2年。

    今年は「知識の幅を縦に広げること」が目標で、低レイヤ、OS、ミドルウェア、コンテナ、ネットワーク、データベース、SEO対策の勉強しています。

    情報処理安全確保支援士と応用情報は合格しています。

    研究として楕円曲線暗号、耐量子暗号、格子暗号や格子基底簡約アルゴリズム、同種写像暗号について学習しています。

    普段はアルバイトでFlutter/Go/GCP/Next.js/Reactを使っています。