
📢 免责声明
服务器分析2-陈志鹏ubuntu检材
2026 盘古石杯总决赛,服务器赛道难啃的一台靶机——一台 Ubuntu,扛起了一整套"暗网商城 + 远控 + 翻Q"的犯罪基础设施。
这台 ubuntu 检材是本届盘古石杯决赛服务器组中的其中一台,对应 Q56–115 共 60 道串题。和常规取证不同,它不考"翻日志找一个文件"那种单点题,而是把 C2 远控、OpenVPN、Tor/Privoxy 暗网入口、Kubernetes 集群、商城源码与凭据、MySQL8 业务库 六大子系统,全部塞进同一台服务器——每一组都是环环相扣的串题,牵一发动全身,正是决赛级别该有的强度。
出题人还埋了不少"坑":两份伪造的 netplan 网卡配置专门误导仿真启动;真正的答案有的藏在 etcd 的 ConfigMap 里,有的要离线跑起 MySQL8 才能读出,还有的只能回源码抠常量——纯靠单一手段,很容易卡死在中途。
整体解题思路:
这60题考的是 同一台Ubuntu 服务器上的一套 “暗网电商”+ “远控”基础设置,拆成6个子系统,每个子系统是一组“串题”。

服务器 仿真
- 子系统①:C2 远控(先做,占 8080)
# 启动systemctl start c2serverss -tlnp | grep 8080 # 确认 python3 在听 0.0.0.0:8080
- 子系统②:OpenVPN(管理端占 8081)
# 启动systemctl start openvpn-admin openvpn@serverss -tlnp | grep 8081
- 子系统③:Tor 暗网 / Privoxy(与 K8s 不冲突,可常驻)
# 启动systemctl start tor@default privoxyss -tlnp | grep -E '9050|8118'
- 子系统④:
Kubernetes(关键!活集群是kind,藏在Docker里)
拉起 kind集群
systemctl stop c2server openvpn-adminsystemctl start dockerdocker ps -adocker start forensics-control-planealias K='docker exec forensics-control-plane kubectl'K get nodesK get pods -A
排障要点:若日志报 `have an old IPv4 address but no current IPv4`,节点丢了网络/旧IP → 重新接回 kind 网(固定 IP 172.18.0.2)再启动执行docker network connect --ip 172.18.0.2 kind forensics-control-plane 2>/dev/null;若 `docker start` 报 `address already in use 8080/8081`,就是第 (1) 步没停 C2/VPN。

- 子系统:商城数据库
# 商城真实数据在 `/data/mysql/shopdb/*.ibd`(InnoDB 每表一个文件)。
# 1.确认数据库位置,接上一个模块通过获取到的数据库账号密码进行访问。发现返回为空docker exec forensics-control-plane kubectl exec -n shop deploy/mysql -- \mysql -uroot -pshoproot123 shopdb -e 'SHOW TABLES;'# 2.在 /data/mysql/shopdb/ 中发现大量的 ibd 文件ll -l /data/mysql/shopdb/# 3.通过 ibd2sql 进行读取数据(1)安装:# Kali / 有网的机器上拉取(纯 Python,无第三方依赖)git clone --depth 1 https://github.com/ddcw/ibd2sql.git# 若靶机无外网:在有网机器 clone 后 scp 过去scp -r ibd2sql root@10.233.233.10:/tmp/ibd2sql


⚠️中文显示坑:ibd2sql 会对部分字节做转义,终端按 latin1 渲染会出现乱码(如 电å)。
解决:gen categories --sql > cat.sql 后用 UTF-8 编辑器打开看;或与"起库法"交叉验证。
56. 分析陈志鹏ubuntu检材,给出C2 服务内部绑定端口?[答案格式:四位数字]
答案:8080
文件目录:ubuntu-vg(xQD2Mx-eyu0-fW0N-cCqf-5p10-ijs5-7y4Nyc)/分区0/opt/c2server/c2_server.py

57. 分析陈志鹏ubuntu检材,给出OpenVPN 网页管理服务端口?[答案格式:四位数字]
答案:8081
文件目录1:/opt/openvpn_admin/README.txt
文件目录2:/opt/openvpn_admin/openvpn_admin.py


58. 分析陈志鹏ubuntu检材,给出K8s 商城应用对外端口?[答案格式:五位数字]
答案:30080
命令:K get svc -A | grep -E 'shop|mysql|redis'

59. 分析陈志鹏ubuntu检材,给出K8s API Server HTTPS 端口?[答案格式:四位数字]
答案:6443
命令:docker exec forensics-control-plane grep api /etc/kubernetes/manifests/kube-apiserver.yaml
知识点:/etc/kubernetes/manifests/kube-apiserver.yaml是Kubernetes 控制平面(Control Plane)中 API Server 的静态 Pod(Static Pod)配置文件。一句话理解:"告诉 kubelet:请启动一个 kube-apiserver 容器,并按照这里面的参数运行。"

60. 分析陈志鹏ubuntu检材,给出Tor 客户端 SOCKS5 监听端口?[答案格式:四位数字]
答案:9050
文件目录:/etc/tor/torsocks.conf

61. 分析陈志鹏ubuntu检材,给出Privoxy HTTP 代理端口?[答案格式:四位数字]
答案:8118
文件目录:/etc/privoxy/config

62. 分析陈志鹏ubuntu检材,给出商城后端 Docker 内部监听端口?[答案格式:四位数字]
答案:5000
命令:K get svc -A | grep -E 'shop|mysql|redis'

63. 分析陈志鹏ubuntu检材,给出MySQL 服务端口?[答案格式:四位数字]
答案:3306
命令:K get svc -A | grep -E 'shop|mysql|redis'

64. 分析陈志鹏ubuntu检材,给出Redis 集群监听端口?[答案格式:四位数字]
答案:6379
命令:K get svc -A | grep -E 'shop|mysql|redis'

65. 分析陈志鹏ubuntu检材,给出OpenVPN 客户端默认虚拟网段是多少?[答案格式:192.168.1.0/24]
答案:10.8.0.0/24
文件目录:/etc/openvpn/server.conf

66. 分析陈志鹏ubuntu检材,给出K8s Pod 网段是多少?[答案格式:172.16.0.0/16]
答案:10.244.0.0/16
命令:docker exec forensics-control-plane cat /etc/kubernetes/manifests/kube-controller-manager.yaml
知识点:/etc/kubernetes/manifests/kube-controller-manager.yaml 一个 静态 Pod(Static Pod)配置文件,作用是告诉 kubelet 如何启动 kube-controller-manager。一句话Controller Manager 就是 Kubernetes 的"后台管理员",负责不断检查集群状态,并让实际状态(Actual State)向期望状态(Desired State)靠拢。

67. 分析陈志鹏ubuntu检材,给出隐藏服务中 HTTP(80)转发到本机哪个端口?[答案格式:五位数字]
答案:30080
文件目录:/etc/tor/torrc
题目解析:(隐藏服务 80 的后端,即商城)能出商城页

68. 分析陈志鹏ubuntu检材,给出隐藏服务中 HTTPS(443)转发到本机哪个端口?[答案格式:五位数字]
答案:30443
文件目录:/etc/tor/torrc

69. 分析陈志鹏ubuntu检材,给出Nginx 指向内部 DNS 的集群 IP 是什么?[答案格式:10.10.10.10]
答案:10.96.0.10
命令:K get svc -n kube-system kube-dns

70. 分析陈志鹏ubuntu检材,给出处理暗网请求的本地 HTTP 代理工具名?[答案格式:nginx]
答案:privoxy
文件目录:/etc/privoxy
题目解析:forward-socks5t .onion 127.0.0.1:9050 . → 这是 Privoxy(HTTP 代理)的配置
方向① 出站:本机访问别人的暗网(Privoxy → Tor)
浏览器/程序(HTTP) ──> Privoxy(8118) ──forward-socks5t──> Tor SocksPort 9050 ──> 访问 xxx.onion
forward-socks5t .onion 127.0.0.1:9050:Privoxy 看到目标是 .onion,就把请求交给本机 9050。 SocksPort 0.0.0.0:9050:Tor 正好在 9050 收 SOCKS5 请求,替你出网到暗网。 SocksPolicy accept 内网段 / reject *:限制只有内网能用这个 9050 代理,外人不能蹭。 这就是 9050 把两段配置"焊"在一起的地方——Privoxy 的转发目标 = Tor 的监听端口。
方向② 入站:别人通过暗网访问"你"(Tor 隐藏服务,跟 Privoxy 无关)
外部 Tor 用户 ──> 你的 xxxx.onion:80/443 ──Tor映射──> 本机 30080 / 30443(商城)
HiddenServiceDir /var/lib/tor/hidden_service/:这个目录里生成你的 .onion 域名(hostname 文件)和私钥。 HiddenServicePort 80 127.0.0.1:30080:暗网访客访问你站点的 80 端口,Tor 转给本机 30080(就是 K8s 商城的 NodePort)。 HiddenServicePort 443 127.0.0.1:30443:同理 443→30443。 ControlPort 9051:Tor 的管理控制端口(改配置/查状态用)。


71. 分析陈志鹏ubuntu检材,给出OpenVPN 后台管理员用户名?[答案格式:root]
答案:admin
文件目录:/opt/openvpn_admin/README.txt

72. 分析陈志鹏ubuntu检材,给出OpenVPN 后台管理员密码?[答案格式:password123]
答案:vpnadmin123
文件目录:/opt/openvpn_admin/README.txt

73. 分析陈志鹏ubuntu检材,给出商城管理后台管理员账号?[答案格式:manager]
答案:admin
命令:K get deploy shop-admin -n shop -o jsonpath='{..env}'
解题思路:查看 Deployment 环境变量。K get deploy shop-admin -n shop -o yaml
Deployment 环境变量常有的东西:
数据库地址
数据库账号密码
Redis 密码
JWT 密钥
默认管理员账号
默认管理员密码
第三方 API Key
容器运行模式


74. 分析陈志鹏ubuntu检材,给出商城管理后台管理员密码?[答案格式:secret999]
答案:shopadmin123
命令:K get deploy shop-admin -n shop -o jsonpath='{..env}'
75. 分析陈志鹏ubuntu检材,给出商城容器连接 MySQL 的 root 口令是什么?[答案格式:dbrootpwd]
答案:shoproot123
命令:K get deploy mysql -n shop -o jsonpath='{..env}'; echo

76. 分析陈志鹏ubuntu检材,给出商城前端连接 MySQL 的普通用户名是什么?[答案格式:dbuser]
答案:shopuser
命令:K get deploy shop-admin -n shop -o jsonpath='{..env}'

77. 分析陈志鹏ubuntu检材,给出商城前端连接 MySQL 的普通用户密码是什么?[答案格式:dbpass]
答案:shoppass123
命令:K get deploy shop-admin -n shop -o jsonpath='{..env}'

78. 分析陈志鹏ubuntu检材,给出Tor 暗网完整域名是什么?[答案格式:examp1e2abc3def4.onion]
答案:l42ng3rwghu7ytbo7nxuj7xh5mkomxlufqzsaeshu4j7qrly356e3aqd.onion
文件路径1-用户创建:/root/onion_address.txt
文件路径2-Tor自动生成-Tor 隐藏服务的标准工作目录:/var/lib/tor/hidden_service/hostname


79. 分析陈志鹏ubuntu检材,给出K8s 管理员凭据文件路径?[答案格式:/etc/config.yaml]
答案:/etc/kubernetes/admin.conf

80. 分析陈志鹏ubuntu检材,给出Docker cgroup 驱动模式?[答案格式:cgroupfs]
答案:systemd
命令:docker info
题目解析:Cgroup Driver 作用 管理资源。

81. 分析陈志鹏ubuntu检材,给出商城分类表主类目预设数?[答案格式:两位数字]
答案:10
命令: gen categories | grep -ic 'insert'
解题思路:题目重点:分类表 数量-计数题


82. 分析陈志鹏ubuntu检材,给出脚本预设的商品类别数组首位品类叫什么?[答案格式:家用电器]
答案:电子产品
⚠️中文显示坑:ibd2sql 会对部分字节做转义,终端按 latin1 渲染会出现乱码(如 电å)。
解决:gen categories --sql > cat.sql 后用 UTF-8 编辑器打开看;或与"起库法"交叉验证。
本案已交叉确认:Q82=电子产品、Q89=阿迪跑鞋6(下标 5)。

83. 分析陈志鹏ubuntu检材,给出虚拟注册用户总批数?[答案格式:四位数字]
答案:1000
命令:gen users | grep -ic 'insert'
解题思路:题目重点:用户表 数量-计数题

84. 分析陈志鹏ubuntu检材,给出虚拟商品总批数?[答案格式:四位数字]
答案:2000
命令:gen products | grep -ic 'insert'
解题思路:题目重点:产品表 数量-计数题

85. 分析陈志鹏ubuntu检材,给出生成的订单记录总条数?[答案格式:四位数字]
答案:5000
命令:gen orders | grep -ic 'insert'
解题思路:题目重点:订单表 数量-计数题

86. 分析陈志鹏ubuntu检材,给出商品 ID 123 的 SKU是什么?[答案格式:SKU000000]
答案:SKU000123
命令0:ddl products
命令1:gen products| grep -i '123'
解题思路:题目重点:产品表 按主键 ID 取某条记录 123

87. 分析陈志鹏ubuntu检材,给出第 888 号订单的用户 ID是多少?[答案格式:三位数字]
答案:889
命令0:ddl orders
命令1:gen orders | grep -i '888'
解题思路:题目重点:订单表 按主键 ID 取某条记录 888
88. 分析陈志鹏ubuntu检材,给出第 2024 条评价的商品 ID 是多少?[答案格式:两位数字]
答案:25
命令0:ddl reviews
命令1:gen reviews | grep -i '2024'
解题思路:题目重点:评价表 按主键 ID 取某条记录 2024
89. 89分析陈志鹏ubuntu检材,给出"阿迪跑鞋"在商品字典中的下标编号是多少?[答案格式:一位数字]
答案:5
为什么找 etcd 呢?因为那是 etcd 的数据库文件,而 Kubernetes 把所有对象(包括注入代码的 ConfigMap)都存在 etcd 里。
id=6 商品名 → 阿迪跑鞋6,下标=(6-1)%10=5
# 1. 定位 etcd 库(K8s 对象/代码都在这)ls -lh /var/lib/etcd/member/snap/db# 2. 搜关键词(变量名 或 已知中文前缀);-a 把二进制当文本grep -ac '阿迪跑鞋' /var/lib/etcd/member/snap/db # 确认命中grep -aob 'PRODUCT_NAME_PREFIXES' /var/lib/etcd/member/snap/db | head # 找偏移# 3. 抠出数组定义 + 生成函数python3 - <<'PY'db=open('/var/lib/etcd/member/snap/db','rb').read()i=db.find(b'PRODUCT_NAME_PREFIXES = (')print(db[i:i+520].decode('utf-8','replace'))PY或者纯 grep 版(不写 python):grep -aA14 'PRODUCT_NAME_PREFIXES = (' /var/lib/etcd/member/snap/db | head -16思路总结(为什么这样找)1. 商品名是代码生成的 → 要找代码。2. 代码是怎么进容器的?K8s 里常见两种:打进镜像、或用 ConfigMap 注入。本案 shop-admin 的 command 是 python /app/decrypt_runner.py /app/app.py.enc /app/app.py → 代码是运行时注入/解密的,不在镜像里写死。3. ConfigMap 是 K8s 对象,而 K8s 的所有对象(Pod/Service/ConfigMap/Secret…)都不落成磁盘文件,统一存进 etcd。etcd 是 K8s 唯一的"数据库/唯一事实来源"。4. etcd 把数据持久化到磁盘,文件就是 <data-dir>/member/snap/db。→ 所以要离线找 ConfigMap 里的代码,就去 etcd 的 db 文件 grep。- 法 1:etcd 静态 Pod 清单 etcd.yaml 里写着 --data-dir=/var/lib/etcd → 数据库就在 /var/lib/etcd/member/snap/db(etcd 用 boltdb,固定子路径 member/snap/db)。- 法 2:直接 find / -path '*/member/snap/db' → 找到两份:- /var/lib/etcd/member/snap/db(宿主机原 kubeadm 集群的,含完整商城代码 = 我们用的)- /var/lib/docker/volumes/…/lib/etcd/…/db(kind 集群那套的副本)找到 etcd 数据库的几种通用方法(从零)# ① 直接按 etcd 固定子路径找文件find / -path '*/member/snap/db' 2>/dev/null# ② 看 etcd 启动参数里的 data-dirgrep -r 'data-dir' /etc/kubernetes/manifests/etcd.yaml # 静态Podps -ef | grep etcd | grep -o '\-\-data-dir=[^ ]*' # 运行态进程# ③ 知道是 kubeadm 默认部署,直接奔默认目录ls /var/lib/etcd/member/snap/db
90. 分析陈志鹏ubuntu检材,给出user77 密码入库后的 MD5?[答案格式:md5后四位]
答案:a3a9
命令0:ddl users
命令1:gen users | grep -i 'user77'
解题思路:题目重点:用户表 按主键 ID 取某条记录 77
91. 分析陈志鹏ubuntu检材,给出user999 密码入库后的 MD5?[答案格式:md5后四位]
答案:8f86
命令0:ddl users
命令1:gen users | grep -i 'user999'
解题思路:题目重点:用户表 按主键 ID 取某条记录 99
92. 分析陈志鹏ubuntu检材,给出购物车新记录默认商品数量是多少?[答案格式:一位数字]
答案:1
命令:ddl cart
解题思路:题目重点:购物车表 找 `quantity` int DEFAULT '1'
93. 分析陈志鹏ubuntu检材,给出商城 Pod 部署命名空间?[答案格式:default]
答案:shop
命令:K get pod -A 或 K get pod ns
94. 分析陈志鹏ubuntu检材,商城 MySQL 数据库名?[答案格式:ecommerce]
答案:shopdb
命令:K get deploy shop-admin -n shop -o jsonpath='{..env}'; echo
95. 分析陈志鹏ubuntu检材,给出user1 对应手机号?[答案格式:11位数字]
答案:13800000001
命令:gen users | grep -i 'user1'
解题思路:用户表
96. 分析陈志鹏ubuntu检材,给出C2 虚假 Agent 数上限?[答案格式:两位数字]
答案:80
文件目录:/opt/c2server/c2_server.py
97. 分析陈志鹏ubuntu检材,给出C2 日志保留条数上限?[答案格式:五位数字]
答案:10000
文件目录:/opt/c2server/c2_server.py
98. 分析陈志鹏ubuntu检材,给出Agent ID 的 MD5 值?[答案格式:md5后四位]
这个题目不确定,只找到了sha256,截取 的 32位;
欢迎大佬指点
99. 分析陈志鹏ubuntu检材,给出上传结果到 C2 的 URL?[答案格式:/upload/]
答案:/result/
文件:/opt/c2server/c2_server.py
100. 分析陈志鹏ubuntu检材,给出受控主机列表 API 路径?[答案格式:/api/list]
答案:/api/agents
文件:/opt/c2server/c2_server.py
101. 分析陈志鹏ubuntu检材,给出受控端轮询 C2 新指令的 URL?[答案格式:/poll/]
答案:/beacon/
文件:/opt/c2server/c2_server.py
题目解析:轮询(polling/beacon),被控端不会被服务器主动连接(它通常在内网,有防火墙),所以反过来--它每隔一段时间主动去问服务器“有没有新任务给我?”。这种周期性“打卡上线”行为就叫轮询。
102. 分析陈志鹏ubuntu检材,给出向 Agent 下发命令的 URL?[答案格式:/execute/]
答案:/cmd/
文件:/opt/c2server/c2_server.py
103. 分析陈志鹏ubuntu检材,给出C2 后台管理面板使用什么语言开发?[答案格式:nodejs]
答案:python
文件目录:/opt/c2server/c2_server.py
104. 104 分析陈志鹏ubuntu检材,给出C2 伪随机种子 Seed?[答案格式:三位数字]
这题不确定
答案:42
文件目录:/opt/c2server/c2_server.py
105. 105 分析陈志鹏ubuntu检材,给出屏蔽 C2 假数据的环境变量名?[答案格式:NO_MOCK_DATA]
答案:C2_NO_SEED
106. 分析陈志鹏ubuntu检材,给出K8s CRI Socket 路径?[答案格式:unix:///var/run/docker.sock]
答案:unix:///run/containerd/containerd.sock
命令:docker exec forensics-control-plane grep -iE 'container' /var/lib/kubelet/kubeadm-flags.env
题目解析:考点:Kubernetes 使用的容器运行时(CRI)通过哪个 socket 与 Docker/容器运行时通信。
kubeadm 安装的 kubelet,启动参数不是写在配置文件里,而是写在 systemd + kubeadm 生成的 env 文件里。
107. 分析陈志鹏ubuntu检材,给出K8s 集群使用的网络插件名?[答案格式:calico]
答案:kindnet
命令:docker exec forensics-control-plane cat /etc/cni/net.d/10-kindnet.conflist
知识点:/etc/cni/net.d 是CNI 网络插件的配置文件,kubelet 会读取这里的配置,决定如何给 Pod 配置网络。
108. 分析陈志鹏ubuntu检材,给出shop-admin 部署副本数?[答案格式:一位数字]
答案:1
命令:K get deploy -n shop
109. 分析陈志鹏ubuntu检材,给出nginx 前端部署副本数?[答案格式:一位数字]
答案:2
命令:K get deploy -n shop
解题思路:shop-app==前端nginx
110. 分析陈志鹏ubuntu检材,给出Flask 健康检查路由路径?[答案格式:/status]
答案:/health
111. 分析陈志鹏ubuntu检材,给出登录后 sessionStorage 键名?[答案格式:auth_token]
答案:dm_user
112. 分析陈志鹏ubuntu检材,给出Nginx 代理 DNS 超时时间?[答案格式:30s]
答案:15s
113. 分析陈志鹏ubuntu检材,给出OpenVPN 状态日志路径?[答案格式:/var/log/vpn.log]
答案:/var/log/openvpn/openvpn-status.log
文件目录:/etc/openvpn/server/server.conf
114. 分析陈志鹏ubuntu检材,给出EasyRSA 客户端密钥位数?[答案格式:四位数字]
答案:2048
命令:openssl x509 -in /etc/openvpn/easy-rsa/pki/issued/client1.crt -noout -text | grep 'Public-Key'
115. 分析陈志鹏ubuntu检材,给出暗网响应 Header 名称?[答案格式:X-Hidden-Service]
答案:X-Onion-Service
命令:strings /var/lib/etcd/member/snap/db | grep 'add_header X-'