4ensiX

4ensiX

FPと言ったものはFPを選んだが表示はTPになっていることに気づいた。

Find My Pass - HackTM CTF 2020 Forensic writeup

引き続きHackTM2020 Forensics Writeupをお届け。
前回記事 zarat.hatenablog.com

Find My Pass

問題文

I managed to forget my password for my KeePass Database but luckily I had it still open and managed to get a dump of the system's memory. Can you please help me recover my password?

Author: Legacy

https://mega.nz/#!IdUVwY6I!uJWGZ932xab44H4EJ-zVAqu6_UWNJcCVA4_PPXdqCyc
https://drive.google.com/open?id=1hUlGqJZYgbWaEu7w0JnPMqgYdFr8qVJe
password: eD99mLkU

リンクがいつまで生きているか分からない。
まず、与えられたファイル「HackTM.zip」でzipファイルだと思うので解凍する。

$ unzip HackTM.zip
Archive:  HackTM.zip
   skipping: HackTM.vmem             need PK compat. v5.1 (can do v4.6)

何故か解凍できなかった。zipファイルのフォーマット確認して直すところから始まるのかぁと思ったが、調べてみるとzipのフォーマットにバージョンがあって、unzipでサポート外のバージョンもあるらしい。

unzip で "need PK compat. v5.1 (can do v4.5)" と言われて解凍できない件 - CUBE SUGAR CONTAINER

ならば7zipを使えばいい。

$ 7za x HackTM.zip

7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=ja_JP.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz (806E9),ASM,AES-NI)

Scanning the drive for archives:
1 file, 374180992 bytes (357 MiB)

Extracting archive: HackTM.zip
--
Path = HackTM.zip
Type = zip
Physical Size = 374180992


Enter password (will not be echoed):
Everything is Ok

Size:       2147483648
Compressed: 374180992

解凍して出てきたのはメモリダンプファイルなので、volatilityで解析していく。

$ volatility -f HackTM.vmem imageinfo
Volatility Foundation Volatility Framework 2.6
INFO    : volatility.debug    : Determining profile based on KDBG search...
          Suggested Profile(s) : Win7SP1x86_23418, Win7SP0x86, Win7SP1x86_24000, Win7SP1x86
                     AS Layer1 : IA32PagedMemoryPae (Kernel AS)
                     AS Layer2 : FileAddressSpace (/root/CTF/HackTMCTF2020/Find_Mypassword/writeup/HackTM.vmem)
                      PAE type : PAE
                           DTB : 0x185000L
                          KDBG : 0x82b7cb78L
          Number of Processors : 2
     Image Type (Service Pack) : 1
                KPCR for CPU 0 : 0x80b96000L
                KPCR for CPU 1 : 0x807ca000L
             KUSER_SHARED_DATA : 0xffdf0000L
           Image date and time : 2019-11-11 20:50:09 UTC+0000
     Image local date and time : 2019-11-11 12:50:09 -0800

とりあえず、pstreeを見る。

$ volatility --profile=Win7SP1x86_23418 -f HackTM.vmem pstree
Volatility Foundation Volatility Framework 2.6
Name                                                  Pid   PPid   Thds   Hnds Time
-------------------------------------------------- ------ ------ ------ ------ ----
 0x85fff1e0:wininit.exe                               432    360      7     92 2019-11-11 20:49:22 UTC+0000
. 0x86513a70:lsm.exe                                  512    432     12    166 2019-11-11 20:49:22 UTC+0000
. 0x86438c00:services.exe                             484    432     25    270 2019-11-11 20:49:22 UTC+0000
.. 0x864e8030:dllhost.exe                            1820    484     21    205 2019-11-11 20:49:26 UTC+0000
.. 0x8670f030:svchost.exe                             876    484     36    587 2019-11-11 20:49:23 UTC+0000
... 0x86b3ad20:dwm.exe                               1956    876      5     77 2019-11-11 20:49:25 UTC+0000
.. 0x86abf1a0:vmtoolsd.exe                           1676    484     11    199 2019-11-11 20:49:25 UTC+0000
... 0x86a8f030:cmd.exe                               3372   1676      0 ------ 2019-11-11 20:50:09 UTC+0000
.... 0x86611870:ipconfig.exe                         3472   3372      0 ------ 2019-11-11 20:50:09 UTC+0000
.. 0x86606030:svchost.exe                             664    484     16    379 2019-11-11 20:49:23 UTC+0000
... 0x86dccc08:WmiPrvSE.exe                          3228    664     14    330 2019-11-11 20:49:34 UTC+0000
... 0x85ee9a38:WmiPrvSE.exe                          1748    664      9    145 2019-11-11 20:49:26 UTC+0000
... 0x85861678:mobsync.exe                           2260    664      8    163 2019-11-11 20:49:55 UTC+0000
.. 0x86bc6978:svchost.exe                             388    484      7     97 2019-11-11 20:49:26 UTC+0000
.. 0x86a4ed20:VGAuthService.                         1600    484      4     87 2019-11-11 20:49:25 UTC+0000
.. 0x8673ea38:svchost.exe                             928    484     34    804 2019-11-11 20:49:23 UTC+0000
.. 0x867b1aa0:svchost.exe                            1064    484      7    124 2019-11-11 20:49:23 UTC+0000
.. 0x869f87d8:spoolsv.exe                            1308    484     16    300 2019-11-11 20:49:24 UTC+0000
.. 0x866d5d20:svchost.exe                             812    484     27    577 2019-11-11 20:49:23 UTC+0000
... 0x86763d20:audiodg.exe                           1024    812      6    133 2019-11-11 20:49:23 UTC+0000
.. 0x86c47030:msdtc.exe                              2292    484     15    160 2019-11-11 20:49:27 UTC+0000
.. 0x86a58360:svchost.exe                            1468    484     34    352 2019-11-11 20:49:24 UTC+0000
.. 0x86a0cac0:svchost.exe                            1344    484     24    338 2019-11-11 20:49:24 UTC+0000
.. 0x86869030:svchost.exe                            1184    484     23    437 2019-11-11 20:49:23 UTC+0000
.. 0x8672f7f8:svchost.exe                             968    484     50    860 2019-11-11 20:49:23 UTC+0000
.. 0x86caf6f8:SearchIndexer.                         2636    484     14    612 2019-11-11 20:49:32 UTC+0000
... 0x86d1fd20:SearchProtocol                        2904   2636      7    265 2019-11-11 20:49:33 UTC+0000
... 0x86d4d030:SearchFilterHo                        2928   2636      5     89 2019-11-11 20:49:33 UTC+0000
.. 0x86c77030:VSSVC.exe                              2428    484      7    125 2019-11-11 20:49:27 UTC+0000
.. 0x86da3030:svchost.exe                            3076    484     11    360 2019-11-11 20:49:33 UTC+0000
.. 0x86a8cc38:taskhost.exe                           1580    484     11    223 2019-11-11 20:49:25 UTC+0000
.. 0x860e3030:dllhost.exe                            2108    484     18    216 2019-11-11 20:49:26 UTC+0000
.. 0x86661ad0:svchost.exe                             748    484     12    337 2019-11-11 20:49:23 UTC+0000
.. 0x86cf7030:wmpnetwk.exe                           2728    484     20    473 2019-11-11 20:49:32 UTC+0000
.. 0x86e844f0:WmiApSrv.exe                           3716    484      7    122 2019-11-11 20:49:47 UTC+0000
. 0x864b4d20:lsass.exe                                504    432     12    811 2019-11-11 20:49:22 UTC+0000
 0x863c5d20:csrss.exe                                 380    360      9    632 2019-11-11 20:49:22 UTC+0000
. 0x86ec7588:conhost.exe                             2520    380      0     30 2019-11-11 20:50:09 UTC+0000
 0x84a41800:System                                      4      0     97    410 2019-11-11 20:49:19 UTC+0000
. 0x8625aa30:smss.exe                                 280      4      5     30 2019-11-11 20:49:19 UTC+0000
 0x86b468c0:explorer.exe                             1988   1908     33    727 2019-11-11 20:49:25 UTC+0000
. 0x86ae4400:vmtoolsd.exe                            1428   1988     10    217 2019-11-11 20:49:26 UTC+0000
. 0x86e1b810:KeePass.exe                             3620   1988     10    251 2019-11-11 20:49:46 UTC+0000
. 0x86ae4710:vm3dservice.ex                          1396   1988      5     43 2019-11-11 20:49:26 UTC+0000
 0x86556030:winlogon.exe                              540    424      6    127 2019-11-11 20:49:22 UTC+0000
 0x85fffd20:csrss.exe                                 440    424     10    220 2019-11-11 20:49:22 UTC+0000

ここで気になったのは「Keepass.exe」
今回の問題文からKeepassのデータベースを使って何かするような気がする。ここで、「Keepass.exe」とは何か参考資料をどぞ。

KeePassツールでパスワードを安全・確実に管理する − @IT

次に「Keepass.exe」がどうやって使われたか見たいのでcmdlineでチェック

$ volatility --profile=Win7SP1x86_23418 -f HackTM.vmem cmdline | grep KeePass.exe
Volatility Foundation Volatility Framework 2.6
KeePass.exe pid:   3620
Command line : "C:\Program Files\KeePass Password Safe 2\KeePass.exe" "C:\Users\HackTM\Desktop\Database.kdbx"

どうやら、「Database.kdbx」をデータベースファイルとして利用しているらしい。なので、「Database.kdbx」を取り出せるか試す。

$ volatility --profile=Win7SP1x86_23418 -f HackTM.vmem filescan | grep Database.kdbx
Volatility Foundation Volatility Framework 2.6
0x000000007da1a248      2      0 RW-rw- \Device\HarddiskVolume2\Users\HackTM\AppData\Roaming\Microsoft\Windows\Recent\Database.kdbx.lnk
0x000000007df37c88      2      0 R--r-- \Device\HarddiskVolume2\Users\HackTM\Desktop\Database.kdbx
$ volatility --profile=Win7SP1x86_23418 -f HackTM.vmem dumpfiles -Q 0x000000007df37c88 -D ./
Volatility Foundation Volatility Framework 2.6
DataSectionObject 0x7df37c88   None   \Device\HarddiskVolume2\Users\HackTM\Desktop\Database.kdbx
$ ls
HackTM.vmem  file.None.0x86551160.dat
$ mv file.None.0x86551160.dat Database.kdbx
$ file Database.kdbx
Database.kdbx: Keepass password database 2.x KDBX

「Database.kdbx.lnk」はショートカットファイルなので無視。「Database.kdbx」を取り出すことができた。
ここで、このデータベースをチェックするには「master password」が必要である。次はこの「master password」の捜索をする。 どこにあるのかよく分からなかったので、とにかく色々volatilityコマンドを試したところclipboardに何らかの文字列を見つけた。

$ volatility --profile=Win7SP1x86_23418 -f HackTM.vmem clipboard -v
Volatility Foundation Volatility Framework 2.6
Session    WindowStation Format                 Handle Object     Data                                           
---------- ------------- ------------------ ---------- ---------- --------------------------------------------------
         1 WinSta0       0xc009L               0x7017b 0xfe9a05a8                                                 
0xfe9a05b4  1c 00 02 00                                       ....
         1 WinSta0       CF_TEXT                   0xd ----------                                                 
         1 WinSta0       0x2000L                   0x0 ----------                                                 
         1 WinSta0       CF_TEXT                0x2000 ----------                                                 
         1 WinSta0       0xd0095L                  0x0 ----------                                                 
         1 WinSta0       CF_TEXT                   0x1 ----------                                                 
         1 ------------- ------------------    0xe00cb 0xffbb46b0                                                 
0xffbb46bc  64 00 6d 00 56 00 5a 00 51 00 6d 00 64 00 7a 00   d.m.V.Z.Q.m.d.z.
0xffbb46cc  4f 00 6c 00 55 00 72 00 63 00 45 00 42 00 6c 00   O.l.U.r.c.E.B.l.
0xffbb46dc  52 00 6a 00 38 00 37 00 64 00 48 00 51 00 33 00   R.j.8.7.d.H.Q.3.
0xffbb46ec  55 00 53 00 56 00 42 00 49 00 6e 00 00 00         U.S.V.B.I.n...
         1 ------------- ------------------    0xd0095 0xfddf5300                                                 
0xfddf530c  09 04 00 00                                       ....
         1 ------------- ------------------    0xb0137 0xfd4b47b0                                                 
0xfd4b47bc  00 00 00 00 78 00 00 00 01 00 00 00 01 00 00 00   ....x...........
0xfd4b47cc  00 00 00 00 00 00 00 00 0d 00 37 71 00 00 00 00   ..........7q....
0xfd4b47dc  01 00 00 00 ff ff ff ff 01 00 00 00 01 00 00 00   ................
0xfd4b47ec  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0xfd4b47fc  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0xfd4b480c  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0xfd4b481c  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0xfd4b482c  00 00 00 00 00 00 00 00                           ........

なんとなく、これがパスワードのような気がしなくもない。

$ strings HackTM.vmem | grep -20 dmVZQ
(snip)
%XPOIo
OOIo
LOPI
"F?N>
%%    N
W;>-
!#7>"
444K91/
O8!YHn
40.&`?
40.&0
pA)0
1J_'"
];NS+
(&-.HTA
a,+-$
#"#6
vspscc
[~ZV
copypaste.transport
dmVZQmdzOlUrcEBlRj87dHQ3USVBIn
or.lnk
ons%29.lnk
p~ZV
    ~ZV
mpleSock: Couldn't bind on source port 1023, error 10013, An attempt was made to access a socket in a way forbidden by its access permissions
powershell/windows%20powershell.lnk".
lnk".
.~ZV
~ZVo
IPlatformGetExecInfoHash: Getting exec info hash for URL "file:///c:/programdata/microsoft/windows/start%20menu/programs/accessories/windows%20powershell/windows%20powershell%20ise.lnk".
IPlatformGetExecInfoHash: Getting exec info hash for URL "file:///c:/programdata/microsoft/windows/start%20menu/programs/accessories/windows%20powershell/windows%20powershell%20ise.lnk".
KEEPAS~1
KeePass.exe
/C:\
PROGRA~1
KEEPAS~1
KeePass.exe
/C:\
PROGRA~1
KEEPAS~1

他にも2回ほど使用しているようだが、「Keepass.exe」でも使用しているように思える。ということでこれが「master password」だと仮定して進めていく。
次に、データベースを開くのだが「keepass2」が必要なのでインストールの参考にしたリンクを貼っておく。

Linux Mint 18: パスワード一元管理ツール「KeePass2」の使い方 | 221B Baker Street
インストールが完了したならばデータベースを開いてみる。

$ keepass2 Database.kdbx

これで、GUIが出てくるので「master password」だと思われる「dmVZQmdzOlUrcEBlRj87dHQ3USVBIn」を入力して「OK」を押すとデータベースが確認できる。

f:id:Zarat:20200302155916p:plain
KeePassデータベースを開いてみた
このようにデータベースを開くと、「Jason」のところにAttachmentがあるので、右クリックで「Save Attached File(s) To」を選択してファイルを抽出する。抽出したファイルを確認する。

$ file nothinghere.7z
nothinghere.7z: 7-zip archive data, version 0.4

取り出した7zファイルはパスワードが必要だが、先ほど「dmVZQmdzOlUrcEBlRj87dHQ3USVBIn」は何回か使い回されているのを確認したので、7zにも使用してみる。

$ 7za x nothinghere.7z

7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=ja_JP.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz (806E9),ASM,AES-NI)

Scanning the drive for archives:
1 file, 234 bytes (1 KiB)

Extracting archive: nothinghere.7z
--
Path = nothinghere.7z
Type = 7z
Physical Size = 234
Headers Size = 154
Method = LZMA2:12 7zAES
Solid = -
Blocks = 1


Enter password (will not be echoed):
Everything is Ok   

Size:       72
Compressed: 234
$ ls
Database.kdbx  HackTM.vmem  nothinghere.7z  nothinghere.txt
$ cat nothinghere.txt
HackTM{d14c02244b17f4f9dfc0f71ce7ab10e276a5880a05fca64d39a716bab92cda90}

flag: HackTM{d14c02244b17f4f9dfc0f71ce7ab10e276a5880a05fca64d39a716bab92cda90}


教訓

暗号化しても、メモリダンプ取っちゃえば関係ねぇ。

他の人のwriteupを読んでみて

人によってはkdbxファイルの仕組みをしっかりと理解した上で、Keepassデータベースがロードされているところを探しパスワードをを発見するなどもありました。Keepassデータベースのロード部分から、「master password」やファイル名を探し、実体を「KeePass」プロセスのメモリダンプからカービングすることもあるかもしれないので色々と資料を残しておきます。

kdbxに関する資料

Keepass file format explained · GitHub

KDBX v2 File Format · Stoom/KeePass Wiki · GitHub

他のwriteupと過去のKeePass問

CTFtime.org / HackTM CTF Quals 2020 / Find My Pass / Writeup

- Find My Pass

Find My Pass - HackTM CTF Quals 2020 | bi0s

SHX7 : for300-go_deeper