2026盘古石杯晋级赛

本文最后更新于 2026年5月19日 晚上

这次比赛我负责的是服务器、物联网和计算机部分的渗透.rar

服务器取证

三台服务器,然后是pve集群,难点在于如何重建

PVE服务器集群重建

我们先来看一下node1的网卡

image-20260513195904984

ens160现在是红的,我们先来启动一下

1
2
ip link set ens160 up
dhclient ens160

下面有两种虚拟网卡配置方法

方法一

NAT网卡配置到除了192.168.0.0任意子网IP,比如192.168.50.0

1
ip addr

这样ens160的ip地址就是192.168.50.128

我们可以直接通过这个ip进行ssh、访问PVE管理页面

image-20260513200719217

node2、node3都是离线的,查看host文件

image-20260513200837586

我们发现各节点之间通过vmbr0进行通信,但是vmbr0又没有绑定到真实网卡

1
brctl addif vmbr0 ens160

每个节点上进行绑定操作,之后可以看到所有节点都上线了

方法二

查看网络服务运行状态

1
systemctl status networking

image-20260513201214245

我们发现在原来的配置中vmbr0是绑定到一个叫nic0的网卡上的,但是现在找不到这张网卡了,我们修改一下配置,把它绑定到ens160

1
nano /etc/network/interfaces

image-20260513201404078

image-20260513201502332

接下来修改虚拟网卡的子网IP为192.168.0.0,让宿主机能访问到,这样就能ssh连接、访问管理面板了

我们在三台服务器都执行这些操作

image-20260513201617397

配置ceph集群

image-20260519111020871

我们先看一下集群状态

1
pvesm status

image-20260519113922149

这说明ceph存储集群还没有激活,我们看一下服务启动日志

1
journalctl -u ceph-mon@$(hostname) -n 50 --no-pager

image-20260519114057530

这里还有一个网卡,由于根本不存在这张网卡,我们直接给vmbr0网卡加一个临时170段的ip

1
ip addr add 192.168.170.50/24 dev vmbr0

image-20260519114258074

每个节点上重启下mon服务

1
systemctl start ceph-mon@$(hostname)

image-20260519115127211

报错

1
2
systemctl reset-failed ceph-mon@pve-node1.service
systemctl start ceph-mon@pve-node1.service

查看集群状态

1
ceph -s

image-20260519115253345

image-20260519115312653

配置完成

集群内服务器恢复

pve-node1节点下有一个服务器,直接启动会报错

方法一

一步一步恢复,查看报错

image-20260519120136325

在选项里面关闭KVM硬件虚拟化,又报错

image-20260519120254498

把CPU核心改成两个

image-20260519120326931

依旧报错,查看集群状态,发现都挂了,我们把三台服务器重启,重新配置一遍

再次报错

image-20260519120414969

1
2
清除残留锁文件: rm -f /var/lock/qemu-server/lock-100.conf
将 VM 内存从 8192MB 调整为 2048MB: qm set 100 --memory 2048

再启动就成功了,但是不知道账号密码

image-20260519120455276

1
ip addr add 192.168.50.70/24 dev eth0

添加ip就可以用tebby连接了

方法二

把服务器导出来仿真

题目

终于可以开始做题了

分析pve集群,请给出pve主机版本号?[答案格式:1.2.3]

1
pveversion -v

image-20260519120805042

分析pve集群,请给出pve主机内核版本?[答案格式:1.2.3-123-abc]

火眼直接能看

分析pve集群,请给出pve集群名?[答案格式:abc132]

1
pvecm status

image-20260519121658431

分析pve集群,请给出加入集群所用指纹的前6位?[答案格式:AA:BB:CC]

image-20260519135145859

分析pve集群,请给出pve集群中主机所用的时间服务器地址?[答案格式:www.baidu.com]

1
cat /etc/systemd/timesyncd.conf

image-20260519135525269

分析pve集群,请给Ceph存储的资源池名?[答案格式:Abc_def]

1
ceph osd pool ls #查看所有ceph存储池

image-20260519135700241

分析pve集群,请给出Ceph存储资源池的类别?[答案格式:ABC]

1
ceph osd pool application get Ceph_pgscup_pool #查看 pool 的应用类型

image-20260519135837617

或者控制台

image-20260519135925354

分析pve集群,请给出Ceph集群的ID的前8位??[答案格式:a1b2c3d4]

1
cat /etc/ceph/ceph.conf | grep fsid

image-20260519140902660

分析pve集群,请给出Ceph存储设置的最小副本数?[答案格式:123]

image-20260519145429522

分析pve集群,请给出pve集群中虚拟机的快照创建时间?[答案格式:2025-01-11-11:01:01]

image-20260519145609999

对集群内的服务器进行分析,提取该服务器使用的Linux内核完整版本号?[答案格式:1.2.3-123abc_123]

1
uname -a

image-20260519150220913

对集群内的服务器进行分析,提取该服务器SSH服务监听的TCP端口号?[答案格式:123]

image-20260519150303249

对集群内的服务器进行分析,提取该服务器网卡的IP地址?[答案格式:127.0.0.1]

image-20260519150424923

对集群内的服务器进行分析,提取金麟资本理财网站对应的域名?[答案格式:baidu.com]

检查nginx配置

1
grep -r "server_name\|ServerName" /etc/nginx/sites-enabled/ /etc/nginx/conf.d/ 2>/dev/null | grep -v "#"

image-20260519150710961

对集群内的服务器进行分析,服务器中有个加密工具,请给出该工具的名字?[答案格式:abc_def.sh]

image-20260519150927536

对集群内的服务器进行分析,服务器中加密工具在加密数据库备份文件时使用的密码是什么?[答案格式:ABC@123]

直接下载py文件会有乱码 tail -n +44 encrypt_tool.py | gzip -cd

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
加密工具 - 用于服务器取证
适用于数据库备份

加密层次:
第1层: XOR加密 (密钥: 0x5A, 位置偏移 i%256)
第2层: Base64编码
第3层: 字符替换表 (ABCD...+/ -> ZYXW...+/)
第4层: 十六进制转换

用法:
python encrypt_tool.py --input <文件路径> --output <输出路径>
python encrypt_tool.py <输入路径> <输出路径>
python encrypt_tool.py --db --output <输出路径>
"""

import os
import sys
import base64
import gzip
import subprocess
import argparse

try:
import codecs
def read_file(path):
with codecs.open(path, 'r', encoding='utf-8') as f:
return f.read()
def write_file(path, content):
with codecs.open(path, 'w', encoding='utf-8') as f:
f.write(content)
except ImportError:
# Python 2
def read_file(path):
with open(path, 'rb') as f:
return f.read().decode('utf-8')
def write_file(path, content):
with open(path, 'wb') as f:
f.write(content.encode('utf-8'))

XOR_KEY = 0x5A
BASE64_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
CUSTOM_TABLE = "ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba9876543210+/"


def xor_encrypt(data):
"""第1层: XOR加密"""
result = []
for i, c in enumerate(data):
result.append(chr(ord(c) ^ (XOR_KEY + i) % 256))
return ''.join(result)


def char_swap_encode(data):
"""第3层: 字符替换编码"""
trans = str.maketrans(BASE64_TABLE, CUSTOM_TABLE)
return data.translate(trans)


def obfuscate(data):
"""4层混淆加密"""
step1 = xor_encrypt(data)
step2 = base64.b64encode(step1.encode('utf-8')).decode('ascii')
step3 = char_swap_encode(step2)
step4 = step3.encode('utf-8').hex()
return step4


def encrypt_file(input_path, output_path):
"""加密目标文件"""
content = read_file(input_path)
obfuscated = obfuscate(content)
write_file(output_path, obfuscated)
print("[OK] %s -> %s" % (input_path, output_path))


def main():
is_db = '--db' in sys.argv

# 参数位置判断
if len(sys.argv) >= 3 and not sys.argv[1].startswith('-'):
input_path = sys.argv[1]
output_path = sys.argv[2]
else:
parser = argparse.ArgumentParser(description='加密文件加密工具')
parser.add_argument('--input', '-i', help='输入文件路径')
parser.add_argument('--output', '-o', help='输出文件路径')
parser.add_argument('--db', action='store_true', help='数据库备份模式')
args = parser.parse_args()

input_path = args.input if not args.db else None
output_path = args.output
is_db = args.db

print("=" * 60)
print(" 数据库文件加密工具")
print("=" * 60)
print("")

if is_db:
db_user = 'root'
db_pass = 'pgscup@o26'
db_name = 'jinqin'
password = 'JDSJ2026@Backup'

print("[*] 正在备份数据库...")
print(" 数据库: %s" % db_name)
print(" 输出: %s" % output_path)
print("")

try:
# 步骤1: mysqldump -> 临时gz文件
temp_sql = '/tmp/backup_temp.sql'
dump_cmd = 'mysqldump -uroot -p"pgscup@o26" --single-transaction --quick %s > %s' % (db_name, temp_sql)
print("[*] 执行mysqldump...")
ret = os.system(dump_cmd)
if ret != 0:
print("[ERROR] mysqldump失败, 返回码: %d" % ret)
sys.exit(1)
print("[OK] mysqldump完成")

# 步骤2: gzip压缩
temp_gz = '/tmp/backup_temp.sql.gz'
gzip_cmd = 'gzip -9 -c < %s > %s' % (temp_sql, temp_gz)
print("[*] 执行gzip压缩...")
ret = os.system(gzip_cmd)
if ret != 0:
print("[ERROR] gzip失败, 返回码: %d" % ret)
os.remove(temp_sql)
sys.exit(1)
print("[OK] gzip压缩完成")
os.remove(temp_sql)

# 步骤3: openssl加密 (去掉-pbkdf2选项,兼容老版本openssl)
print("[*] 执行openssl加密...")
openssl_cmd = 'openssl aes-256-cbc -salt -pass pass:%s -in %s -out %s' % (password, temp_gz, output_path)
ret = os.system(openssl_cmd)
if ret != 0:
print("[ERROR] openssl失败, 返回码: %d" % ret)
os.remove(temp_gz)
sys.exit(1)
print("[OK] openssl加密完成")
os.remove(temp_gz)

size = os.path.getsize(output_path)
print("")
print("[OK] 完成: %s (%.2f MB)" % (output_path, size/1024/1024))
print("")
print("[INFO] 数据库备份密码: %s" % password)

except Exception as e:
print("[ERROR] %s" % str(e))
sys.exit(1)

else:
if not input_path or not output_path:
print("[ERROR] 请指定输入和输出文件路径")
print("用法: python encrypt_tool.py --input <文件> --output <输出>")
sys.exit(1)

if not os.path.exists(input_path):
print("[ERROR] 文件不存在: %s" % input_path)
sys.exit(1)

parent_dir = os.path.dirname(output_path)
if parent_dir and not os.path.exists(parent_dir):
os.makedirs(parent_dir)

encrypt_file(input_path, output_path)
print("")
print("[OK] 加密完成")


if __name__ == "__main__":
main()

image-20260519152027536

对集群内的服务器进行分析,服务器中加密工具第1层加密的XOR密钥是什么?[答案格式:按实际填写]

image-20260519181441113

对集群内的服务器进行分析,给出MySQL数据库root用户的密码?[答案格式:abc@123]

image-20260519181413208

对集群内的服务器进行分析,请给出网站后台数据库中存放聊天记录的数据表名字?[答案格式:adb_def]

image-20260519171553638

对集群内的服务器进行分析,分析网站后台用户密码加密算法中type=0时的初始盐值是什么[答案格式:ABC]

image-20260519171739766

对集群内的服务器进行应用取证,提取该Laravel应用的APP_KEY值的后8位?[答案格式:英文数字混合字符串]

不会

image-20260519171817540

对集群内的服务器进行取证分析,金麟资本理财网站后台有多少个机器人?[答案格式:123]

image-20260519181739114

我们直接连接发现jinlin表被删了,再/home里面有一个备份,不过被加密了,我们让ai结合之前的加密脚本解密一下

这里解密完是.sql文件,需要起一个mysql服务导进去比较麻烦,我这里直接让ai转成了csv

与机器人有关的信息再robot表里面

image-20260519201051582

3个

对集群内的服务器进行资金流水取证,提取该平台数据库中聊天记录总数?[答案格式:123]

user_chat表里面一共11494条信息

image-20260519201153088

对集群内的服务器进行数据库取证,提取该平台数据库中注册用户总记录数?[答案格式:123]

users表

image-20260519201246274

对集群内的服务器进行取证分析,提取平台内用户季丽华的身份证号?[答案格式:18位身份证]

user_real表

image-20260519201358790

对集群内的服务器进行资金流水取证,提取该平台数据库中钱包流水金额第二大的用户名字?[答案格式:张三]

后面几个题手搓比较困难,直接上ai

image-20260519201735926

对集群内的服务器进行数据库取证,提取该平台法币交易中交易笔数最多的卖家的交易笔数?[答案格式:123]

image-20260519201924223

对集群内的服务器进行资金流水取证,提取该平台已完成结算的杠杆交易中保证金总额最多的用户的保证金总额?[答案格式:100.00]

ai不会,等我大数据学成归来手搓

对集群内的服务器进行资金流水取证,提取该平台商家中余额最小的商家的手机号?[答案格式:18036310808]

image-20260519202433014

对集群内的服务器进行资金流水取证,提取该平台商家中余额最小的商家的余额?[答案格式:100.0]

image-20260519202521159


2026盘古石杯晋级赛
https://www.sunynov.top/2026/05/13/2026盘古石杯晋级赛/
作者
suny
发布于
2026年5月13日
许可协议