1
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?

学内CTF writeup ~web編~

Last updated at Posted at 2025-05-01

目次

  1. hidden
  2. cookie1
  3. cookie2
  4. directry_traversal
  5. SQL Injection 1
  6. browsing
  7. directry_traversal

hidden

セキプロのwebサイトのどこかにflagを隠しました。どこに隠したか分かるかな?
flagの形式はkitsec{}です。
セキプロwebサイト: https://www2.kanazawa-it.ac.jp/kitsec/

image.png

アクセスすると、セキプロのホームページにアクセスすることができました。他のページを見てみてもwebページ上では、特に何も表示されていません。

解法

webサイトがどのように書かれているのかを確認するために、webサイトのソースコードを閲覧します。ソースコードの見方はさまざまですが、今回はCtrl+Uを押すことでソースコードを見てみます。

image.png

このような感じで、ソースコードが表示されます。どの部分にflagが書いてあるか探索すると、活動内容 | /activity.htmlのソースコードを見ると、コメントアウトされているflagを見つけられます。

image.png

よってflagはkitsec{hidden_flag_in_code}になります

cookie1

このアプリケーションには、管理者だけがアクセスできる秘密のページがあるようです。
以下のwebページにアクセスしてFlagを見つけて下さい。
flagの形式はkitsec{}です
https://cookie1.kitsecprj.uk

webページにアクセスすると、ログインページが与えられます。しかし、UsernameとPasswordが分からないので、何も手が付けられません。適当なUsernameとPasswordを入力しても、以下のようなページになるだけです。

image.png

adminの権限に昇格する手立てとして何があるだろうと考え、問題のタイトルにもなっているcookieに注目してみます。
cookieってなに?っていう人がいると思いますが簡単にいうと、サーバがユーザのウェブブラウザに送信する小さなデータのことです。webの第2回目の資料、もしくは以下のリンクを参照してください。
https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies
https://zenn.dev/collabostyle/articles/8949e8db686263

解法

このwebサイトのcookieを画面を確認してみましょう。
chromeの場合cookieの見方は、以下の手順になります。

  1. 右クリック
  2. 検証をクリック
  3. アプリケーションタブを見る
  4. ストレージ -> Cookieを参照する

この手順でcookieを確認すると、PHPSSIDis_Adminというパラメータが見えることが分かります。

image.png

is_Adminというパラメータに注目してみると、値がFalseになっていることが分かります。is_AdminのパラメータのTrue/Falseで判定してそうなので、ここをTrueにしてみるとどうなるでしょう。無事flagがゲットできました。
is_AdminのパラメータをTrueに書き換えた後、ページ自体をリロードすると変更が反映されます。

image.png

flag : kitsec{check_your_cookie_success}

cokkie2

VIP専用コンテンツにアクセスし、隠されたFLAGを見つけ出してください。
flagの形式はkitsec{}です
https://cookie2.kitsecprj.uk/

webページにアクセスすると、ユーザ名のみ入力を求められます。今回もユーザ名が与えられていないので、適当なユーザを入力します。すると以下のような画面に遷移します。

image.png

今回も権限エラーのようです。

解法

それでは今回も問題のタイトルとなっているcookieを見てみましょう。cookieを見てみると以下のようになっています。
cookieにはsessionというパラメータが入っていることが分かります。

image.png

sessionというパラメータにはeyJ1c2VybmFtZSI6ICJoZWxsbyIsICJyb2xlIjogIm5vcm1hbCJ9IA==が入っていることが分かります。これが怪しいなという検討を付けます。
base64で暗号化されたものの特徴として、末尾に==がつくという特性があります。
cyberchef (https://gchq.github.io/CyberChef/) を使ってbase64デコードをしてみましょう。デコードした結果が以下のようになります。

image.png

この結果からsessionには{"username": "hello", "role": "normal"}が格納されていることが分かりました。今回はwebサイトに最初にアクセスした際時、VIP専用コンテンツを閲覧する場合はログインして下さいという指示があるので、role: "vip"にしてみましょう。

image.png

するとbase64エンコードした結果がeyJ1c2VybmFtZSI6ICJoZWxsbyIsICJyb2xlIjogInZpcCJ9になります。
これをsessionに格納して再リロードすると、flagが出現しました。

image.png

flag: kitsec{check_cookie2_base64}

SQL Injection1

ログイン画面を操作して管理者の権限を取得し、隠された情報(FLAG)を取得してください。
flagの形式はkitsec{}です
https://sqlin1.kitsecprj.uk/

webページにアクセスすると、UsernamePasswordを操作するログインフォームが与えられます。webページに書かれているとおり、UsernameをBob、 PasswordをZmlnaHQにしてアクセスしてみましょう。すると以下のようなページになります。

image.png

IDUsernamerentalbookという項目が出てきました。

解法

この情報から管理者権限を取得すると、FLAGがゲットできるのではないかという検討を付けます。
そこで問題のタイトルになっているSQL Injectionについて試してみることにします。
SQLInjectionに関しては、webの第1回目の資料について確認してください。
SQL Injectionを試す方法としてはいろいろなものがありますが、一番知られているもので試してみましょう

UsernameとPasswordに' OR '1' = '1を指定してみましょう
裏で動いているスクリプトは今回見えませんが、この入力により、SQL文が
SELECT * FROM users WHERE username = '' OR '1' = '1' AND password = '' OR '1' = '1' と解釈されます。

'1' = '1'が常に真と返されるので、usernameの部分の検証がTRUEになります。
passwordの部分の検証もusernameの検証と同じくTRUEになります。
すると、データベース内の情報が全てSQL Injectionによって閲覧することができるようになります。

image.png

flag: kitsec{sql_In_jec_tiOn1}
※ 今回はusernameとpasswordに同じものを指定しましたが、他にも突破する方法はあります。気になる方はぜひ他の方法も試してみて下さい。

browsing

このサイトの管理者は公開するべきでない管理者ページを公開してしまいました。隠されたページを探してください。
flagの形式はkitsec{}です
https://browsing.kitsecprj.uk

指定されているwebページにアクセスすると、ログインフォームが与えられます。
image.png

UsernameやPasswordを求められますが、これ以外情報が与えられていないため突破するのは困難です。ここで問題文に注目してみましょう。管理者は公開するべきでない管理者ページを公開してみましたと書かれています。
そこで、このサイトについて公開されているページに関しての情報を得ることから始めましょう。
そこで/robots.txtに注目します。

robots.txtとは?

通常、webサイトのルートに配置されているファイルで、クローラー(ウェブページからデータを収集するために自動的にウェブを閲覧するbot)からウェブサイトへのアクセスを許可するか、禁止するかを決定するファイル。

解法

それではこのwebサイトのrobots.txtについて確認しましょう
https://browsing.kitsecprj.uk/robots.txt アクセスしてください。
image.png

すると、User-agent: *Disallow: /admin/という2つの情報が見られることが分かります。
ここではUser-agent: *はすべてのウェブクローラーに対して、Disallow: /admin/配下の URL をクローラーにクロールしないよう指示しています。

このことから、このwebサイトには/adminというディレクトリがあることが明確になります。試しに https://browsing.kitsecprj.uk/admin にアクセスしてみましょう

image.png

このように、403 Forbiddenのレスポンス(サーバがリクエストを許可したものの、処理することを拒否したこと)が分かります。そのため/adminディレクトリが存在することの確認が取れました。ここからflagが含まれていると思われるディレクトリ名を推測して入力してみましょう。

今回は https://browsing.kitsecprj.uk/admin/flag にアクセスするとflagをGETすることができます。
※ 今回flagをGETする上で使用した方法を強制ブラウジングといいます。詳しくは以下の資料を参考にしてみて下さい。(https://e-words.jp/w/%E5%BC%B7%E5%88%B6%E3%83%96%E3%83%A9%E3%82%A6%E3%82%BA.html)
image.png

flag: kitsec{forced_browsing_success}

directry_traversal

このwebサイトには秘密のファイルが隠されています。それを探し出して下さい。
flagの形式はkitsec{}です。
https://directry.kitsecprj.uk/

指定されているページにアクセスすると、sekipro cafeという架空のカフェのメニュー表サイトにアクセスすることができます。各メニューを選択すると、商品の詳細ページが表示されます。

image.png

解法

この問題を解くうえで、次に何をしたらいいのかを考えます。問題のタイトルが directry_traversal なので、ディレクトリトラバーサルがどこかで仕掛けられないか確認します。そこで商品の詳細ページにアクセスしたときのurlに注目します。

https://directry.kitsecprj.uk/file?file_name=item1.txt
商品が変わるごとに /file?file_name= の部分が変化していることが分かります。

そのため、ここからディレクトリトラバーサルが仕掛けられないか試してみましょう。
試しに file?file_name=../ を指定してみます。すると /file?file_name= /src/public 内のファイルを参照していることが分かります。

image.png

webページに情報を公開するためのディレクトリとして public が使われていることが推測できるので、秘密の情報が含まれているディレクトリとして、secret が使われているのではないかと推測できます。

あとは、その中にflagが含まれているのでは?という予想がつくので、最終的に file?file_name=../secret/flag を指定してみます。するとflagがゲットできます。

image.png

flag: kitsec{di_rec_tory_tra_versa_l}

別解(上級者編)

ディレクトリトラバーサルを仕掛けるという点では、同じですが他にも解き方があります。それは直接環境ファイルを参照するという方法です。

環境ファイルを参照する際には、まずは環境変数が入っているファイルについて知る必要があります。環境変数が入っているファイルを指定するときは /proc/self/environ を指定します。

/proc/
Linux システム上で動作中のプロセスに関連する情報が格納されているディレクトリ

/proc/self/
Webサーバーが処理しているプロセスについて書かれているディレクトリ

/proc/self/environ
実行中のプロセスに関連する「環境変数」を格納しているファイル
プロセスが持つ環境情報(PATH、HTTPヘッダー、セッション情報など)が含まれる

このファイルのpathをディレクトリトラバーサルで指定することで、アクセスすることができるのかを参照することができます。このファイルはルートディレクトリから参照することができるので、適時確認した上でpathを指定します。その結果が以下になります。

image.png

参考文献
https://linuc.org/study/knowledge/526/
https://qiita.com/mizutoki79/items/de7d4818a21378820eef

終わりに

これにて学内CTFのwriteup web編の記事を終わります。

今回の学内CTFの解きなおし、解く際に使用した脆弱性の原理や技術、脆弱性が残らないようにするにはどうすればいいのか?などを自分で調べてみるとより理解が深まって、良い学習になると思います。

ありがとうございました。

1
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
1
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?