DUMPster
Overview
- 26 solves / 775 points
- Overall difficulty for me (From 1-10 stars): ★★★★★★★★★★
Background
https://mega.nz/file/nuYCwLAA#44X9MnxYu4Cjk04hhUrg2a9KBNWYkC8Hx8R04XTZYdo
Find the flag
In this challenge, we can download a file:
┌[siunam♥Mercury]-(~/ctf/CrewCTF-2023/Forensics/DUMPster)-[2023.07.08|23:46:34(HKT)]
└> file thc-frn-chall-KhXsy1qlzoSDSF9M.zip
thc-frn-chall-KhXsy1qlzoSDSF9M.zip: Zip archive data, at least v2.0 to extract, compression method=deflate
┌[siunam♥Mercury]-(~/ctf/CrewCTF-2023/Forensics/DUMPster)-[2023.07.08|23:47:03(HKT)]
└> unzip thc-frn-chall-KhXsy1qlzoSDSF9M.zip
Archive: thc-frn-chall-KhXsy1qlzoSDSF9M.zip
inflating: Debian_5.10.0-20-amd64_profile.zip
inflating: memory
┌[siunam♥Mercury]-(~/ctf/CrewCTF-2023/Forensics/DUMPster)-[2023.07.08|23:47:11(HKT)]
└> file *
Debian_5.10.0-20-amd64_profile.zip: Zip archive data, at least v2.0 to extract, compression method=deflate
memory: ELF 64-bit LSB core file, x86-64, version 1 (SYSV), SVR4-style
thc-frn-chall-KhXsy1qlzoSDSF9M.zip: Zip archive data, at least v2.0 to extract, compression method=deflate
As you can see, it’s a memory dump file.
We can try to use a memory forensic tool called Volatility.
However, I wanna try strings
first, which will list out all the ASCII string in the file:
┌[siunam♥Mercury]-(~/ctf/CrewCTF-2023/Forensics/DUMPster)-[2023.07.08|23:50:22(HKT)]
└> strings memory | grep -nE 'crew{.*'
222308:crew{k3yc7l_us3r_kk
Wait… It actually worked? lol
┌[siunam♥Mercury]-(~/ctf/CrewCTF-2023/Forensics/DUMPster)-[2023.07.08|23:54:56(HKT)]
└> strings memory | grep -n '' | grep -E '^222308'
222308:crew{k3yc7l_us3r_kk
^C
┌[siunam♥Mercury]-(~/ctf/CrewCTF-2023/Forensics/DUMPster)-[2023.07.08|23:55:00(HKT)]
└> strings memory | grep -n '' | grep -E '^222309'
222309:3y5_are
^C
┌[siunam♥Mercury]-(~/ctf/CrewCTF-2023/Forensics/DUMPster)-[2023.07.08|23:55:02(HKT)]
└> strings memory | grep -n '' | grep -E '^222310'
222310:7_s3cur3}
So the flag should be: crew{k3yc7l_us3r_kk3y5_are7_s3cur3}
. However, I tried that, and it’s wrong.
Then, I dumped the .bash_history
in the memory dump with the given profile:
┌[siunam♥Mercury]-(~/ctf/CrewCTF-2023/Forensics/DUMPster)-[2023.07.09|14:52:01(HKT)]
└> python2 /opt/volatility/vol.py --plugin=. --profile=LinuxDebian_5_10_0-20-amd64_profilex64 -f memory linux_bash
Volatility Foundation Volatility Framework 2.6.1
WARNING : volatility.debug : Overlay structure cpuinfo_x86 not present in vtypes
WARNING : volatility.debug : Overlay structure cpuinfo_x86 not present in vtypes
Pid Name Command Time Command
-------- -------------------- ------------------------------ -------
511 bash 2022-12-28 10:34:19 UTC+0000 cat > flag.txt
511 bash 2022-12-28 10:34:51 UTC+0000 sudo apt update
511 bash 2022-12-28 10:34:56 UTC+0000 sudo apt upgrade
511 bash 2022-12-28 10:35:02 UTC+0000 sudo apt install keyutils
511 bash 2022-12-28 10:35:23 UTC+0000 head -c 16 /dev/urandom | keyctl padd user key @s
511 bash 2022-12-28 10:36:01 UTC+0000 keyctl pipe 267809713 | openssl enc -pbkdf2 -iter 1000000 -aes-256-cbc -in flag.txt -out flag.txt.enc -pass stdin
511 bash 2022-12-28 10:36:08 UTC+0000 shred flag.txt
511 bash 2022-12-28 10:36:12 UTC+0000 UH??HH??t?????H??]?????D
511 bash 2022-12-28 10:36:12 UTC+0000 rm -rf flag.txt
In here, we can see that the flag.txt
is created, shred
‘ed, and rm
‘ed. However, the flag.txt.enc
, which is encrypted via AES 256 CBC mode with 1000000 iteration, didn’t get shred
‘ed or rm
‘ed.
That being said, we can try to recover the flag.txt.enc
, and decrypt it:
┌[siunam♥Mercury]-(~/ctf/CrewCTF-2023/Forensics/DUMPster)-[2023.07.09|15:44:24(HKT)]
└> python2 /opt/volatility/vol.py --plugin=. --profile=LinuxDebian_5_10_0-20-amd64_profilex64 -f memory linux_enumerate_files
[...]
0xffff9dbbddae2ae0 393238 /home/alice/flag.txt.enc
[...]
┌[siunam♥Mercury]-(~/ctf/CrewCTF-2023/Forensics/DUMPster)-[2023.07.09|15:45:18(HKT)]
└> python2 /opt/volatility/vol.py --plugin=. --profile=LinuxDebian_5_10_0-20-amd64_profilex64 -f memory linux_find_file -i 0xffff9dbbddae2ae0 -O 'flag.txt.enc'
┌[siunam♥Mercury]-(~/ctf/CrewCTF-2023/Forensics/DUMPster)-[2023.07.09|15:45:26(HKT)]
└> file flag.txt.enc
flag.txt.enc: openssl enc'd data with salted password
┌[siunam♥Mercury]-(~/ctf/CrewCTF-2023/Forensics/DUMPster)-[2023.07.09|15:45:28(HKT)]
└> cat flag.txt.enc
Salted__���K(�%n�)�|_,�;�p�¸��g���nnhx�Fcj���8D�e�
But, the password is grabbed from 16 bytes of /dev/urandom
, and stored in the kernel user session keyring (keyctl padd user key @s
).
I wonder if it is possible to recover the password by extracting the user session keyring…
Unfortunately, I couldn’t find any way to do that…