2023年振り返り

はじめに 2023年の振り返りをします。 1月・2月 未踏の成果発表と修論発表に追われる日々でした。 応募したときには、修論はなんとかなるだろうと高を括っていた結果痛い目を見ました… 未踏の同期にM2はほとんど見かけなかった気がします。賢い。 後回し癖1は一生治らないと思っているので修論執筆は本当に大変でした。 LLMの進歩のおかげで英訳が簡単にできる時代で本当に良かったです。 3月 2月までであらゆる𝐵𝑖𝑔 𝐸𝑣𝑒𝑛𝑡が終わったので燃え尽き状態でした。 何をしていたか覚えていません… と思ったのですが、そういえば手元のWindowsPCが不調になっていたので自作PCを新たに作り直していました。 今まで使っていたのが高校生の時に組んだPC(Core i5, GTX 760)だったので、VALORANTですら動作が怪しいレベルのスペックでした。 久しぶりの大型PCアップデート(Core i7, RTX 3060 Ti)でかなり快適になりました。 やはり普段から使うものには金を惜しむべきではありませんね。 買っただけで全然やってないElden Ring もう1つ思い出しました。VCJのSplit1の決勝が大阪で開催されたので見に行きました。 ゲームの大会を現地で見るのは初めてでしたが、会場の一体感はやはり現地でしか味わえないものですね。 FENNEL 4月 D進しました。がんばるぞ~ 同時に生活費を稼ぐべく、某所でWeb開発のお手伝いを始めました。 5月 上旬にWaniCTF 2023を開催しました。 今回はCTFTimeにも掲載して多くの方にご参加いただきました。 public votingでも多くの高評価をいただきとてもありがたい… 高評価ありがとうございます 下旬にはTeam Enuの方々とDEFCON Qualifierに挑みました 2。 食事付き、宿泊施設付き、お菓子もジュースもたくさんある部屋でモニターも大量にあるという至れり尽くせりの環境でCTFを解ける最高の2日間でした。 しかし、問題にアプローチできる筋力が足りず特にreversing筋の不足を痛感しました。 このときyu1hpaさんにも初めてお会いしました。 9月 Wani Hackaseの長い歴史の中で初の合宿として、和歌山の白浜に行きました。 🐊は正式な大学のサークルではないので、普段から最低限の活動しかしていなかったのですが、5・6年目にしてようやくそれらしいことができました。 なるべくスケジュールが合う日程を選んだのですが、結果として涼しくなりはじめたちょうどよいタイミングでした。3 初回だったので講義は1つだけでしたが、hi120ki氏が懇切丁寧なQiling講座をしてくれました。 練習問題も多くついており、かなり充実した講義でした。 そのあとはバーベキューもして夏の最後に夏っぽいことができました。 BBQ 翌日はアドベンチャーワールドで🐼を見ました。 最後に動物園に行ったのが遥か昔だったので、ほとんど初動物園という感じで年甲斐もなく楽しみました。 🐼 それと人生で初めてゲーミングモニターを買いました。 中学生のころからFPSをしていましたが、初めて60Hzよりリフレッシュレートの高いモニターを買いました。 マウスを高速移動させるとカーソルが60Hzのときより3倍くらい多く分身していてビックリしました。 ゲーム中は確かにぬるぬるしている感じはあるのですが、言うほど成績が良くなるかというとそういうわけでもなく… 10月・11月 論文執筆→あれ?ここちょっとおかしいな?→再実験→論文執筆→… をしていて、それ以外の記憶がありません。 そういえば某所でリサーチアシスタントをすることになり、10月中旬ごろに面接を受けました。 12月 上旬はTsukuCTFに参加して優勝しました。賞品がいろいろあるらしく楽しみ。 OSINTは結構苦手意識があるのですが、サクサク解けて楽しかったです。 また、10月に面接を受けた某所でのリサーチアシスタントも始まり、新しい研究テーマに取り組み始めました。 先月の論文執筆中に思ったのですが、やはり研究初期の手探り状態がとても好きです。...

2023-12-31 · 1 min · 115 words · Laika

SECCON CTF 2023 Final Writeup

はじめに 2023/12/23(土)- 2023/12/24(日)の2日間でSECCON CTF 2023の決勝戦が開催されました。 チーム southball 1 の4人で参加して国内3位でした🎉 思った以上の結果が出せて嬉しいです。 SECCON本戦に出場していました チームsouthballで国内3位でした! pic.twitter.com/CNyPbsQ2le — Laika (@ki4l_) December 24, 2023 チームメイトのwriteup Ciffelia: https://blog.ciffelia.com/article/seccon2023-finals southball: https://github.com/southball/ctf-writeups/tree/main/SECCON-CTF-2023-Final [Crypto] DLP 4.0 1import os 2import secrets 3import signal 4 5FLAG = os.getenv("FLAG", "FAKEFLAG{THIS_IS_FAKE}") 6 7 8if __name__ == "__main__": 9 signal.alarm(333) 10 p = int(input("What's your favorite 333-bit p: ")) 11 if not is_prime(p) or p.bit_length() != 333: 12 print("Invalid p") 13 exit() 14 order = p**2 - 1 15 x = secrets....

2023-12-29 · 9 min · 1864 words · Laika

TsukuCTF2023 Writeup

Wani HackaseでTsukuCTFに参加しました。 結果は1位でした。1 OSINTは普段面倒臭がって解かないんですが、これだけ出されると逆に解いてみたくなります。 とりあえず自分が関わった問題だけ書きます。 airport https://www.ana.co.jp/ja/jp/guide/inflight/service/domestic/dhc8-q400/ DHC8-Q400型機は、ANAグループ唯一のプロペラ機です。 らしいです。 就航していて割と町中にある空港を全部打ったら伊丹空港でした。 大阪に居るのに全然伊丹空港に行ったことがなく確信が持てませんでした。 fiction 最近強化されたGekkoくんの家です。2 3 これはVALORANTというゲームのマップで、sunsetというマップの一角です。 VALORANTはマップごとに緯度・経度みたいな設定があるので、それを調べて入力すると通ります。 VALORANTをやっている人にはラッキー問題です。 travel_with_tsukushi Air ArabiaとBatik AirとMalaysia Airlinesの機体がありますね。 Google Lens最強です。 Batik AirはBatik Air Malaysiaというのもあるらしいですが、関係性はよくわかりません。 とにかく国際便が多そうなので、これらの航空会社と関連性の高そうなマレーシアの大きい空港あたりっぽさそうです。 今回のOSINTはsubmitし放題なので投げてみると、クアラルンプール国際空港が該当しました。 TrainWindow 最近の写真は画質が良くて細部がよく見えます。 中央右寄りの黒い建物にTTCと書いてあるのでググります。 https://maps.app.goo.gl/XrMxi2vBWPyGv76T7 場所がそれっぽいですね。 あとは近くを走る線路上の画角が合う地点を探します。 grass_court テニスコートはほぼ情報がなく、画面中央を拡大すると見える謎のキャラクターと、左の木に隠れた電波天文台しか手掛かりがなく詰まっていました。 Ciffeliaが謎のキャラクターが奥州宇宙遊学館4のキャラクター「又三郎」であることを突き止めてくれたため、一気に解決しました。 どうやって見つけたんだろう。 sunset shioさんが何らかのイベント終了後に撮った写真から、場所ではなく時間を誤差1分で答える問題です。 しかも回答可能回数は3回。 無理じゃーんと思いましたが、場所さえ分かれば日没直前なのである程度の時刻はわかります。 とりあえずイベントを突き止めるためにshioさんのXを漁ります。 https://x.com/shio_sa1t/status/1698334659699192002 作問に追われていた時期がわかるので、だいたいこの直後あたりで作った問題な予感がします。(エスパー) 実際、上の示したポストの直後にセキュリティ・ミニキャンプ in 新潟 2023で講師をされていたことがわかります。 ここで写真を見返すと、西側の海の向こうに陸地が見えます。 新潟で撮影された写真であれば、西に佐渡島があるので、陸地が見えるのも頷けます。 新潟の写真であることにある程度確信が持てたところで、新潟の海岸あたりからそれっぽい場所を探します。 https://maps.app.goo.gl/ntPzN8f38J1MnsRh8 ありました。 場所が確定したので日時を絞ります。 イベントが終了したのは2023/09/10です。5 当日の新潟市の日の入りの時刻は18:01–18:02です。6 7 ただ、太陽はまだ1.5個分くらい水平線から出ているので、それを加味して撮影時刻を逆算します。 3回目の TsukuCTF23{2023/09/10_17:56} で通りましたが正確な時刻はわかりません。あぶね~! udon_2023 ひたすら調べるアプローチしかできませんでした。 Google Lensはもちろん、とり天・かしわ天・うどんあたりのキーワードで検索しましたが、そんな店は日本に無限にあります。 ただ、ねぎを卓上に置いているスタイルのお店をあまり知らないので、このタイプの提供をしているうどん店に気を張っていました。 あとSouthball曰く、お盆がないからセルフ形式じゃなさそう、とのこと。確かに。...

2023-12-10 · 1 min · 87 words · Laika

SDCTF 2023 writeup

I participated SDCTF 2023 as Wani Hackase and took 5th place. Thank you for organizing nice CTF events! PWN/money-printer This binary contains a format string bug and the flag is located at stack. I just send %i$08lx to reveal the flag as shown below. 1from toyotama import * 2 3_r = Socket("nc money.sdc.tf 1337") 4_r.sendlineafter("want?\n", -1000) 5 6_r.sendlineafter("audience?\n", " ".join([f"%{i}$08lx" for i in range(10, 16)])) 7_r.recvuntil("said: ") 8flag = _r.recvline().decode().split() 9 10flag = b""....

2023-05-11 · 11 min · 2315 words · Laika

RTACTF 2023 Writeup

RTACTF 2023にUZQueenで参加しました。1 起きたらちょうどRTACTFのpwnをやっていたので、布団でしばらく観戦したあとcryptoだけ参戦しました。 というか走っていた方々、手元を見られながらも解けるの本当にすごい ...

2023-03-21 · 2 min · 349 words · Laika

Wani HackaseのSlackにあるスラッシュコマンドの紹介

はじめに 本記事はCTF Advent Calendarの16日目の記事です。 昨日はkanonさんの「初心者がCTF始めるためにはどうすればいいのか(個人的偏見)」でした。 初めの解けない問題が多いうちはなかなか辛いですが、私もとにかく問題を解きまくっているときが一番成長を実感しますね。 今回は、Wani HackaseのSlackにある便利スラッシュコマンド(n=2)の紹介です。1 Wani Hackaseが設立したときに私は居なかったのですが、当時からSlackを使っていたようで今でもSlackを使っています。 チャンネル立てるのめんどくさい Wani Hackaseでは毎週のミーティングで、(だいたい週末にある)参加するCTFを適当に選んでいます。 私が参加登録をする係をしていて2、イベントごとに1つのSlackのチャンネル立てるのですが、これが結構めんどくさいです。 そこで、チャンネルを立てる作業を半自動化できるSlackのスラッシュコマンドを作って少し楽をしています。 次に実際のコマンドの動作の流れを紹介します。 スラッシュコマンド CTFtimeからイベントを取得する /event と、それ以外のイベント用の /custom_event があります。 /event CTFtimeからイベントを取得して、選んだイベントをもとにチャンネルを作ってくれます。 /event コマンドで起動します。 CTFtimeの直近10件くらいのUpcomingなイベントが表示されるので1つ選びます。 チャンネル名に使うイベント名の略称と、ログイン時に使用するID/PWを入力します。 PWはランダムな文字列を自動生成して最初から入力されているので、登録時にここからコピペもできます。(勿論ダミーです) submitすると #events チャンネルに、選択したイベントのチャンネルへのリンクが貼られます。 #2022_12_intent のように生成されたイベントチャンネルへのリンクを押すと、イベントの日時やリンク、ログイン情報などが投稿されたチャンネルへ飛びます。 日時は日本時間に合わせてあります。 /custom_event CTFtimeには掲載されていないイベント用のコマンドで、手動で入力したイベント情報をもとにチャンネルを作ってくれます。 Slackには時刻を入力できるフォームがあるのでやや便利です。 基本的に主催チームのタイムゾーン基準で開催時刻が記載されていて日本標準時への変換が面倒なことが多いので、タイムゾーンを指定することでそのまま日時を打てるようにしてあります。 /custom_event コマンドは全部手動で入力します。 CTFtime API /eventでCTFtimeのイベントを取得していますが、これにはCTFtimeのAPIを利用しています。 このページはリンクが見つけにくいので3そもそも存在に気づきにくいです。 丁寧なドキュメントがあるわけではないのでAPIが返すイベント情報によくわからないフィールドもありますが、適当にパースして雰囲気で使っています。 Discord版スラッシュコマンド Slackがフリープランの90日以前のメッセージ閲覧に制限をかけ始めたのでDiscordへの移行を見越してDiscord版のスラッシュコマンドも作っていました。 最近(?)のDiscordはモーダルウィンドウとかも出せるようになっているらしく、似たような物を作れると思っていたのですが、ドキュメントを読み解くのにかなり苦戦して途中で投げています…… やる気が再燃したら多分完成させると思います。 おわりに そんなに複雑なことをしている訳ではないのですが、かなり作業が楽になりました。 いっそ参加登録も自動化できたらいいなーとか考えていましたが、規格でもない限り無理なので諦めました…… 4 明日はArkさんが2022年のおもしろWeb問を紹介されるようです! 本当はExtended Hidden Number Problemの話を書きたかったのですが、師走は本当に忙しいので軽めの記事に落ち着きました ↩︎ いつの間にか参加登録マンになっていた ↩︎ そもそもメインのページからリンクが無いかもしれない? どうやって見つけたかも思い出せない🙃 ↩︎ 規格といえば、配布ファイル解凍時に「ファイルが散らばる」or「ディレクトリが出てくる」を定める規格があってもいいのにな~と常々思っています。 ↩︎

2022-12-16 · 1 min · 63 words · Laika

Srdnlen CTF 2022 Rat Pack

Srdnlen CTF 2022に参加していました。 解き損ねたpwnのRat Packという問題のメモです。 問題 典型的なheap問でよくある、メニューがあって操作ができるタイプの問題です。 書き方はかなりCっぽいですが、C++でコンパイルされています。 まずはGhidraとかで適当にreversingをしておきます。 rat構造体 この問題の中心となるratという構造体は以下のような構造になっています。(変数名は公式Writeup1で公開されているソースコードに準拠) 1struct rat { 2 struct rat** pack; // スタック上のstruct rat* packへのポインタ 3 void(*dialogue)(struct rat*); // base pointer 4 char name[16]; // ratの名前 5 int maxlen; // ratの名前の最大長 6} 7 8// |0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f| 9// +00h |pack-----------|dialogue-------| 10// +10h |name---------------------------| 11// +20h |maxlen---------| | 操作 この構造体に対して可能な操作は以下の通りです。ただし、packaddrはratを管理するサイズ16の配列です。 createRat() 1void createRat(struct rat** packaddr) { 2 // Allocate and initialize 3 struct rat* newRat = (struct rat*) malloc(sizeof(struct rat)); 4 newRat->maxlen = NAME_LEN; 5 newRat->dialogue = dialogue; 6 newRat->pack = packaddr; 7 name(newRat); 8 9 // Place rat in pack....

2022-10-09 · 3 min · 564 words · Laika

Google Drive上のファイルをwget経由でダウンロードする方法

共有リンクが https://drive.google.com/file/d/${FILE_ID}/view?usp=sharing のとき、 1wget "https://drive.google.com/uc?export=download&id=${FILE_ID}&confirm=t" で直接ダウンロードできる。

2022-09-26 · 1 min · 6 words · Laika

SECCON Beginners CTF 2022 writeup

6月4日の14時から24時間開催されていたSECCON Beginners CTF 2022にWani Hackase で参戦して5位でした。 普段のreversing担当が不在だったので、reversingとcryptoを担当しました。 WinTLS [reversing, 102 solved] Windowsというだけで忌避していたこの手の問題に、久しぶりに挑戦しました。 .rdataを漁っていると香ばしい文字列(c4{f..., tfb%...)があったのでxrefで参照元を見に行きます。 2つのスレッドで文字列を処理していて、flagのインデックスに応じて2つの文字列に振り分けているようです。 操作は単純なので逆の操作をしてあげると、文字列を復元できます。 1t1 = b"c4{fAPu8#FHh2+0cyo8$SWJH3a8X" 2t2 = b"tfb%s$T9NvFyroLh@89a9yoC3rPy&3b}" 3 4flag = [] 5k1, k2 = 0, 0 6for i in range(len(t1+t2)): 7 if i % 3 == 0 or i % 5 == 0: 8 flag.append(t1[k1]) 9 k1 += 1 10 else: 11 flag.append(t2[k2]) 12 k2 += 1 13 14print(bytes(flag)) Flag: ctf4b{f%sAP$uT98Nv#FFHyrh2o+Lh0@8c9yoa98$ySoCW3rJPH3y&a83Xb} ところで、UndefinedFunctionがめちゃくちゃ見にくい…… Recursive [reversing, 127 solved] 再帰で文字列をぐちゃぐちゃにしてあります。 少しreversingをすると文字列長が書いてあるので、処理前の文字列が処理後にどこに配置されるかが分かれば、逆操作で元に戻せます。...

2022-06-05 · 5 min · 1064 words · Laika

LINE CTF 2022 Writeup

I participated in LINE CTF 2022 as a member of Wani Hackase, and solved four crypto challenges. ss-puzzle Just play an XOR puzzle using the fact S[0] == b"LINECTF{". Some values are still unknown but predictable from the restored flag. 1def xor(a, b): 2 return bytes(i ^ j for i, j in zip(a, b)) 3 4with open("Share1", "rb") as f: 5 s1 = f.read() 6with open("Share4", "rb") as f: 7 s4 = f....

2022-03-26 · 7 min · 1380 words · Laika