8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CTF初参戦4完!〜SECCON Beginners CTF 2023 Writeup〜

Last updated at Posted at 2023-06-04

SECCON Beginners CTF 2023で、CTFに人生初参戦で4完できましたので、Writeupと称されるセキュリティコンテストの参戦記を投稿します。

実際の解答につながる肝心なところは記述しませんので、安心してお読みください。

SECCON Beginners CTFは、セキュリティコンテストの中でもビギナー向けとされていて、年1回開催されるもの(のはず)です。今年度は、2023年6月3日(土)14時〜2023年6月4日(日)14時の間の、24時間で行われました。

なお、競プロer7人でチームを組み、Rank108 / 778 teams という最終成績でした。

image.png

チームメイトのWriteupリンク

1. 筆者のバックグラウンド

  • AtCoderアルゴ水(メイン言語 PyPy)、ヒューリスティック黄(メイン言語 Rust)
  • JDLA-G検定/E資格保有
  • すでに失効しているが、Cisco CCNA、Cisco DevNet資格保有歴あり
  • ネットワーク系のSIに長年従事(最近はあまり現役ではない)
  • インターネットサーバやセキュリティにもある程度知識あり
  • 個人開発で、スマホアプリ〜フロントエンド〜バックエンド、さまざまな言語・フレームワークの利用経験あり

CTFは何となく存在をしっていましたが、全くやったことはありませんでした。開催3日前の時点で、CpawCTFの超初心者向けである最初の問題の解き方すら、わかっていませんでした。。。

image.png

2. 参戦までにやったこと

  • CpawCTFのLevel2までを、開催3日前に取り組み初めて、当日の午前までかけて終わらせました。
  • 書籍「入門セキュリティコンテスト」をざっと読みました。なお本書は入門向けといいつつ、とてもレベルが高く、少なくとも今回大会で解いたEasyまでの問題よりも、高いレベルの問題を題材としています。
    image.png

3. 参戦記

本番では以下の3.4までの4問に正答でき、残り1問は解答前に時間切れとなりました。

以降の表題で「AC」とあるのは、競プロ用語で「Accepted(正答)」の意味です。

3.1. web Forbidden(2023-06-03 15:42 AC)

この問題もそうですが、基本的には、脆弱性があるサーバーが動作しているURLと、その実装がほぼそのまま含まれるtarボールが提供されます。

image.png

tarボールをダウンロードして、ローカル環境に展開することが第一歩となります。以下のような形で、Webアプリの実装、Webサーバを含めたDocker用のファイルが展開されます。

image.png

最初に肝心なのは、個々の問題の「ルール」 = 何をするとFLAGが入手できるのか、を理解することです。

この問題の場合、特にapp/index.jsを見ることで以下の「ルール」が理解できます。

  • node.jsのexpressというフレームワークを利用している
  • block関数(リクエストパスに'/flag'が含まれていたらForbiddenを返す)をかいくぐって、/flagファイルを取得すれば勝ち

「ルール」を理解したら、自分の知識・ググり力・実際に動作を試してみる、といったことを駆使して、ルールを満たす「答え」を探します。

幸いにして、2時間かからずに、「答え」を得ることができました。

image.png

3.2. misc YARO(2023-06-03 17:08 AC)

本問題の「ルール」は、YARAというシグネチャーマッチング型のマルウェア検出ツールがサーバにインストールされている前提で、サーバにあるマルウェア(=FLAGファイル)の中身を見つけることです。YARAは、正規表現をつかうことで、自由度の高いマッチングが可能です。

他の問題でも頻出の形式として、サーバとの通信に、決められたポートでのテキスト送受信ができるncコマンドを利用します。ncコマンドで、サーバ側のYARAへ指示を行います。

しかしながら、YARAは「マッチした or しない」のみを返すため、正規表現で幅広くマッチさせた場合、実際のFLAGの中身がどうだったかは答えてくれません。この課題を解消するために、ncコマンドを繰り返し使う必要があり、ncライクな通信をPythonプログラムから実行するプログラムを作りました。以下の記事が大変役立ちました。

image.png

プログラム作りは、競プロのレベルからすると簡単であり、1時間と少しで、本問題を解くことができました。

以降の土曜日のうちは、夕食の後、チームメイトが苦戦している別問題に取りつきましたがチームメイトが無事ACしたのと、競プロ参戦のため、CTFの進捗はありません。

3.3. web aiwaf(2023-06-04 10:08 AC)

ここからは2日目である日曜日の起床・朝食後の取り組みです。

image.png

本問題の「ルール」は、パストラバーサルという著名なハッキングを行うことです。

しかしながら、なんとOpenAIに対して、「このリクエストはパストラバーサルかどうか?」というプロンプトがサーバ側で走り、パストラバーサルであるとOpenAIが答えたらアクセスを遮断する、という「aiwaf」が組み込まれています。

時代の先端をいく問題であり、とても楽しめました。

aiwafの"waf"とは、Wab Application Firewallの略です

image.png

そこで、自分もChatGPTを立ち上げて、リクエストがパストラバーサルになるかどうか、なるとしたらどういう理由からか、をいちいち確認しながら、この「aiwaf」の回避方法を探しました。

image.png

そして、ついに、ChatGPTを騙せるパストラバーサル方法を発見したのですが、最初に発見したクエリーは、OpenAIではパストラバーサルと判断されてしまい、正答にはなりませんでした。ChatGPTとOpenAIのAPIとは、微妙に異なる動作をするのですね。

その後、さまざまな試行錯誤のうち、明らかに騙せる方法を思いつくことができ、無事ACしました。

3.4. crypto Conquer(2023-06-04 10:51 AC)

本問題の「ルール」は、Pythonプログラムで定義された「暗号化」と、暗号データをもとに、元のデータであるFLAGを復号するというものです。

暗号化のアルゴリズムを良く読むと、ほぼ可逆な暗号化になっていたため、逆手順となるプログラムを記述することで、無事FLAGを得ることができました。

この問題は、競プロに慣れている人なら、解きやすかったかもしれません。暗号化にXOR操作を多用してあったため、AtCoderのARCに頻出なXOR操作の性質の理解が役立ちましした。

3.5. web phisher2(時間切れ)

残り時間で本問題に挑みましたが、やや時間不足でした。

この問題の「ルール」は一風変わっています。URLアクセス先をサーバプログラムに送り込むのですが、サーバ側では、Web画面イメージをOCRしたのも、Web画面をスクレイピングしたもの、の2通りが解釈されます。そして、前者は正常に見せつつ、後者は不正なURLに誘導する、という状況をつくることが求められます。その不正サイトのアクセスにおいて、リクエストパラメータにFLAGが含まれるようになっており、不正サイト側でリクエストパラメータを記録することで、FLAGが得られます。

最終的にACはできなかったので、上記の「ルール」が正しいかは未検証でしたが、その後upsolveして、正しいことを検証しました。

2の無い初代phisherが昨年度に主題されていることググればわかるとともに、昨年度はこう解いたというWriteup情報もあるため、参考になります。

試行錯誤により、上記の不正サイトへのアクセスはできるようになったものの、アクセス先のWebサーバを準備する時間は無く、タイムアップとなりました。

以下では、input_urlには別サイトを含むものの、ocr_urlには正常サイトしか認識されていない、という状態を作ることに成功しています。

image.png

image.png

4. おわりに

セキュリティコンテストは、インフラ〜アプリおよびフロント〜バックに幅広く経験を持つ、自分のようなバックグラウンドを持つ人間にとって、向いている競技だと思いました。

また、チームを組んでの戦いが、普段の競技プログラミングとは違って、とても楽しかったです。競プロでもPGBATTLEのようなチーム戦はあるのですが、基本的に競技中の相談は禁止であるため、CTFとはだいぶ雰囲気が違います。

なお、ゆるい雰囲気ながら、事前情報整備や、本番中のコミュニケーションのやり方など、チームリーダーの運営が、とても優れていたと思います。

また、機会あれば、挑戦したいと思います。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?