feature image

2022年5月2日 | ブログ記事

CPCTF22 新入生たけの参加記録

2022/05/01 に開催された CPCTF22 で、新入生内4位を取ったので記録と感想を残そうと思います。

自己紹介

はじめまして。22Bのたけです。この記事は参加記録なのでCPCTFに関係ありそうな事だけ軽く書きます。

競プロ歴:

あとCTFを高校の頃本当にちょっとだけやった事があります。(チュートリアルみたいなのを解いたくらい)

始まる前の戦略などなど

結果

Easyで正解した問題一覧:Dive!, Eagle, Find Image, Forbidden 2, PHE1, Smash Stack, This is Flag!!, Veeeeeeeery Long Text, hacker, illumination, the luck 1, xxorxx
Easyで正解した問題一覧:Dive!, Eagle, Find Image, Forbidden 2, PHE1, Smash Stack, This is Flag!!, Veeeeeeeery Long Text, hacker, illumination, the luck 1, xxorxx

問題別のメモ

ざっと解けた問題、解けそうだった問題について自分の感想、反省点などをジャンル別で並べ続けていこうと思います。ネタバレあり。

凡例

#### <問題タイトル>: <o 正解, x 正解できず, - 挑戦しなかった>

Crypto

My Own language: o

手作業でやるのは中々しんどいし、エディターの置換も厳しい。ので、ヒントを開けて「換字式暗号 ツール」でggる。→お、いい感じのサイトあるじゃん。であとはモクモク。最初の Ya!Hi! と決め打ってしまい時間がかかった。

RSA Warmup: o

415411 素因数分解でggってあとは頑張る。

PHE 1: o

問題文みてPwnみたいな見当違いの事考えてた。Cryptoってカテゴリーに書いてあったしなぁ…。

PoweRSA: x

p,qが求まったのにそこから先で詰まってしまった。pythonが gcd(e, l) = 1 を満たす数字をうまく持ってきてくれなかった。決して僕のせいではない。

xxorxx: o

ノータイムでヒントを見てしまったけど、ちゃんとコードを見たらやる事は単純だった。pythonで decoder を書く時に byte <=> string の変換でちょっと苦労した。

Forensics

sunset: o

exiftool、手元のlinuxに入ってなかったから webshell 起動した。

Dive!: o

Dockerの中身こんな感じだったんだ、はへー。

Deeper: x

手元のflagメモが CPCTF{...hidden..._us3fu1} なんだけど最後の単語が多分3-4文字足りてない(successfulになりそう)。 多分見るところを間違えた?
tourist出しした関係で、どうやってこのフラグを手に入れたのか思い出せず…。tourist出ししてしまったのをちょっと後悔。

そのあとは画像からbinwalk使ってファイル切り分けでそれを3回くらい展開したんだけど、ascii text, with very long line みたいなファイルで詰まった。google先生によればなんかの圧縮ファイルらしいんだけどよくわからず…。

png...?: x

どっかを直せばいいんだろうけどどこを直せばいいのかよくわからないしめんどいのでパス。exiftool が corrupted って表示してくれるならautofixツールみたなのあってもよくね?

Misc

Eagle: o

ヒント2を開いてようやく解き方を理解した。

Mellon: x

モールス信号だなぁ、って思って適当に変換かけても英文にならず。問題文にドイツ語って書いてあるのあとから気づいたけど、残り時間が5分とかだったのでタイムオーバー。

This is Flag!!: o

アラビアみたいなやつで使う記憶。LINE でこれで遊んでる人がいたのが懐かしい。 VSCodeに貼り付けて、左から文字を順番に打ち込んだらACした。

click: -

問題見てません…。

the luck 1: o

まぁ時間さえわかれば乱数決まるんだろうなぁ…。と思ってやったけど秒数をあわせるのが下手くそで結構手間取った。

the luck 2: x

へえ、pythonもなんかあるのか。メルセンヌ・ツイスタ、ほーん…624回答えみないとわからない!? まじか。
→ pwntool がうまくインストールできず、うまくsolver? をかけなかったのでここでギブアップ。624回会話するのも流石に面倒だし。

OSINT

Welcome to OSINT! 1: o

はい。

Welcome to OSINT! 2: x

Twitter で検索をかけると https://twitter.com/nmink615 がヒットするけどなんいもない。22年3月作成だしこれっぽそうなんだけどなぁ…。記事のドメインについてた nm615 で検索かけると全然関係なさそうな人がヒット。最終的には答えを見てもアカウントを見つけられず。

Hacker: o

Onion Browserを入れた。サイトの中身が想像以上に簡潔すぎて困っちゃったけど、ソース見た時に :8000 って書かれてるのが怪しすぎてそのへんを色々見たら無事にflagを発見した。

illumination: o

Googleに検索頼んだら近そうなサイトがヒット。そこからGoogleMapでユニクロの情報を使いながらどの通りかを探して通りの名前を確定。最後通りの読み方を間違えて少し手間取った。

PPC

Addition Construct: o

a=N-1, b=1 にして見事に WA が出ましたね。かなしい

Nkuth's Plus Notation: o

問題文が理解できなさすぎて解答を見た。この性質面白い。

State of the clock: o

まぁ特に詰まることはなく。

Garbage Bags Optimization: x

えー…。解けなくてごめんなさい。O(N) まで落とせてるはずなんだけど TLE しまして。コード貼るので何がおかしいか見つけてください。僕はあとで先輩から教えてもらおうと思います。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;

int main() {
    int n,k;
    cin >> n >> k;
    int a[n];
    for(int i=0; i<n; i++) {
        cin >> a[i];
    }

    long long  ansl = 0;
    long long ansh = 1000000000000000;

    while (ansl != ansh) {
        long long mid = ansl+ansh;
        mid /= 2;
        long long now_garbage = 0;
        long long used_box = 1;
        for(int i=0; i<n; i++) {
            if(now_garbage + a[i] <= mid) {
                now_garbage += a[i];
            }else {
                cerr << "used-at " << i << endl;
                used_box++;
                if(a[i] > mid) used_box += k;
                now_garbage = a[i];
                if(used_box > k) break;
            }
        }
        if (used_box > k) {
            ansl = mid+1;
        }else {
            ansh = mid;
        }
        // cerr << used_box << ":" << ansl << " " << ansh << endl;
    }
    cout << ansl << endl;
}

Mogumogu Pakupaku: x

えー…解けなくてごめんなさい。ってか、これに関してはちょいC++にとってむずくないですか?最大で 1020 s まで来る可能性があって、それをオーバーしたらまずいのに long long じゃ 1020 までしか扱えず… ヒントを見てもこれを回避する方法が載ってなくて詰んだ。2問連続で詰まっちゃったのでPythonで書く気力もなく。うまく扱えば最大値は 1010 s 以上の時は条件組めばいい感じに処理できそうなんだけどわからず。

残りのEasy: -

上2問でやる気が消えたのでPPCは撤退しました。あとでEasy の問題だけは見る…

Pwn

Smash Stack: o

実は新入生唯一の正解者だったらしい。嬉しい。

pwntools をインストールするのに非常に苦労した(というかなんか動かない)。

.py ファイルからじゃたたけないけどコンソールの interactive モードからはpwntoolが使えるって状況だったので、手作業で頑張って打ってなんとか成功。shellが使えたからあとはlsとかを頑張って叩いてフラグゲット。yay

Reversing

Welcome to Reversing: o

Ghidra のインストールが一番たいへんでした。

見てない

Pyck up!: x

uncompyle6 を使うも出力ファイルがなんと空っぽで終わった。

Shell

Hello Webshell: o

Ctrl-v でパスワードを貼り付けられず泣いてた

netcat: o

はい

Find Image: o

おじいちゃ~ん…。

Veeeeeeery Long Text: o

catして中指を立てながら素早く grep した。

Web

Forbidden 1: o

Cookie 編集する方法知らなかった。フロントエンド全く触ってないのがバレちゃう…

POET ME!: o

普段使ってる Talend API Tester で post すると 400 が出て???となる。問題文の python ファイルを読むと {"password": "pass"} を投げればいいとわかり投げる。あとはdeleteも送っておわり。
body が空だったから400が出たっぽい、はーん。ちなみに header で「これ json だよ~」って言いながら body で text 入れてリクエスト送ったら500が出た。

Robots: o

ヒントをガン見した。

Forbidden 2: o

For Biden に見えてきた。 自分が昔建てたサーバーもこれやってそうで怖くなってきた。てかどういう仕組みなんだ。

最後に

適当に思った事を列挙しときます。脈絡なくてごめん…。s

めっちゃやりごたえがあって楽しかったです、CPCTFの準備してた方々ありがとうございましたー!(そしてこれからよろしくお願いします!)

Takeno_hito icon
この記事を書いた人
Takeno_hito

22B 「たけ」 基本的にゲームばっかりやってる怠け者です。SysAd班とゲーム制作が主

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2021年8月12日
CPCTFを支えたWebshell
mazrean icon mazrean
2021年5月19日
CPCTF2021を実現させたスコアサーバー
xxpoxx icon xxpoxx
2023年4月27日
Vulkanのデバイスドライバを自作してみた
kegra icon kegra
2021年4月2日
DXライブラリで重力パズルゲームを作る
Macky1_2 icon Macky1_2
2023年7月13日
アルゴリズム班はやとき王選手権「競(けい)プロ」を開催しました!
abap34 icon abap34
2021年5月16日
CPCTFを支えたインフラ
mazrean icon mazrean
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記