参加して430ptで10位。前回は16位だったのでちょっと上昇。
ギリギリ10位に入ったのでTop10のグラフに名前が残った。

TsukuCTF 2023に参加したのでwriteupをば。TsukuCTFといえばOSINTなのにOSINT問やってません。
WireSharkで開いてみるとHTTP通信をしている。httpでフィルタするとこんな感じ。401 Unauthorized
が返ってきた後のリクエストでAuthorization
ヘッダにID/パスワード載せて送っている。
Flag: TsukuCTF23{2929b0u4}
ちなみに最速の正解者は44秒で回答してる。マジかよ。
tty.txt
を見てみると、/etc/uids
という見慣れないファイルがあることに気づく。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # chdir etc # ls -al total 34 104 sdrwr- 2 root 110 Jan 1 00:00:00 . 41 sdrwr- 7 root 70 Jan 1 00:00:00 .. 106 lxrwr- 1 bin 5778 Jan 1 00:00:00 as2 105 sxrwr- 1 bin 446 Jan 1 00:00:00 getty 107 sxrwr- 1 sys 2662 Jan 1 00:00:00 glob 108 sxrwr- 1 sys 1192 Jan 1 00:00:00 init 109 sxrwr- 1 sys 186 Jan 1 00:00:00 msh 110 s-rw-- 1 sys 272 Jan 1 00:00:00 passwd 111 s-rwr- 1 root 512 Jan 1 00:00:00 std0 112 s-rwr- 1 bin 2082 Jan 1 00:00:00 suftab 113 s-rwr- 1 sys 88 Jan 1 00:00:00 <strong>uids< /strong > |
"/etc/uids"
でググると印刷した紙をスキャンしたPDFが出てくる。ベル研って今ノキア傘下なんですね。
これは最初期のUNIXのマニュアル。これがフラグ。
余談だけど、フラグフォーマットがTsukuCTF23{xxx}
で指定されてるのにずっとxxx
をSubmitしててIncorrectになって時間溶かしまくった。あほ。
Flag: TsukuCTF23{UNIX}
他に使えそうな情報
ed
を使っている。昔はvi
やemacs
なんてなかったのだ。cd
ではなくchdir
を使っている。/usr/sys/maki.s
ググると同様にUNIXの情報が出てくる。cal
で1971年(最初のUNIXがリリースされた年)のカレンダーを表示している。ken
はケン・トンプソン。dmr
はデニス・リッチー (Dennis MacAlistair Ritchie)配布ファイルを同じフォルダにおいてmake
すると以下のエラーが出る。
1 2 3 4 5 6 7 | $ make cc main.o one.o -no-pie /usr/bin/ld : main.o: in function `main': main.c:(.text+0x8b): undefined reference to `a' /usr/bin/ld : main.c:(.text+0x92): undefined reference to `b' collect2: error: ld returned 1 exit status make : *** [Makefile:4: all] Error 1 |
main.o
とone.o
をIDAに食わせて見てみると、main.o
からはone_init, a, b, c
を参照しているのにone.o
のExportテーブルにはone_init, c
しかない。
main.o
とone.o
のIDAでのデコンパイル結果は以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | int __fastcall main( int argc, const char **argv, const char **envp) { int i; // [rsp+4h] [rbp-2Ch] __int64 v5; // [rsp+8h] [rbp-28h] __int64 v6; // [rsp+10h] [rbp-20h] __int64 v7; // [rsp+18h] [rbp-18h] __int64 v8; // [rsp+20h] [rbp-10h] v5 = 12LL; v6 = 11LL; v7 = 75LL; one_init(argc, argv, envp); for ( i = 0; v6 > i; ++i ) { if ( v5 > i ) ++v7; if ( v7 < i ) ++v6; ++v5; } v8 = v6 + v5 + v7; if ( v8 == b + a + c ) printf ( "flag is %ld\n" , v8); else puts ( "please retry" ); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | __int64 one_init() { __int64 result; // rax int i; // [rsp+0h] [rbp-4h] a = 12LL; b = 11LL; c = 75LL; for ( i = 0; ; ++i ) { result = b; if ( i >= (unsigned __int64 )b ) break ; if ( i < (unsigned __int64 )a ) ++c; if ( c < (unsigned __int64 )i ) ++b; ++a; } return result; } |
main
の中でone_init
の後にやっている処理はone_init
とまったく同じ処理であることがわかる。one_init
の処理は引数もなく関数外の値に依存せず常に同じ結果になるので、この関数だけ切り出して実行してみればa, b, c
の値がわかる。
1 2 3 | a = 23 b = 11 c = 86 |
Flag: TsukuCTF23{120}
配布されたファイルは以下の3つ
main.asm
内の命令をググるとどうやら6502
というCPUであることがわかる(冒頭に書いてあるのには気づかなかった!)
どうやらファミコンで使われていたものらしい。画像も見てみると8×8の画像が並んでいる感じで文字も含まれている。ということでこれはファミコンのプログラムだなと推測できる。
細かく処理を追っていきたかったが、時間がなかったのでCTFを解く思考に変えた。
どの画像をどういう順番で表示するかをどこかで指定しているはず。
→ざっと見てアセンブラコードにはなさそう
→下の方にdata
というデータ列がある
→これがそうに違いない
→各バイトの上4bitをY軸のインデックス、下4ビットをX軸のインデックスと考えるとちょうど文字のところにあたってよさそう
→解読するとTsukushi_Quest
になる(一番最後は文字じゃない画像なので無視)
Flag: TsukuCTF23{Tsukushi_Quest}
最初、TsukuCTF23{xxx}
の形で出てくると思っていたのでTsu
までうまくいった時点で勝利を確信したが、実際はちょっと違った。ゲームタイトルがTsu
で始まってなかったらもうちょっと疑いながらやって時間かかったかもしれない。
OSINT問は手を付けていなかったので難易度のほどはわからないけど、他の問題は易しめの難易度でよかった。でもWebは解けない。Writeupみて精進します。
去る6月17日、MINI Hardening 4 Returns #4.5@未来研究所に参加した。
何だかんだと参加レポートを書かずにいたのでやる気を振り絞って書いてみた。
遅いよ。知ってる。
参加して1問解きました。
続きを読むDomesticの方にいた。
いろいろあって書けてなくて今更感あるけどけじめとして。
チーム内で分担してて、私はJeopardy担当だったのでKing of the Hillの方は見ておらず何もわからない。
Jeopardyでは2問解いた。
OSINT楽しかった(ただし日本語に限る)。あとGoogleレンズ有能すぎる。
初代のVAIO Pro 11を7年間使っていたが、先日Bluetooth周りがおかしくなり、デバイスとしては認識されているのだが、Bluetooth機器を接続できなくなってしまった。
LenovoのE495も発注したしVAIO Pro 11も引退間近ではあるのだけど、北海道旅行に行くにあたりBluetoothマウスが使えないと不便だった。
そんな時Amazonを見てたら無線LAN/Bluetoothモジュールが2000円くらいであったので、じゃあいっちょやってみっか、ということで購入して換装したのである。
以下、写真では埃などが溜まって汚く見えるところもあるがご容赦いただきたい。
続きを読む