Automotive CTF Japan決勝に参加した&writeup

9/13(金)に行われたAutomotive CTF Japanの決勝に「TeamONE」のメンバーとして参加してきた。結果は2位で、米国デトロイトで開催される「Automotive CTF 2024」の決勝に参加できることに。

決勝の結果
続きを読む

Shield Stoneを観戦した

クラウドファンディングを開始して即日目標金額を達成していたShield Stone。支援の特典である現地観戦権で6/22に開催された競技会を観戦してきた。
やっぱりレポートを書く取り掛かりが遅い。はい。

続きを読む

大和セキュリティ勉強会: AWSインシデント対応入門 に参加した

4/6に神戸であった、大和セキュリティの勉強会「AWSインシデント対応入門」に参加してきたというレポ。

続きを読む

ZANSINを使っておうちでMINI Hardening v4を楽しもう

Black Hat Asia 2024 ArsenalでMINI Hardeningの方々によるZANSINが公開された。

なんと、ZANSINを使うことでMINI Hardeningのv4を自宅で動かすことができちゃう。
しかも環境が手元にあるので何度も繰り返し実施して腕を磨くことができる。やったぜ。MINI Hardening v4についてはこちらを参照。

というわけで手元で動かしてみた。

続きを読む

TsukuCTF 2023 writeup #TsukuCTF

TsukuCTF 2023に参加したのでwriteupをば。TsukuCTFといえばOSINTなのにOSINT問やってません。

web – basic

WireSharkで開いてみるとHTTP通信をしている。httpでフィルタするとこんな感じ。
401 Unauthorizedが返ってきた後のリクエストでAuthorizationヘッダにID/パスワード載せて送っている。

httpでフィルタしてみるとわかりやすい

Flag: TsukuCTF23{2929b0u4}

ちなみに最速の正解者は44秒で回答してる。マジかよ。

速すぎんだろ…

misc – what_os

tty.txtを見てみると、/etc/uidsという見慣れないファイルがあることに気づく。

# 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が出てくる。ベル研って今ノキア傘下なんですね。

"/etc/uids"でググった結果

これは最初期のUNIXのマニュアル。これがフラグ。
余談だけど、フラグフォーマットがTsukuCTF23{xxx}で指定されてるのにずっとxxxをSubmitしててIncorrectになって時間溶かしまくった。あほ。

Flag: TsukuCTF23{UNIX}

他に使えそうな情報

  • ファイル編集にedを使っている。昔はviemacsなんてなかったのだ。
  • cdではなくchdirを使っている。
  • /usr/sys/maki.s ググると同様にUNIXの情報が出てくる。
  • calで1971年(最初のUNIXがリリースされた年)のカレンダーを表示している。
  • kenケン・トンプソンdmrデニス・リッチー (Dennis MacAlistair Ritchie)

misc – build_error

配布ファイルを同じフォルダにおいてmakeすると以下のエラーが出る。

$ 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.oone.oをIDAに食わせて見てみると、main.oからはone_init, a, b, cを参照しているのにone.oのExportテーブルにはone_init, cしかない。

one.oのExportテーブル

main.oone.oのIDAでのデコンパイル結果は以下の通り。

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;
}
__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の値がわかる。

a = 23
b = 11
c = 86

Flag: TsukuCTF23{120}

rev – title_screen

配布されたファイルは以下の3つ

  • character.bmp
  • main.asm
  • main.cfg

main.asm内の命令をググるとどうやら6502というCPUであることがわかる(冒頭に書いてあるのには気づかなかった!)
どうやらファミコンで使われていたものらしい。画像も見てみると8×8の画像が並んでいる感じで文字も含まれている。ということでこれはファミコンのプログラムだなと推測できる。

character.bmp

細かく処理を追っていきたかったが、時間がなかったのでCTFを解く思考に変えた。
どの画像をどういう順番で表示するかをどこかで指定しているはず。
→ざっと見てアセンブラコードにはなさそう
→下の方にdataというデータ列がある
→これがそうに違いない
→各バイトの上4bitをY軸のインデックス、下4ビットをX軸のインデックスと考えるとちょうど文字のところにあたってよさそう
→解読するとTsukushi_Questになる(一番最後は文字じゃない画像なので無視)

Flag: TsukuCTF23{Tsukushi_Quest}

最初、TsukuCTF23{xxx}の形で出てくると思っていたのでTsuまでうまくいった時点で勝利を確信したが、実際はちょっと違った。ゲームタイトルがTsuで始まってなかったらもうちょっと疑いながらやって時間かかったかもしれない。

感想

OSINT問は手を付けていなかったので難易度のほどはわからないけど、他の問題は易しめの難易度でよかった。でもWebは解けない。Writeupみて精進します。

MINI Hardening 4.5に参加した / Hardeningに参加しよう

去る6月17日、MINI Hardening 4 Returns #4.5@未来研究所に参加した。

何だかんだと参加レポートを書かずにいたのでやる気を振り絞って書いてみた。
遅いよ。知ってる。

続きを読む