4ensiX

4ensiX

Forensics専門でなければ、CTFはDFIRの勉強にほとんど役立たないことをを知ったこの頃

NeverLAN CTF 2020 PCAP/Forensic writeup

今回は、2020/02/09 00:00 JST — 2020/02/12 08:00 JSTに行われた NeverLAN CTF 2020のPCAPとForensicジャンルのwriteupをお届けする。

ctftime.org

とてもとっつき易く基本を学べるので、何も分からない状態で初めても大丈夫そうなCTF。今言っても意味ないけれど、オンラインCTFの入門としてとてもおススメ。

PCAP

このジャンルの問題は全て、writeupを書くほどのものか怪しいレベルの簡単さであったのでほんの少し触れるだけ。

FTP

FTPのパケットキャプチャファイルが与えられる。FTPはデフォルトで暗号化されていないので丸見えというお話。ストリームを眺めていればflag{*}が見える。
flag: flag{sftp_OR_ftps_not_ftp}

Teletype Network

問題のまんまtelnetのパケットキャプチャファイルが与えれる。こちらもデフォルトでは暗号化されていないので通信が見える。
flag: flag{telnet_1s_n0t_secur3}

Unsecured Login

httpの通信でログインしているので通信みえちゃうというお話。ストリームを眺めているとpassword入力にflagがある。
flag: flag{n0httpsn0l0gin}

Unsecured Login2

ちゃんとパケットの中身を見ていないので「Unsecured Login」と違いが分からなかった。同じようなところにflagがある。
flag: flag{ensure_https_is_always_used}

PCAPジャンルはパケットキャプチャファイルにstrings | grep でflag取れた。

Forensic

Forensicのキソのキソを学べる問題。

Listen to this

You hear that?
*Your flag will be in the normal flag{flagGoesHere] syntax
-ps This guy might be important

-ZestyFE

まず「HiddenAudio.mp3」が与えられる。このファイルは音声ファイルであり、「HiddenAuidio」という名であるからには何か音声が隠されているのだろうという推測でaudacityで開く。ただ波形をよく見ても分からなかったので、ctfでありがちな音声のスペクトログラム表示してみる。スペクトログラムを表示して一番初めのあたりを拡大してみると何か見える。

f:id:Zarat:20200304231451p:plain
スペクトログラム表示の始めを拡大
何かモールス信号ぽい気がするので、変換サイトで見てみる。
f:id:Zarat:20200304231609p:plain
モールス信号ぽいやつを変換してみた
「FLA」とくれば、次は「G」となりそうな気がする。方向性は良さそうだが見づらいので、スペクトログラムを弄りたい。
波形を眺めたり、音を聞いているとボーカルを除去すればもう少し見やすくなる気がしてきた。
[エフェクト]->[Plug-in]->[ボーカルの低減と分離]を選択。そのまま「OK」を選択してみる。f:id:Zarat:20200304232002p:plain 凄い見やすくなったのでこれを変換にかける。変換してみると、flag{*}を何度も繰り返していることが分かる。
flag: flag{ditsanddahsforlife}


[メモ]もしかして、mp3はbinwalkに引っかからない?

Look into the past

We've captured a snapshot of a computer, but it seems the user was able to encrypt a file before we got to it. Can you figure out what they encrypted?

Your flag will be in the normal flag{flagGoesHere} syntax.

-N30

与えられた.tar.gzのファイルを解凍する。

$ ls look_into_the_past/
bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

マシンのルートディレクトリぽい。問題文から/home/Userに何かありそうな気がする。

$  ls *
Desktop:

Documents:
flag.txt.enc  libssl-flag.txt.enc

Downloads:

Music:

Pictures:
doggo.jpeg

Public:

Videos:

/home/User以下のディレクトリをみてみると、明らかに怪しい「flag.txt.enc」というファイルがある。.encとなっているということは暗号化されていそうな気がする。

$ file Documents/* # /home/User
Documents/flag.txt.enc:        openssl enc'd data with salted password
Documents/libssl-flag.txt.enc: openssl enc'd data with salted password

やはりこのファイルは暗号化されている。opensslを使って復号するには、パスワードが必要になる。一瞬パスワードクラックを考えたが、このパスワードはどこかに在りそうな気がした。なぜならこの問題は「Look into the past」である。過去を見る。また、今回のような暗号化はコマンドラインで行われることが多い。よって「.bash_history」に何か手がかりがありそうな気がする。

$ ls -al
合計 52
drwxr-xr-x 9 1000 1000 4096  2月  9 01:24 .
drwxr-xr-x 3 1000 1000 4096  2月  9 01:24 ..
-rw-r--r-- 1 1000 1000  349  2月  7 03:33 .bash_history
-rw-r--r-- 1 1000 1000  864  2月  7 03:34 .bashrc
-rw-r--r-- 1 1000 1000  672  2月  7 03:34 .profile
-rw-r--r-- 1 1000 1000   37  2月  7 03:33 .vimrc
drwxr-xr-x 2 1000 1000 4096  2月  9 01:24 Desktop
drwxr-xr-x 2 1000 1000 4096  2月  9 01:52 Documents
drwxr-xr-x 2 1000 1000 4096  2月  9 01:24 Downloads
drwxr-xr-x 2 1000 1000 4096  2月  9 01:24 Music
drwxr-xr-x 2 1000 1000 4096  2月  9 01:24 Pictures
drwxr-xr-x 2 1000 1000 4096  2月  9 01:24 Public
drwxr-xr-x 2 1000 1000 4096  2月  9 01:24 Videos
$ cat .bash_history
cd Documents
openssl enc -aes-256-cbc -salt -in flag.txt -out flag.txt.enc -k $(cat $pass1)$pass2$pass3
steghide embed -cf doggo.jpeg -ef $pass1
mv doggo.jpeg ~/Pictures
useradd -p '$pass2'  user
sqlite3 /opt/table.db "INSERT INTO passwords values ('1', $pass3)"
tar -zcf /opt/table.db.tar.gz /opt/table.db
rm $pass1
unset $pass2
unset $pass3
exit

「.bash_history」に暗号化時のコマンドがしっかり残っていた。これに従って復号化すればいいのだが、パスワードは複数の場所に散りばめられているようである。なので一ずつ見つけていく。
まずは、「doggo.jpeg」に隠された「$pass1」から見ていく。「steghide」は画像ファイルにテキストなどを埋め込むステガノグラフィツールである。おそらく、「doggo.jpeg」さえあれば「$pass1」は見つけられる。

$ steghide extract -sf doggo.jpeg -xf pass1.txt
$ cat pass1.txt
JXrTLzijLb

展開時にパスワード入力が求められるが、パスワードは不要であった。
次に、追加したuserのパスワードが「$pass2」であるようなので、「/etc/shadow」をチェックする。

$ cat ../../etc/shadow # from /home/User
(snip)
user:KI6VWx09JJ:18011:0:99999:7:::

最後に、SQLiteのデータベースに「$pass3」が入っているようなので、「/opt/table.tar.gz」を解凍して「table.db」を「DB browser for SQLite」で確認する。

f:id:Zarat:20200304234220p:plain
「DB browser for SQLite」で「table.db」を確認
以上で、「flag.txt.enc」を復号するためのパスワードが揃った。

$ openssl enc -d -aes-256-cbc -salt -k JXrTLzijLbKI6VWx09JJnBNfDKbP5n -in Documents/flag.txt.enc  -out flag.txt
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
$ cat flag.txt
flag{h1st0ry_1n_th3_m4k1ng}

flag: flag{h1st0ry_1n_th3_m4k1ng}

Open Backpack

There's more to this picture

Your flag will be in the normal flag{flagGoesHere} syntax.

-NullB0n3s

まず次のようなファイル「openbackpack.jpg」が与えられる。

f:id:Zarat:20200207104745j:plain
Open Backpackで与えられたファイル
ここで、ファイル名や問題から「openbackpack.jpg」に他のファイルが含まれているような気がするのでbinwalkでチェックする。

$ binwalk openbackpack.jpg

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, JFIF standard 1.01
30            0x1E            TIFF image data, little-endian offset of first image directory: 8
328           0x148           JPEG image data, JFIF standard 1.01
9703          0x25E7          Copyright string: "CopyrightOwner> <rdf:Seq/> </plus:CopyrightOwner> <plus:Licensor> <rdf:Seq/> </plus:Licensor> </rdf:Description> </rdf:RDF> </x:"
9737          0x2609          Copyright string: "CopyrightOwner> <plus:Licensor> <rdf:Seq/> </plus:Licensor> </rdf:Description> </rdf:RDF> </x:xmpmeta>  "
139267        0x22003         Zip archive data, at least v2.0 to extract, compressed size: 15928, uncompressed size: 695647, name: flag.png
155339        0x25ECB         End of Zip archive, footer length: 22

思った通りいくつかファイルが含まれおり、それらのファイルの一つに「flag.png」を含むzipファイルを確認した。ここからファイルをカービングするのは、このままbinwalkでも、foremostでも宗教上の理由とかで色々あると思う。自分はddで。

$ dd if=openbackpack.jpg bs=1 skip=139267 of=output.zip
16094+0 レコード入力
16094+0 レコード出力
16094 bytes (16 kB, 16 KiB) copied, 0.0448263 s, 359 kB/s
$ unzip output.zip
Archive:  output.zip
  inflating: flag.png  

f:id:Zarat:20200304235242p:plain
flag.png
flag: flag{AlWaYs_cH3cK_y0ur_sTuFF}

色々キソを見直せるCTFだった