SecHack部隊が旅費を稼ぐためのCTFことTsukuCTFに、チーム98ptsでフェネック(ハイエナ)として参加し、チームとしては1位でした。 OSINT中心のCTFで真面目にOSINTに取り組んだのは人生初だと思います。*1
他のもふもふたちのwriteup
- 開催前
- [Reversing] GradpaMemory
- [Hardware] DefuseBomb
- [OSINT] Attack of Tsukushi
- [OSINT] Money
- [OSINT] FlyMeToTheTsukushi
- [OSINT] inuyama082
- [OSINT] douro
- [OSINT] PaperJack
- [OSINT] Robot
- [OSINT] Flash
- [OSINT] TakaiTakai
- [OSINT] uTSUKUSHIi
- [OSINT] moon
- [OSINT] what_time_is_it
- [OSINT] station
- [OSINT] hub_been_stolen
- [OSINT] FlagDM
- おわりに
開催前
去年の問題を見てHardwareやReversingで何が出ているかを確認して予習しました。 それから、運営の人(おもにs氏)が報告しているCVE、触れている技術スタックなども調べました。
あとは運営の人間がここ1年以内くらいで行っている場所・住んでいる場所などをチェックしました:
- 北海道
- 福岡
- 京都
- 東京
- 名古屋
[Reversing] GradpaMemory
問題文: 祖父からお誕生プレゼントが入った鍵付きの箱とa.outという名前のファイルをもらった。これを開けるには数字を入力すれば良いらしい。ヒントはこのファイルの計算結果が鍵であること、このファイルは1971年に冷蔵庫ほどもあるミニコンピューターで作成された実行ファイルであると言われた。 フラグ形式:Nは数値である。 TsukuCTF22{N}
謎のファイルが渡されます。
$ file a.out a.out: PDP-11 old overlay $ hexdump -C a.out 00000000 05 01 34 00 00 00 00 00 00 00 00 00 01 0a 02 0a |..4.............| 00000010 81 0a 82 0a c1 0c c1 0c c1 0c c1 0c c2 0c 42 60 |..............B`| 00000020 ff 01 70 61 73 73 77 64 20 69 73 20 69 6e 20 52 |..passwd is in R| 00000030 32 20 00 0a |2 ..| 00000034
PDP-11というのは昔のミニ(大嘘)コンピュータだそうです。
passwd is in R2
という文字列があるので、プログラム実行後のR2レジスタの中身がフラグになりそうです。
調べるとpdp11dasmという逆アセンブラがあります。 この手のREADMEがただのテキストファイルのツールは動かないがちですが、今回は動いてくれました。
; ; pdp11dasm version 0.0.3 ; disassembly of ../a.out ; 000000: 000405 br 14 ; .. ; 000002: 000064 invalid opcode ; 4. 000004: 000000 halt ; .. 000006: 000000 halt ; .. 000010: 000000 halt ; .. 000012: 000000 halt ; .. ; 000014: 005001 clr r1 ; .. 000016: 005002 clr r2 ; .. 000020: 005201 inc r1 ; .. 000022: 005202 inc r2 ; .. 000024: 006301 asl r1 ; A. 000026: 006301 asl r1 ; A. 000030: 006301 asl r1 ; A. 000032: 006301 asl r1 ; A. 000034: 006302 asl r2 ; B. 000036: 060102 add r1,r2 ; B` 000040: 000777 br 40 ; .. ; 000042: 060560 071563 add r5,71563(r0) ; pass 000046: 062167 064440 add (r1)+,64512 ; wd i 000052: 020163 067151 cmp r1,67151(r3) ; s in 000056: 051040 bis (r0),-(r0) ; R 000060: 020062 005000 cmp r0,5000(r2) ; 2 ..
clr
はゼロクリア、inc
はインクリメント、asl
は左1ビットシフト、add
は加算だそうです。 これを実行するとR2には18が入るはずです。
最初TsukuCTF{22}
が一生受理されずに悩んでいましたが、あとでフォーマットがTsukuCTF22
でした連絡が来て解決しました。 シフト演算ができなくなったかと思って、あやうく義務教育をやり直すべく幼稚園に入園届を出すところでした。
[Hardware] DefuseBomb
問題文: つくしくんは疑似時限爆弾解除競技の訓練として、3つの時限爆弾に関するそれぞれのデータ(DefBom1,DefBom2は回路図、DefBom3は基板製造データ)をもとに、3つそれぞれの爆弾解除を行う。各時限爆弾はタイマー(limit_timer)がON状態になったとき、爆弾(bomb)に電流が流れて爆発する。 切断可能な線はデータ内で示されており、DefBom1では1から6の番号が振られたハサミ、DefBom2 では1から5の番号が振られたハサミ, DefBom3 では1から5の番号が振られた矢印である。示された切断可能な線のうち、1つの線を切れば limit_timer が ON 状態になっても爆発せず解除に成功する。しかし、残りの線は切っても limit_timer が ON 状態になる、もしくは切断した瞬間に爆発する。 フラグ形式はTsukuCTF22{ここにDefbom1からDefbom3において切断した番号を順に書く}といった形です。例として、切断した線の番号が DefBom1 では"3"、DefBom2"では"1"、DefBom3 では"5"であった場合フラグ形式はTsukuCTF22{315}となります。 この問題は3回までフラグを提出できます。タイプミス等が無いように注意してフラグを提出して下さい!!
信号雷管(に電流を流すまでの嫌がらせ用の)の回路が、最初の2つは回路図の画像で、3つ目は基盤のガーバーデータで渡されます。 各回路のうちいくつかの配線には番号があり、そのどれかを切断すればスイッチがONになっても起爆しないらしいです。
1つ目:
bombと書いてある赤い部分が接地されていると仮定し、スイッチがONになった際にbombに電流が流れないようにします。 それならbombの手前の線を切れよとずっと思っていましたが、そこは巧妙に隠されているのでしょう。
TC74HC08APはANDゲートで、TC74HC02APはNORゲートです。 発火部分から逆算するとわかりやすいです。
したがって、U3の9ピンとスイッチをつなぐ4番の配線を切れば解除できます。
2つ目:
bombの抵抗がIRF3205のR_DSよりも十分に大きいと仮定する*2と、トランジスタQ7,Q8のD-Sに電流を流すためにQ7,Q8両方のG-S間に電圧をかければ良いことが分かります。
まずQ7ですが、3番配線がつながっている限り、つねにG-S間に電圧がかかるので問題ないように見えます。 3番に電流を流すにはQ5,Q6のD-Sに電流が流れない必要があります。 よく見るとQ6は常にG-S間の電位差が0なので、1番と2番の配線は切っても切らなくても変わりません。*3
次にQ8ですが、こちらも5番配線がつながっている限り、つねにG-S間に電圧がかかります。 5番に電流を流すにはQ3,Q4のD-Sに電流が流れない必要があります。 4番を切るとQ3,Q4ともにG-S間の電位差がなくなるので、5番に電流が流れてくれます。
したがって、4番の配線を切ればbomb側に電流は流れません。
3つ目:
上の図はガーバーデータをKiCadで開いて見やすくしたものです。
TC74HC00APはNANDゲートです。 これも1つ目の回路と同様にbomb側から逆算します。
つまり、1ピンとスイッチをつなぐ2番の配線を切れば解除できます。
TsukuCTF22{442}
[OSINT] Attack of Tsukushi
問題文: つくしくんはある観光地を調査した際に訪れた駅で写真を撮影した。果たしてこの写真が撮られた駅はどこだろうか? フラグは駅の郵便番号(ハイフンなし)を入力して下さい e.g. 東京駅の場合は郵便番号が100-0005なのでフラグは TsukuCTF22{1000005} となります。
「進撃の巨人 銅像 駅」などで調べるとたくさんヒットしました。
TsukuCTF22{8770013}
[OSINT] Money
問題文: どこ? フラグは写真が撮影された場所の郵便番号(ハイフンを除く)を入れて下さい。例えば撮影された場所が東京都庁の場合、郵便番号は163-8001なのでTsukuCTF22{1638001}となります。
Google Lensで調べると、金閣寺だと分かりました。久しく行ってないな〜。
TsukuCTF22{6038361}
[OSINT] FlyMeToTheTsukushi
問題文: つくし君は、はるばる飛行機で愛するパートナーのもとへやってきました。 ここはどこの空港かわかりますか?
ガラスにお店の文字が反射しています。
「空港 takenoya」で調べると福岡空港がヒットしました。ctf4bの時かな?
TsukuCTF22{福岡}
[OSINT] inuyama082
問題文: つくし君は愛知県犬山市にデートに来た時の思い出の写真を見返しています。 おいしそうな写真を見つけ、おやつが食べたくなりました。 写真のおやつの名前を教えてください。 ※フラグの形式はTsukuCTF22{XXXXXXX ver.XXXXXX}です。
Google Lensで調べると、こちらのブログがヒットしました。 犬山よあけやというお店らしいです。
お店のホームページからメニューを見ると、「和チーズケーキ ver.煎茶パウダー」というカフェメニューが近そうでした。
TsukuCTF22{和チーズケーキ ver.煎茶パウダー}
[OSINT] douro
問題文: 旅行中のつくし君は迷子になってしまったようです。うつむいています。送られてきた写真から場所を特定できますか? ※フラグの形式はTsukuCTF22{緯度_経度}です。ただし、緯度経度は十進法で小数点以下五桁目を切り捨てたものとします。
OSINTのプロことst98さんが地面の特徴的なタイルを抽出してくれていました。
目力で字を読むと、「よいほモール」と書いてあることが分かります。 三重県松坂駅にあるショッピングモールらしいです。
周辺にはこのようなタイルが並んでいる通りがあり、ぱっと見ただけではどこかは分かりません。 写真端に道路の中央にある斜線みたいなやつ*4があり、またタイルの手前側になんか排水口のやつ*5があります。 それらをヒントにGoogle Mapでぶらぶら歩いていると、それっぽいところを見つけました。
ここの緯度経度をGoogle Mapで調べてフラグの完成です。
TsukuCTF22{34.5763_136.5313}
[OSINT] PaperJack
イケメンのつくしくんは訪れている場所の写真をSNSに投稿したところ、ストーカーに特定されてしまった。ストーカー曰く「好きなゲームと新聞がコラボしたときの広告にこの場所が映っていたのを思い出した」とのことだった。 フラグは写真が撮影された場所の郵便番号(ハイフンを除く)を入れて下さい。例えば撮影された場所が東京都庁の場合、郵便番号は163-8001なので TsukuCTF22{1638001}となります。
写真奥におみくじがあることから、お寺とか神社であることが推測できます。 さらに、肝心な文字が消されていますが、何か看板が立っています。
目力で読むと「(重要?)文化財 本堂」と書いてあることが分かります。
手前にしだれ桜か柳っぽいのがあるので、「文化財 本堂 しだれ」で画像検索すると、こちらがヒットしました。
道成寺というお寺で間違いなさそうです。
TsukuCTF22{6491331}
[OSINT] Robot
問題文: つくし君がロボット見学に訪れた施設はどこ? フラグ形式は TsukuCTF22{施設名} となります。施設名の表記は、その施設の英語版ホームページの表記に従います。
中国語を少し勉強していたのでこの問題は楽でした。
まず簡体字なので中国本土です。 そのまま「”大学生创新能力培养基地” “机器人”」で調べると、中国語の記事がヒットします。
読むと次のような文章があります。
华南理工大学船舶与海洋工程系非常注重培养学生的创新能力,设有华南理工大学船舶海洋工程科学与技术大学生创新能力培养基地。
「设有」が一瞬「没有」に見えて「ないんかい!」となりますが、「设有」なのであります。
TsukuCTF{TsukuCTF22{South China University of Technology}}
[OSINT] Flash
問題文: つくし君からマイコンボードを借りたら、このマイコンを使って実験を行ったホテルと部屋番号がわかってしまった!! マイコンのフラッシュメモリから読みだしたデータを渡すので、ホテル名と部屋番号を特定してください。 ※フラグの形式はTsukuCTF22{XXホテル&XXXXXXXXXXXX_部屋番号}です。
謎のバイナリファイルが渡されます。問題文いわくマイコンのフラッシュメモリらしいです。
stringsにかけるとESP32らしく、arduinoか何かでしょうか。 マイコンのフラッシュメモリからホテルの部屋番号が分かるということなので、使っていたWi-FiのSSIDが残っていることが推測できます。
ホテルの部屋番号はだいたい3桁か4桁で、階数とその階での部屋番号になっています。 ラスベガスでもなければ1つの階にたかだか30程度の部屋しかないので、最初の2桁は手動総当りできます。
そこで、「10」「11」「12」「20」「21」「22」のような文字列でgrepし、SSIDっぽいものを探すと、「31」でAPAがヒットしました。
$ strings Flash.bin | grep 31 apa-316-2428 apa-316-2428 apa-316-2428 apa-316-2428 294315 apa-316-2428
実際のところこれは部屋番号ではなかったのですが、結果オーライ。
フラグ形式がTsukuCTF22{XXホテル&XXXXXXXXXXXX_部屋番号}
になっていることから、「アパホテル&リゾート」であることまでは分かるのですが、いろいろ試しても通りません。 じたばたしているとOSINTの神様ことst98さんが、316は部屋番号ではなくホテル番号であることを教えてくれました。
わーい。
TsukuCTF22{アパホテル&リゾート〈両国駅タワー〉_2428}
[OSINT] TakaiTakai
問題文: 日本の町は美しい。撮影地を答えてください。 フラグはこの建物の開業日(YYYY/MM/DD)です。たとえば、東京スカイツリーの開業日は2012年5月22日なので、フラグはTsukuCTF22{2012/05/22}となります。
風景の写真ですが、かなり解像度が小さいです。 右端にタバコみたいなカラーリングをしたビルがあります。
このビルをGoogle Lensで選択すると、ヒットしました。3LDKで3億3000万円らしいです。興味がある方はいかがですか?
次にGoogleマップで航空写真を見て、写真が撮られた建物の方角を特定します。 中央左の要塞みたいなマンションや、右側の森森した箇所から方角が分かるので、さらに左下手前のまるっとしたビルを探します。
あったぁ。渋谷ソラスタから撮ったようです。 「渋谷ソラスタ 開業」で調べると2019年3月29日と出てきました。
TsukuCTF22{2019/03/29}
[OSINT] uTSUKUSHIi
問題文: 私は世界一可愛い猫ちゃんの写真を見つけました。この猫ちゃんの生年月日を答えてください。 フラグフォーマットは TsukuCTF22{YYYY/MM/DD} です。
かわいいいいい〜〜〜???
でもこんなん分かるか???と思って他の問題を見ていましたが、他に解けそうな問題が少なくなってきたところで帰ってきました。 画像上部に注目しました。
猫カフェは入りづらいのであまり履修していませんが、今まで行った中ではかなり奇妙な部屋であることに気づきました。 まず、壁とソファが黄色です。ソファが黄色はとにかく、壁まで黄色なのは何か統一している感があります。
次にソファの横に謎の段差があります。 小さい猫カフェは普通の家でやっているため、なかなかこういう段差は見られません。 キャットウォークなどにしては床と色が揃っているので、割と大きな店かと思われます。
そこで、「黄色 猫カフェ」と調べると、「猫カフェモカ」というものがヒットします。 一応ホームページを見ると、近畿に近そうなソファがあるようです。
このソファがある京都河原町店のスタッフを確認すると、目の色が同じ猫がいました。かああわああいいいいいいいぃいっぃぃいっぃぃい。
スコティッシュフォールドなのかブリティッシュショートヘアなのかマンチカンなのか怪しかったですが、スコティッシュフォールドでした。
TsukuCTF22{2021/09/16}
[OSINT] moon
問題文: 月の満ち欠けは美しい。この場所はどこだろうか。 ※フラグの形式はTsukuCTF22{緯度_経度}です。ただし、緯度経度は十進法で小数点以下五桁目を切り捨てたものとします。
Lensで調べても分からんな〜と思っていたらOSINTの申し子ことst98さんがツイートを3つも発見してくれました。
吉田憲司 on Twitter: “石畳に月の満ち欠け http://t.co/NDg7QRRT” / Twitter
大和国のさちこ。 on Twitter: “天龍寺と渡月橋。中之島から渡月橋へ行く手前の石畳に月の満ち欠けの石があった! https://t.co/uwpui2NWfg” / Twitter
M.Aono%?モモモ on Twitter: “嵐山中の島公園渡月橋あたりのここ、月の満ち欠け仕込んであったんかよ https://t.co/KwUSCUxoMr” / Twitter
最後のツイートが決め手で場所が決まりました。
かなりじっくり見ないと見逃しちゃいそうです。
TsukuCTF22{35.0120_135.6778}
フラグだけ強奪しました。
[OSINT] what_time_is_it
問題文: 手前の電車は何時何分に発車するでしょうか? フラグ形式はTsukuCTF22{xx:xx}で、24時間表記です。 提出回数制限: 5回
Google LensするとJR徳島駅のうずしおという電車であることが分かります。
この列車のうち、該当画像と同じものの時刻表を調べたところ、「09:23」「12:23」「15:23」「18:30」の4つがありました。 提出回数が5回制限なのとhardタグが付いていたので、こんなに簡単なのか不安で提出をためらっていました。 しかし、空の色から12か15時かなと思ったので、ひとまず15時の方で試したら通りました。
TsukuCTF22{15:23}
[OSINT] station
問題文: つくし君はとある駅で友達を待っています。さて、つくし君はどこの駅にいるでしょうか? TsukuCTF22{駅名(漢字、平仮名、英語可)} 注意 駅名はWebページで公開されている表記を利用してください 「駅」という漢字はFlagに含めないでください 数字が含まれる場合は全て半角英数字にしてください 例えば、六本木一丁目駅が答えなら、TsukuCTF22{六本木1丁目}、TsukuCTF22{ろっぽんぎ1ちょうめ}、TsukuCTF22{Roppongi itchome}が答えになります 提出回数は10回までです。
見始めた頃にはOSINTの天才ことst98さんが札幌市営地下鉄東西線であることまで特定していました。
ここがどう見ても「西11丁目」なのですが、提出しても弾かれます。 これで無限時間悩んでいたのですが、最終盤にあることに気づきます。
フラグフォーマットが違いました。終わり。
TsukuCTF22{西11丁目}
[OSINT] hub_been_stolen
問題文: D社の新入社員が、社内の機密データを持って蒸発してしまった! 電話もメールも全くつながらない。唯一残されていたのは、消し忘れたと見られる本人の公開鍵のみ。この鍵の持ち主を特定してほしい。
authorized_keys
が貰えて、SSHの公開鍵が2つ入っています。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGOfu3zT1ZBW+XWBsTJQAuk5+BXwfvbqkoH8vC8vqbp2BWjsRHBX8SSlP2i0YyN03PUkXkqRXpl8O4iBF8pL1msNA6kSOpB6kiYb84w8qY/MwZMocO7vklvwbwdSw9YLD05sKTXmWuvjBoGPYU+FYKcxxtNimP8emWByILrLrhuRSsD2hRLaK2c5CxC3IxWcfPFOP1v9QqFDiKaEaJ3vjUUfQPR7NCGleaTy2tv/cvgTD983yXSrIsai57R5b4ILptyy8Y+K4ElZd5B+7H4rZqY4h2I5SHBj0Y3ZTppB8PXZOD00JLPgycZCT49ipIXiemS/5WMWH1NWc26fmg7yTD ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8MXOXvmOSPz+ZZDF/6aoYRwujqvYdlkVzfb249jNSx1YEqpJXGOdTJT+A1troE8rYfTNMRb6i7HGzAf+YYVQrY/IwXalbI2xMXDahjN7vwZzxAmoypY59k3IFYjYuZGCK9OMDX+Na4xSPbkmvSkPm1i30hnYznLwp+8oPIoqPc7DY1VR/UAh3fIBNDx6aoQgEIbMTeDyIy4YNPRWvKK0NzvvpwQ9aaU81k7hMtm6/oU6PNfmgsZBsDztlzidEjS60Ydrenk9lFx9FwVdXhL5HG/2rOWsZmd9QwDHKNt8VaSupzW6I757YnUBiIvH5U9C48zm+6BDcnbpUVB6bnzZ5
鍵が2つあるので、まさかありえないとは思いつつもNのgcdを取ったら素因数分解できました。謎crypto問あるある。
秘密鍵が取れたところで使い道は分からないのですが、とりあえずPEM形式にしておきました。
OSINTの始祖ことst98さんが、問題タイトルからGitHubが関係してるんじゃないかと指摘してくれました。
そこで、まず疑ったのが鍵や素数がコードとしてGitHubに上がっていることです。 しかし、いくら素数や鍵の一部を検索してもリポジトリは見つかりませんでした。 しばらく意味わかんね〜〜〜、となります。
突然、よくTwitterに「#OSINT」とか「Recon Tips」みたいな個人的に心底どうでもいいお話が流れてくるのを思い出し、秘密鍵持ってるときにできるOSINTテクでもあるんじゃないかと思い、Twitterで検索してみました。
ありがとうグラサンロン毛おじさん。 確かにSSHでGitHubにテスト接続するとき、ユーザー名が表示されます。
$ ssh -T [email protected] -i ./a Hi Ann0nymusTsukushi! You've successfully authenticated, but GitHub does not provide shell access.
あ り ま し た 。
[OSINT] FlagDM
問題文: 謎の人物からDMが届きました。よく見ると脅迫文ののようです。DMを送った人物を調査して、この人物が使用している他のWebサービスを見つけてください。 注1: この人物は複数のWebサービスを使用していますが、そのいずれかのプロフィールにフラグが埋め込まれています。 注2: 画像に含まれているURLはこちらです。 https://bit.ly/3Ekih5M
この問題は、OSINTの魔人ことst98さんがほとんど解きました。 最初の方は何やってるかよく分からないですが、たぶん
という手順で特定しています。
ひよこ大回転の動画しかなく、この問題が最後まで残っていました。
しばらく眺めていると gross_poem
という名前がYoutubeチャンネル名っぽくないと思いました。 そこで、インスタやfacebookなどで同じユーザー名を探せるツールを調べたところ、sherlockというツールがあるらしいです。
これに投げるといくつか見つかりました。
$ python sherlock.py gross_poem [*] Checking username gross_poem on: [+] Instagram: https://www.instagram.com/gross_poem [+] Trakt: https://www.trakt.tv/users/gross_poem [+] XXXX [*] Results: 3 [!] End: The processing has been finished.
最初と最後*6はfalse positiveですが、Traktというサービスにはユーザーがいて、そこにフラグがありました。 :thinking_face:
TsukuCTF22{M4ny_0S1N7_700ls_3x157}
おわりに
せっかくSecHackの技術力があるメンバーが運営しているのであれば、次回は是非pwnとかrevとかcryptoとかを出してほしいです m(> <)m
あとフラグフォーマットをTsukuCTF{...}
に変えてほしいです m(> <)m
ところで国内上位5チームには景品が人数分貰えるとのことなのですが、ルールには
チーム上限は 98 人とし、猫や犬などはチームメンバーに含むものとします。
とあります。当然98人5チームで参加して勝てば490人分の景品が貰えるということでしょう。太っ腹!
*1:AVTokyoのOSINT CTFみたいなのを1問を手伝ったことはあったけど、結局st98さんが解いてくれた。
*2:bomb側に抵抗を挟むと場合によっては発火しないと思うので、bomb側にもトランジスタをかますなど工夫が要りそう
*3:これが原因で上側の回路が虚無になっており、あまりに不安だったのでこの回路は念の為シミュレータで動作確認しました。命大切に。
*4:無免許露呈
*5:語彙力幼稚園児露呈
*6:最後のはMetaMaskがフィッシング警告を出してきたので載せないでおく
原文始发于sushi:TsukuCTF 2022のWriteup