Home CyberDefenders: Seized Write-up

CyberDefenders: Seized Write-up


Category: Digital Forensics

Level: Medium

Before analyzing the mem.dump file makes sure to copy the CentOS profile to /Volatility/volatility/plugins/overlays/linux/

To confirm that the profile is working properly. Using command vol.py --info to see the profiles.

Supportive Tools


Q1) What is the CentOS version installed on the machine?

We are given the CentOS profile which is Centos7.3.10.1062.zip. However, after we performed an OSINT on google and found a Wikipedia link associated to kernel version.

Answer: 7.7.1908

Q2) There is a command containing a strange message in the bash history. Will you be able to read it?

Using command linux_bash plugin would let you see all the bash command that was executed.

vol.py -f dump.mem --profile=LinuxCentos7_3_10_1062x64 linux_bash

After executed the command the output shows a command adds the base64 encoded string into a file named y0ush0uldr34dth1s.txt

By decoding the encoded string we would get an answer.

echo 'c2hrQ1RGe2wzdHNfc3Q0cnRfdGgzXzFudjNzdF83NWNjNTU0NzZmM2RmZTE2MjlhYzYwfQo=' | base64 -d

Answer: shkCTF{l3ts_st4rt_th3_1nv3st_75cc55476f3dfe1629ac60}

Q3) What is the PID of the suspicious process?

Using linux_psaux plugins to see the process.

Answer: 2854

Q4) The attacker downloaded a backdoor to gain persistence. What is the hidden message in this backdoor?

In the previous bash_history output, we found that there was a command which cloned the repository from github. Therefore, we assume this repository suspicious since it was cloned after the attack occured. We perform the following command to investigate the code.

git clone https://github.com/tw0phi/PythonBackup
cat PythonBackup/PythonBackup.py

Performing investigation on app/snapshot.py to see what function generateSnapshot does.

As the picture above shows that the generateSnapshot function downloads a file from pastebin. Therefore, I perform an examination by downloading the file into my VM using command below:

curl https://pastebin.com/raw/nQwMKjtZ
echo "c2hrQ1RGe3RoNHRfdzRzXzRfZHVtYl9iNGNrZDAwcl84NjAzM2MxOWUzZjM5MzE1YzAwZGNhfQo=" | base64 -d

Using base64 -d to decode the base64 encoded string to receive the answer.

Answer: shkCTF{th4t_w4s_4_dumb_b4ckd00r_86033c19e3f39315c00dca}

Q5) What are the attacker’s IP address and the local port on the targeted machine?

In the previous question, we received the port 12345 which an adversary used to connect to the targeted machine. Therefore, we use the command below to quickly review the attacker’s IP address.

python2 vol.py -f dump.mem --profile=LinuxCentos7_3_10_1062x64 linux_netstat | grep -i "12345"

A picture above shows that the connection established, but it is still ambigious for us that which IP address is an attacker one. To confirm this we use linux_bash_env plugin to confirm the ncat remote IP address and the local port number.

python2 vol.py -f dump.mem --profile=LinuxCentos7_3_10_1062x64 linux_bash_env


Q6) What is the first command that the attacker executed?

In the previous output of linux_bash plugin, we discovered the first command an attacker execute which is using python to spawn the bash.

Answer: python -c import pty; pty.spawn("/bin/bash")

Q7) After changing the user password, we found that the attacker still has access. Can you find out how?

On the previous bash history, we discovered an adversary was edited a /etc/rc.local file. Therefore, it is not possible for us to obtain the user and password by exporting this file. However, we could perform another method to obtain our need. By dumping the content on the PID 2887 which is a process of editor used to edit a /etc/rc.local file.

mkdir 2887_procdump
python2 vol.py -f dump.mem --profile=LinuxCentos7_3_10_1062x64 -p 1887 -D 2887_procdump/

Once volatility success, we use a strings command to search for a string within the dumped file. However, we assume that the attacker was issuing remote command. So, we can look for a string echo

strings 2887_procdump/* | grep "echo" -A5 -B5

As the picture shows above, on top of modifying the ssh authorization key we see the encoded string. Therefore, we decode it and get a flag.

echo "c2hrQ1RGe3JjLmwwYzRsXzFzX2Z1bm55X2JlMjQ3MmNmYWVlZDQ2N2VjOWNhYjViNWEzOGU1ZmEwfQo=" | base64 -d

Answer: shkCTF{rc.l0c4l_1s_funny_be2472cfaeed467ec9cab5b5a38e5fa0}

Q8) What is the name of the rootkit that the attacker used?

Rootkit established using rc.local. Therefore, we could investigate the logs from dmesg process by using linux_dmesg plugin to look for a potential evidence

python2 vol.py -f dump.mem --profile=LinuxCentos7_3_10_1062x64 linux_dmesg

Picture above shows sysemptyrect was a rootkit using by an attacker.

Answer: sysemptyrect

Q9) The rootkit uses crc65 encryption. What is the key?

From the previous question, we discover a rootkit which uses by attacker. However, we can use string command to search for a CRC65 encryption key by using command below:

strings dump.mem | grep -i "sysemptyrect"

Therefore, the picture above gave us a complete crc65 key which is our answer.

Answer: 1337tibbartibbar

This post is licensed under CC BY 4.0 by the author.