WaniCTF 2024

先日のSECCON CTFに引き続き、WaniCTFに参加しました。
6問しか解けませんでしたが、Writeupをさらっと書いていきます。

[Forensics]tiny_usb

添付されているファイルを開くと、chal_tiny_usb.isoというのがあるので、マウントすると画像ファイルがある。
その画像ファイルにフラグが書いてある。

[Forensics]codebreaker

添付ファイルを開くとQRコードの画像の上からバツ印が書かれた画像がある。

QRコードは特定の部分をちゃんとすれば、誤り補正でちゃんと読み込んでくれるので、とりあえずきれいにしていく。
以下のサイトを参考に、「アライメントパターン」「クワイエットゾーン」「タイミングパターン」がちゃんとわかるようにきれいにした。
https://www.keyence.co.jp/ss/products/autoid/codereader/basic2d_qr.jsp

修正した画像がこちら。

これを読み込むとフラグがゲットできる。

[Misc]sh

与えられた数値を予測する問題。

#!/usr/bin/env sh

set -euo pipefail

printf "Can you guess the number? > "

read i

if printf $i | grep -e [^0-9]; then
    printf "bye hacker!"
    exit 1
fi

r=$(head -c512 /dev/urandom | tr -dc 0-9)

if [[ $r == $i ]]; then
    printf "How did you know?!"
    cat flag.txt
else
    printf "Nope. It was $r."
fi

printf $i | grep -e [^0-9]の部分があるから数字以外入れちゃいけないかと思いきや、数字+半角スペース+それ以外の入力でも通過できることがわかったので、あとはf [[ $r == $i ]]; thenを通過できるような文字を入力すればOK。

1 || 1 == 1 という入力をすることで、ORの後の条件が必ずtrueになるので、これで無事フラグをゲットすることに成功した。
(ちなみにこれをWindowsのGit Bash上で試してたら、うまくいかなくて少しハマってました

[Pwnable]nc

これはncを使う練習問題。与えられたソースコードは以下のようになっていて、15+1を16進数で答える問題のようだ。

void win(){
    system("cat FLAG");
}

int main(){
    init();
    int answer;
    printf("15+1=0x");
    scanf("%d", &answer);
    if(answer == 10){
        win();
    }
    else{
        puts("incorecct:(");
    }
    return 0;
}

10を入力することでフラグをゲット

[Web]Bad_Worker

サイトにアクセスすると、フラグを取得できるボタンがある。

ただ、「Fetch FLAG.txt」を押しても正しいフラグはゲットできない。

開発者ツールで通信内容を見てみるとService Workerが取得している。

service-worker.jsを見てみるとFLAG.txtを取得しようとすると、DUMMY.txtの内容を取得するようになっているっぽいので、それをcurlでリクエストするとフラグゲット。
(今更気づいたけど、ブラウザでそのURLにアクセスしてもフラグゲットできないのか。。。

[Web]pow

サイトにアクセスするとなんか頑張って計算している。

以下のハッシュ計算がtrueの場合にリクエストを投げているらしい。

       function hash(input) {
        let result = input;
        for (let i = 0; i < 10; i++) {
          result = CryptoJS.SHA256(result);
        }
        return (result.words[0] & 0xFFFFFF00) === 0;
      }

なんかうまい方法はないかと思い、とりあえずリクエストをcurlで再送してみたら、progressが1増えた。
じゃあこれを1000000回やればいいのか…?と思い、1秒ごとリクエストを投げるようにしてみたら、すぐにアクセス制限にひっかかった。
よくよく見ると、リクエストボディが配列形式となっているので、もしやと思い、うまくいく数字を配列でリクエストすると、ちゃんとリクエストした配列の数分progressが増えた。

どこまでいけるか試した結果、100000くらいまではいけそうだったので、それを10回くらいリクエストするようなスクリプトを書いてフラグをゲットした。

#!/bin/sh

data='"2862152"'
for i in `seq 1 100000`
do
data+=',"7844289"'
done
echo "[${data}]" > data.txt

for j in `seq 1 10`
do
curl 'https://web-pow-lz56g6.wanictf.org/api/pow' \
  -H 'accept: */*' \
  -H 'accept-language: ja' \
  -H 'content-type: application/json' \
  -H 'cookie: pow_session=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZXNzaW9uSWQiOiI2MmZhZDdiMy1mM2Y1LTRhYzctYWY2Yi1lYmNhNmUwZTk0YzMifQ.7YYhRvb4TSNs-M9WPNP9hXw3t2A00uGQFPq-IaDYajs' \
  -H 'origin: https://web-pow-lz56g6.wanictf.org' \
  -H 'priority: u=1, i' \
  -H 'referer: https://web-pow-lz56g6.wanictf.org/' \
  -H 'sec-ch-ua: "Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "Windows"' \
  -H 'sec-fetch-dest: empty' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-site: same-origin' \
  -H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36' \
  -d @data.txt
  sleep 10
done

解きたかった問題

[Crypto]beginners_rsa

素数が5個あるパターンが出てきて、「???」となった。
nを因数分解したら解が1つしかないのに気づけなかったのが敗因。
他の人の解き方を参考にsageをインストールしたので、次こそは脱Beginnersを目指す…

[Crypto]beginners_aes

こっちはrsaが解けないことであんまりちゃんと見てなかったのもあったかもしれない、、、
他の人の解き方を参考に次はできるようにします。

[Forensics]I_wanna_be_a_streamer

パケットキャプチャからうまくデータを取り出すことができず断念。
なんかいいところまで行ってた気がするんだけどなー

[Misc]JQ Playground

入力する文字が9文字以上だとはじかれてしまう制限がきつくて苦しんでました。

' -R /* #とかだと9文字で、これ以上無理では… ってなっていたけど、他の人のwriteupを見て目からうろこでした。まさか最後がシングルクォートだとは、、、

[Reversing]lambda

この手の問題、毎回Chat-GPT君にお願いするんですけど、うまくいかず結局フラグがとれず。

[Reversing]home

Ghidraをインストールして、gdbを駆使して臨むも、constructFlag関数を呼び出した後にどこにフラグのデータがあるかわからず終了。もうちょっと特訓せねば。

[Web]One Day One Letter

ソースをある程度読んで、無理では…と思ってしまった。
まさかtimeserverを自分で立ち上げるとは、、、
次は解けるようにします。

[Web]Noscript

これはもうちょっとちゃんと取り組んでいれば解けたかもしれない問題。
他の分野にいろいろ手を出してしまったので、こういうのは腰を据えて解けるようになりたい。

IPAの資格持ち(FE,AP,SC,DB,NW)。一応、情報処理安全確保支援士です。セキュリティ関連に興味あり。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です