天才クールスレンダー美少女になりたい

チラシの表(なぜなら私はチラシの表にも印刷の上からメモを書くため)

小学生でも分かる斜方投射

yuyusuki.hatenablog.com

小5か小6のころ「天国へのカウントダウン」で灰原哀が落下時間の計算をしているシーンにかっこよさを感じ、そこから力学にハマった——
そういうことを4年半前のオタク自分語り記事で書いた*1。「45度で投げると飛距離が最大になることを自力で『証明』した」とも書いた。


しかし、数学の必須道具の数々を縛られた小学生——たとえば、当時の私は三角関数なんて知らなかった——に、そんなことができるのだろうか。
いや、数学の道具だけの話ではない。そもそも、中高の物理学をかじっていない小学生は運動方程式を知らないし、そもそも素朴な感覚ではない物理学的な「力」の概念すら持たない。科学史を紐解けば分かるが、ニュートン力学における力の概念は決して自明なものではない。アリストテレスほどの知性ですら、正しく「力」を理解することはできなかった。
私は科学の本を好んで読んでいたから慣性の法則くらいは知っていたが、その程度だ。


この記事は、当時の自分が考えたことを記憶の範囲内で書き留めたものである。あくまで記憶だから、ここで書かれているふぁぼん少年(12歳)は現実の12歳の私よりも天才になっているかもしれない。何かを読んで知ったことなのに、誤って自分で思いついたことだと記憶している——これは大いにありそうなことだ。



結論から言うと、私は当然ニュートンほどの天才ではないから、ニュートン力学を発明したわけではない。力の概念をまともに理解したわけでもない。
「力」というものを考えず、単なる運動として斜方投射を捉える——要するに、力学というよりは運動学(kinetics)の視点に立ったのだった。それも、かなり天下りな方法で。

*1:今読み返すと文章が稚拙で顔を覆いたくなるが、まあ黒歴史なんて生きてれば当然生まれ続けるものだから仕方がない。

続きを読む

NDCの各分類から1冊ずつ選び、偏りがないブックリスト(100冊)を作ってみた【後編】

前回のあらすじ

yuyusuki.hatenablog.com

「分野の偏りがないブックリスト」を作るべく、NDC(日本十進分類法)の分類1つにつき1冊を選ぶ誰得企画を始めてしまったふぁぼん。自分の全く知らない分野の本を1冊選ぶという意味不明な行為、その苦行を積み重ねた果てに見えるものとは——


前編から1ヶ月半以上空いてしまった。期末レポートとコミケに忙殺され死んでいたという理由は一応あるが……
楽しみにしてくれていた人(いるのか?)には本当に長らくお待たせして申し訳ないと言うほかない。



さて、前回は00から49まで終わったので、次は50だ。

続きを読む

ドイツ語学習日記 1〜10日目

最近気付いたのだが、私はどうやら文学部の西洋史学専修というところにいるらしい。学部学科の選択にはそれはもういろんなドラマがあったのだが(ない)、最近ようやく史学徒としての自覚が出てきつつある。

それで、どうも最近「いくらソ連史とはいえ西洋史やるならドイツ語読めた方がよくね?」ということに気付き始めた。指導教官(予定)も「ドイツ語やらんとなあ」って言ってたし。


やるか〜〜〜〜〜


8月3日

「これならわかるドイツ語文法」が届いた。

東外大の言語モジュールのドイツ語発音のやつにさくっと目を通した。一応基本は分かった気がしているのだが、正直単語は1つずつ発音をちゃんと調べた方が良さそうだ。どうせ語彙を覚える過程で辞書はめちゃくちゃ引かないと困るわけだし、そのついでに発音も毎回覚えていこうという感じ。

文法に関しては、まず人称代名詞と動詞の現在形の人称変化(規則動詞)をやった。一応全部覚えるつもりだけど、文献を読むだけなら三人称単数と三人称複数だけ忘れないようにしとけばOKみたいなセコいことを考えたり考えなかったりする。



これ以降、文法は「これならわかるドイツ語文法」(以降登場する無標の「文法書」はこの本のことである)と東外大の言語モジュールのドイツ語文法のやつを並行して利用することにする。

8月4日

とりあえずseinとhabenとwerden、-elnと-ten/denの現在形を覚えた。それと語幹が変化する基本動詞をいくつか。sprechenとかessenとかwissenとか。

平叙文なら定動詞の位置が「2番目」というのも覚えた。疑問詞なしの疑問文だと1番目らしい。疑問詞ありだと疑問詞の次だから2番目。

文法書に書いてた過去形とか過去分詞とかは、とりあえず規則的なやつが-te/ge-tということだけ覚えて次へ。具体的にどう使うのか分からんのに覚えろと言われても困るし……


文法書では次が分離動詞なのだが、名詞について何も知らないまま読んでも厳しいと思うので、とりあえず文法書3章へ。「一番レアなのは2格」という記述に驚愕するなどした。属格支配の単語が消滅するくらいなら分かるが、たとえばロシア語なら「〜の」という表現で生格を使わない方がレアなわけで、じゃあ所有の表現はどうやってるのだろうか。(どうも最近はもう全部vonで済ませるらしい。英語のofみたいなものということだろう)

それにしても、与格より属格の方がレアな印欧語が存在するなんて、世界はまったく広いとしか言いようがない。英語のように両方消滅するならまだ分かるけれど。



とりあえず冠詞(定冠詞と不定冠詞と定冠詞類)の格変化を覚える。マスターできた気は全然しないが、ドイツ語に触れていればそのうち嫌でも覚えるだろう。対格と主格が男性名詞だけ違うのはロシア語的感覚からしてもさほど違和感がない。(まあラテン語にしろロシア語にしろ女性名詞も対格と主格が違うけどね)



というわけでSpiegelの記事でも読んでみるか。もちろん複雑な文章は全然読めないので、シンプルなところだけということになるが。

www.spiegel.de

Amnesty International kritisiert Kriegsführung der Ukraine

主語がAmnesty International、定動詞がkritisiert(kritisierenの三人称単数形)、KriegsführungはKrieg(戦争)+Führung、さらにFührungは-ungなのでführenの名詞形かな。der Ukraineはdie Ukraineの2格。国名は基本無冠詞だと思っていたが、ウクライナは例外らしい。で、führenは「指導する」「遂行する」みたいな意味っぽいので、「アムネスティ・インターナショナルウクライナの戦争遂行を非難した」といった感じだろうか。Kriegsführungが無冠詞なのはよく分からない……

というか、文語っぽい文章なら普通に2格も登場するんだなあ。

Amnesty International hat der ukrainischen Armee vorgeworfen,

vorgeworfenはvorwerfenの過去分詞らしい。geってそんな途中で割り込むもんなんだ。まあ分離動詞だからそんなもんか(分離動詞まだやってないけど)。hatはhabenだから過去分詞と合わせて完了形(まだ完了形ちゃんとやってないけど)、vorwerfen「非難する」は非難する相手を3格で取るらしく、der ukrainischen Armeeはdie ukrainische Armeeの3格ということになる(形容詞の格変化まだやってないけど)。

durch ihre Militärtaktik Zivilisten zu gefährden.

durch + 4格「〜を通して」「〜によって」、ihreはihr「彼女の」の女性形(ここでは4格、「彼女」はdie ukrainische Armeeのこと)、Militärtaktikは女性名詞「戦術」。ZivilistenはZivilist「民間人」の複数形、zuは後ろに動詞を取って「〜すること」を意味するのでzu gefährdenは「危険に晒すこと」。vorwerfenの非難理由は4格らしいので、このzu不定詞(まだやってない)も本来は4格のはずだ。

つまり「アムネスティ・インターナショナルは作戦中に民間人を危険に晒したとしてウクライナ陸軍を非難した。」となる。……よね?

Kiew reagiert empört – russische Medien zitieren natürlich umgehend aus dem Bericht.

文法をいちいち書くのが面倒になってきたけど、reagierenとzitierenは現在形でいいのか。現在形ということをliteralに訳そうと「キーウは激怒して反応している——ロシアメディアたちは当然即座にレポートから引用している。」なんて書くとさすがに違和感があるんだけど……「過去に始まり今まで続いていることがら」という解釈でいいのか……?

ともあれ、ausの後は3格ということを覚えたし、今日はここまでにしよう。地味に現在完了形とかzu不定詞とか形容詞とか分離動詞とかの初出の文法がてんこ盛りだったし。

8月5日

何もしなかった。というかレポートと原稿がヤバいんだよな。

8月6日

分離動詞をちゃんと勉強した。あとは形容詞。定冠詞と不定冠詞も復習した。

地味に、形容詞けっこう覚えることあるな。もちろん格変化の基本パターンは既出なんだけど、その既出パターンから微妙に変えてくるのが逆に困る。

8月7日〜12日

何もしなかった。レポート、夏コミ原稿……

まとめ

3日間しか勉強してない。バカ?

NDCの各分類から1冊ずつ選び、偏りがないブックリスト(100冊)を作ってみた【前編】

はじめに

今年もついに、大学生協事業連合謹製のブックリスト「大学生のための100人100冊」がバズって絶賛されたり猛批判されたりする季節がやってきた。

https://www.univ.coop/pamph/pdf/book-100.pdf


まあ、選書がいいとか悪いとか、衒学的だとか、衒学的で大二病だとして何が悪いのだとか、相対性理論の元の論文を読む意味全然ないだろとか、分野が偏りすぎだろとか、論理哲学論考の原著はさすがに読ませる気ないだろとか、まあいろんな意見が出て当然だとは思う。

(量子力学などと違って、特殊相対性理論は元の論文を読んでも害はない気がする。自然科学と原文/古典主義は相容れないという事実を選者がちゃんと理解しているかは怪しいが、それはそれとして「古典*1! 天才の論文! 原著! 簡潔な説明! カッコイイ!」みたいな素朴な感情は否定しても仕方がないし、自然科学の理論を学ぶというよりアインシュタイン推しのドルオタみたいな気分で読むならいいんじゃないかな。自然科学の王道からしたらミーハーだけど、物理学を真面目にやる必要がないならミーハー上等だし、真面目にやる必要があるなら別途教科書を読めばいいというだけの話だ)



選書についての文句はともかく、分野の偏りについては「ブックリストって、どうしても偏りが出るもんじゃない?」という気持ちがある。

逆に、どうやったら偏りなく100冊選べるだろうか。いい感じに諸分野から同数ずつ、そんなことが可能なのだろうか。第一、それだとあまりにアカデミックな内容に偏るんじゃ?


100冊……100冊……100分野から1冊ずつ……10^2分野……


日本十進分類法 第2次区分表


おっと。こんなところに、世の中の本を100種類に分類したイケてる感じの分類表が落ちていた。その名も「日本十進分類法」、通称NDC。
図書館に行くオタクには説明不要だと思うが、行かなくても別に「世の中の本を段階的に分類する方法」という認識で全く問題ない。
第2次区分までの分類だとちょうど100に分類されることになる。



日本十進分類法」のWikipedia記事を読んでいたら「分類記号の上の分類構造と論理的な分類構造は一致しない」とか怖いことが書いてたけど、無視です無視。確かに、植物学と医学というスケールの全然違う分野が同列に並んでいるのは「各分野を公平に扱う」という趣旨的にやや問題含みだが、そこに突っ込むとこの記事が最初から終わるので。できれば自分の知らない分野が不均衡項目、自分の知ってる分野が縮約項目だと嬉しいのだが……まあ、そう上手くはいかないだろうなあ。





なんとなく地獄が見えている気もするが、レッツゴー。


ちなみに、分類の詳細は下記のサイトを参照した。10版(最新版)ってちゃんと書いてるから安心。

www.asahi-net.or.jp


具体的な本の分類は、基本的に国立国会図書館のものを参照した。図書館によってどう分類するか判断が分かれることがあるが、そういうときは国立国会図書館という権威に服従する運用。

*1:当たり前だが古典力学量子力学の話ではない

続きを読む

麻婆豆腐の作り方(怠惰編)

私は普段、「冷凍うどん2玉(400g)と生卵と冷凍唐揚げ2個」「ドライフルーツを少量入れたマイグラと牛乳、ソーセージとバナナ」「アルフォート4個とマックスバリュのドーナツ/バームクーヘン1個」「袋ラーメン」みたいな食事を1日2〜3食で回しているのですが(たぶん摂取カロリーの6割くらい冷凍うどん由来)、そういう修行僧風の食事ばかりだと少し飽きてしまいます。

そこで、私はたまに一念発起して、鶏肉や豚肉のこま切れなどを100g80円〜100円くらいで500g〜1kgとか調達して、もやしとかも大量に買って、数日間プロテインもやしフェスティバルを執り行うようにしています。キムチ鍋/火鍋、回鍋肉、コチュジャン炒め、豚キムチ、親子丼もどき、エトセトラエトセトラ。食費節約と食の楽しみの両方を達成できる完璧プランです。フェスティバルを万全に楽しむための秘訣ですが、もやしは豪勢に投入しましょう。

そういうときはフェスティバルなのでちゃんと白米を炊くのですが、いちいち冷凍したりも面倒なので、いつも10kg3000円の格安無洗米3合と押し麦0.5合を炊いて、24時間以内に2回の食事で食べ切るようにしています。1回に2合くらいは余裕です。そういうわけで2〜3ヶ月に1回くらい、米10kgを背負ってスーパーから家まで2km歩くエクストリームスポーツが開催されます。エントリーナンバー1、ふぁぼん。参加者は以上です。メトロの往復約350円を躊躇なく支払えるようなリッチになりたい今日この頃。



さて、無味乾燥な日々を彩ってくれるプロテインもやしフェスティバルに欠かせないのは肉です。しかし、安めの肉って案外なくて、家から1.5km〜2km離れたスーパーに行くか、大学から2km離れたスーパーに行くか、朝一番の近所のまいばすけっとで3割引きシールが貼られた消費期限本日の肉を買いに行くかしないと手に入りません。これが実にダルい。一番楽に見えるのは2kmも歩かなくていい「まいばすけっと」調達ルートですが、朝一番に起きて外に出る気力があって買い出しの余裕がある日、まずありません。朝から大学に行く日は買い出しする時間がなく、大学がない日は外に出たくない。午後から大学に行く日は朝に起きない。本当は3割引きシールなしでも100g100円ちょいなら全然高くはないのですが、私のゴーストが「朝に行けばもっと安かったのに……」と囁くので、十円単位で食費をケチりたがる私は一生買えません。詰みです。


……本当に詰みでしょうか。いえ、まだ諦める必要はありません。そういうとき、私は麻婆豆腐を作ります。木綿豆腐は近所のまいばすけっとで常時300g30円くらいで売っていますし、麻婆豆腐の素は西友に行ったときにアルフォートやマイグラとセットでまとめ買いしています。





そういうわけで、麻婆豆腐RTAふぁぼんチャートをご紹介します。レギュレーションは「きれいに完食」「洗い物と食費を最小限に」です。



麻婆豆腐の素の選択

これは地味に大事です。麻婆豆腐の素はいろいろ売っていますが、それぞれ細かいところで違いがあります。

私の選択は「丸美屋 麻婆豆腐の素 辛口」。西友で割と安く売っています。1パックの値段だと西友の肝入り「みなさまのお墨付き」の方が安いのですが、丸美屋は1パックで2食分(6人前)入っているので1食分換算だと安くなります。さらに、丸美屋はひき肉ビルトインタイプです。麻婆豆腐を作るような精神状態で生肉なんて管理が面倒な食材、いちいち買ってられないですからね。

丸美屋 麻婆豆腐の素 辛口
「ひき肉入りでカンタン」との心強い文字が踊る

辛口なのは、単に私が辛いの大好きというだけです。

パッケージの裏に書かれた作り方案内。今からガン無視されるとも知らず呑気な顔をしている。

豆腐の選択

なんでもいいです。たぶん絹豆腐は崩れやすすぎると思うので、できれば木綿豆腐の方がいいんじゃないでしょうか。一番安いやつで十分です。

豆腐をフライパンに投入し、切る

このチャートのRTAポイントその1です。



まず、豆腐と一緒にパックに入ってる謎の水は適当に捨てて、フライパンに豆腐をぶちまけます。どうせ切るので適当でいいです。

パックに入った豆腐豆腐をフライパンにぶちまける

ぶちまけたら、菜箸で雑にぐちゃぐちゃに切っていきます。包丁とかいちいち使ってられません。包丁だけならともかく、まな板を出さないといけないのが嫌です。台所に常時まな板が置けるスペースが空いてるならともかく、私の場合いつも飲んで洗った後の牛乳パックがめちゃくちゃ並んでてまな板を置けません。(紙パックは撮影用に床に落とし退避しました)

菜箸で雑に切られた豆腐

達人なら豆腐を手に乗せて包丁で切れるらしいですね。怖いので私はやりません。きれいに切れなくてもどうせ豆腐なんて作ってる間にぐちゃぐちゃになります。

麻婆豆腐の素を入れる

入れます。肉などをできるだけ残さずフライパンに出したいので、素が残ってる袋に軽く水を入れてシャカシャカしてフライパンにぶちまけます。

麻婆豆腐の素豆腐の入ったフライパンに麻婆豆腐の素を入れる

水を入れる

水を入れます。丸美屋公式の取説には180mLとか書いてますが、経験上60mLくらいで十分です。
水を減らすことで調理時間を短縮します。

軽く加熱する

取説には「ひと煮立ちさせる」と書いていますが、別に沸騰しなくてもいいと思います。私は調理中にTwitterを見ているので、いつの間にか沸騰していることが多いです。(火事にだけは注意しましょう)


トロミ粉を入れる

このチャートのRTAポイントその2です。

トロミ粉の袋にも料理方法の指示が書いてある。UXがよい。まあガン無視するけど。


取説には「大さじ2(30mL)の水で粉を溶き、その液を少しずつフライパンに入れ、混ぜる」と書いています。
この行程を考えた人は、おそらく液を入れる容器くらい全然洗える精神マッチョを想定しているのでしょう。私は精神マッチョじゃないので、こんな洗い物をみすみす増やすような真似は絶対にしません。



まず、火を止めます。とろみ粉の袋を開け、少しずつフライパンに直接投入していきます。投入しては混ぜ、投入しては混ぜを繰り返し、均一に混ざるようにします。

恐れず直接行け。ネタバレだけど全然問題ない。

これだけです。火を止めてちゃんと混ぜれば、別にダマになったりもしません。

加熱する

水の量がもともと少ないので、とろみが一瞬でつきます。焦がさないように、フライパンの中で菜箸を振り回しましょう。

麻婆豆腐を菜箸で勢いよくかき混ぜるしばらく加熱すると完成
第n回 菜箸ふり回し大会inフライパン

初めに入れた水が少ないので、一瞬で水が飛びます。

完成

しばらく加熱したら完成です。

実食

このときは2食目だったので、炊飯器の釜をテーブルに置いてそこから直接ご飯を食べます。保温を切った直後の釜は手で触って運ぶには熱すぎるので、調理前にスイッチを切って炊飯器内で冷ましておくとよいでしょう。箸もいちいち新しく出さず、調理に使った菜箸をそのまま流用します。洗い物を増やすと面倒なので。

献立: 釜入りご飯と麻婆豆腐


菜箸で食べるとなると、スプーンと違い、どうしても皿に麻婆豆腐が残ってしまいます。そこで、ご飯を投入して全部食べ切ります。台湾まぜそばの追い飯の要領です。

麻婆豆腐が残っている皿皿にご飯を入れる


こういうペースト状の食べ物って、フライパンにもけっこう残りますよね。でも、麻婆豆腐なら冷えるとだいぶ固まって取りやすくなります。冷えてはいますが、これはこれで美味しいです。初めに水を入れすぎているとうまく固まらないので、そういうときは数十秒くらいフライパンを加熱して水分を飛ばしましょう。

少し麻婆豆腐が残ったフライパン残った麻婆豆腐を箸できれいに取った後のフライパン



ごちそうさまでした。

麻婆豆腐がきれいに完食された後の皿
食べ物を大切に。

【全文公開】東大生猪瀬舞概念【#FindOurStars vol.1】

この記事は、同人誌『#FindOurStars vol. 1』に寄稿した記事のweb再録です。当該同人誌の公開猶予期間(1年間)が過ぎたため、自ブログで公開します。


ブログ向けに書式等は整えていますが、本文は一切編集していません。今の状況に合わせて記述を更新したりも一切していないので、2021年6月に書かれた文章ということを念頭に読んでいただければ幸いです。
当時の私は理科一類に所属していて、理系の必修と最後のチキンレース死闘を繰り広げながら文転の決意を叫んだりしていたのです。もはや隔世の感があります。


たった1年前の文章なのに、今読むとテンションがいろいろ違いすぎて「ウッ……」となるところもあるのですが、あるがままを受け入れ、諦めて無編集で投稿します。今の視点で痛かろうが拙かろうが、いろんな意味で転機になった思い出深い文章なので。これそのまんま上げて大丈夫かなあ……



なお、記事内で言及のあるhaxibami先生のSS「#地理は地学」は、今のところ公開されていません。公開され次第リンクを追記します。
どうしても今すぐ読みたい場合、残部は少ないですが通販などで『#FindOurStars vol.1』を買うか、あるいは国会図書館でご覧ください。関西館と東京本館の両方に置いてあります。めちゃくちゃいい小説なので……



utkiraracircle.github.io

https://www.melonbooks.co.jp/detail/detail.php?product_id=1182458www.melonbooks.co.jp


関連記事:

yuyusuki.hatenablog.com


続刊のvol.2には、竹麻呂さんによる「都市工学徒猪瀬舞概念」が載っています。この記事で扱った内容のうち、都市工学(科)にフォーカスした論考となっています。
vol.2には私もナナチカでミステリを書いて寄稿しました。よろしければ『#FindOurStars vol.2』もお買い求めください。例に漏れず、国会図書館にもあります。

blog.takemaro.com

yuyusuki.hatenablog.com

utkiraracircle.github.io

https://www.melonbooks.co.jp/detail/detail.php?product_id=1193339www.melonbooks.co.jp

続きを読む

TSG LIVE! 8 ライブCTF参加記

要約

五月祭(東大の学祭の1つ)の企画であるTSG LIVE! 8のライブCTFに赤チームの一員として参加し、椅子を温めて終わりました。

www.youtube.com

前回のライブCTF参加記(だいぶコピペしました)

yuyusuki.hatenablog.com

TSG LIVE! とは

私の所属サークルである東大のコンピュータ系サークルTSGが、学祭などの折に実施しているプログラミング生放送です。今回で8回目になります。
今年も去年や一昨年同様に全ての企画がフルリモートでした。

参加記

椅子を温めて終わりました。


web問が1問しかなく、他の問題も後々覗いてみたものの、無理だったので泣きました。

Problem on fire

とりあえず、問題を見ます。

package.jsonmain: "index.js"って書いてたので、index.jsを探す……が、ない。
で、よく見たらサーバ側のコードがなく、firestore完全依存SPAでした。

import {createApp} from 'https://cdn.jsdelivr.net/npm/vue@3.2.33/dist/vue.esm-browser.js';
createApp({
	data() {
		return {
			flag: '',
		};
	},
	async mounted() {
		const auth = firebase.auth();
		const {user} = await auth.signInAnonymously();
		const token = await user.getIdToken();
		const uid = user.uid;

		const db = firebase.firestore();
		await db.collection('users').doc(uid).set({admin: false});

		try {
			const flag = await db.collection('flags').doc('flag').get();
			this.flag = flag.get('value');
		} catch (e) {
			this.flag = e.toString();
		}
	},
}).mount('#app');


↓ firestore.rules

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{uid} {
      // 自分のユーザー情報を書き込めるのは自分のみ
      allow read, create: if request.auth.uid == uid && !request.resource.data.admin;
      // 一度作ったユーザー情報を編集できるのはadminだけ
      allow update: if request.resource.data.admin;
    }
    match /flags/flag {
      // flagを読めるのはadminだけ
      allow read: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
    }
  }
}


コードをさくっと眺めてみると、ユーザを作る段階でadmin属性をfalseにしています。クライアント側で。
そしてfirestore.rulesを読む限り、adminになるとflagが読めるようです。



……ザルすぎるだろ。クライアント側でadmin属性指定できるのヤバすぎ。え、これadmin:trueにすれば解けるんです?
一応firestore.rulesを眺めてみたが、私がfirestore全然分かってないのはともかく、なんとなく読む感じマジでそれで良さそうに見えますね。


……(フラグを)奪っちゃうよ!? 奪っちゃうよ!?

ちなみに、結果的にこれが死亡フラグになりました。

ふぁぼん発狂編

で、実際にwebに公開されてるウェブサイトを軽く改竄して実行すればflagが転がりこんでくるはず……なんですが、「軽く改竄して」ってどうすればいいのか全然分からない……

  1. /へのリクエストの時点でレスポンスのHTMLを改竄する
  2. サーバの静的ファイルを全部ダウンロードしてlocalhostで動かしてみる
  3. JSで行われているリクエストを手作業でやってみる

このあたりの解決策がなんとなく思いつきました。

1つ目は、どうやってレスポンスを改竄するか分からず死亡。ブラウザのアドオンからはHTTPの通信に介入するAPIが(権限を与えられれば)使えるから、理論上は可能のはずです。ただ、それを可能にするアドオンを探そうとしたが、見つかりませんでした。たぶん私の探し方が悪い。

2つ目は、途中までは上手くいった気がします。wgetでfirebase SDKスクリプトごとまるっと落としてきて、admin:falseをadmin:trueに修正したファイルを用意して、pythonのhttp.serverをコマンドラインで実行してアクセスしてみました。
location.host等が違うせいでエラーを吐かれる可能性も考えましたが、幸いそこは大丈夫だったようです。

で、結局この方法ではなぜか永遠に権限エラーを食らいました。なんか、どこかミスってたんでしょうね……
ちゃんとadmin:trueなリクエストが飛んでいってるのは確認したはずなんですが、ネットワークのやり取りが複雑すぎて把握できていなかった可能性があります。

3つ目は、なんかfirestoreに接続するときのフローが複雑で挫折しました。どう考えても暖かみのある手作業curl芸をする想定になっていません。まずSDKからアクセスする前提ですし、APIがグチャグチャです。エンドポイントのURLは長いし、なんかoptionメソッドで謎のリクエストが飛んでるし、なんかよくわからんエラーが飛んでくるし……


というわけで、90分くらいずっと試行錯誤しているうちに終わりました。
あまりに上手くいかなさすぎて、「adminをtrueにしてリクエストするのは第一段階で、もう1つか2つ何らかの攻撃手法を取らないと解けないのでは?」とすら思ってました。





……マジでadmin:trueにするだけだったってマジ?????????????????????????????


追記 [2022/05/16]

後で人のwriteup読んで気付いたんですが、コンソールで普通にリクエストを初めから(認証の段階から)やり直せばflag取れたんですね。馬鹿が代……
これだったらページ編集する必要すらない。

まとめ

これだからCTF初心者はダメなんだ


前回(TSG LIVE! 7)に続き「チームメイトはめっちゃ問題通してる、自分は1問も解けずギブアップ」が2連続となるとさすがに泣きたくなりますが、まあこれくらいで挫折してもしゃーない(関西弁で「仕方ない」の意)し、ゆるりとやっていきます。いやでもこれで通せなかったのはかなり泣きたいな……前回の「そこそこ難しい問題で、あと一歩及ばず」と違い、今回は自明問題を通せなかったので……



終わった後の感想戦で「まあ、ちょっと難しかったかもですね〜」ってめっちゃフォローされてたけど、これ解けないのマジのカスなのでカスでしたね。やるだけ問題でやるだけなのが分かってるのに「やる」ができないお前の人生。
あのときの私は「firestore使ったことなくて〜」とかほざいてましたけど、firestore使ったことないのは全然関係なくて、単純にCTFをやり慣れていないのが敗因でした。たぶん作問陣もそんなとこで詰まる人間がいると思ってない。