盘古石杯 2026 团队赛

2026盘古石初赛wp(计算机+服务器)

围绕 盘古石杯 的公开复盘与解题记录。

上传者:Serendipity 发布日期:2026-05-27 224 次阅读

检材密码:VeZeTANHVkklvVljLnpOYeBwCJFYD5tFpf67f5kNuqP1G5jj

下面的图片不是最终排名,但是跟大佬的差距依旧很大,还是做不到在第一页😭😭😭

这次比赛比完之后,真正感受到了ai大战,动态积分赛制让人不得不抢分,手搓注定没有ai跑的快,有点不知道竞赛的选拔性到底是选拔人还是选拔ai,使用ai零基础小白也可以变成"取证大师",那么手搓还有什么意义?网安这条路该如何去学习?

计算机取证

1.分析刘洋liuyang_pc.E01检材,提取磁盘镜像SHA1值的前6位?[答案格式:字母小写]

5bc418

挂载镜像直接计算哈希即可

2.分析刘洋liuyang_pc.E01检材,计算机系统Build版本为?[答案格式:19000]

26100

查看系统信息

3.分析刘洋liuyang_pc.E01检材,计算机最后一次正常关机的时间为?UTC+0[答案格式:2025-05-06-09:00:00]

2026-04-20-16:25:35

在系统信息这里看到系统时区是UTC+8

也就是说,找到时间之后得减8

4.分析刘洋liuyang_pc.E01检材,计算机网卡的MAC地址为?[答案格式:00-0B-00-A0-00-00]

00-50-56-30-26-1C

查看网卡信息

5.分析刘洋liuyang_pc.E01检材,分析机主是从那里下载的typora?[答案格式:阿里云]

蓝奏云

在谷歌的下载记录里看到该软件

查看历史记录

6.分析刘洋liuyang_pc.E01检材,刘洋在2026-04-19 13:46:01(UTC +0)曾访问过百度云盘,请给云盘的打开密码?[答案格式:11aa]

48gy

注意UTC +0,所以我们找的时间要加8,而且问云盘密码,大概率都是在浏览器的聊天记录里,搜索一下

7.分析刘洋liuyang_pc.E01检材,请给出刘洋管理pve集群所用的端口号?[答案格式:8000]

8006

这里其实就可以联系到服务器了,秒出8006

然后在计算机的书签记录里也有

8.分析刘洋liuyang_pc.E01检材,请给出刘洋登录理财网站所使用的密码?[答案格式:password]

admin123

在谷歌书签中可以看到理财网站

在谷歌保存的密码可以看到

9.分析刘洋liuyang_pc.E01检材,请给出理财网站的IP地址?[答案格式:127.0.0.1]

192.168.0.70

查看一下本地hosts文件

10.分析刘洋liuyang_pc.E01检材,请给出计算机内Bitlocker加密分区恢复密钥的前6位?[答案格式:6位数字]

560615

有内存镜像,那就可以直接拿内存镜像爆破Bitlocker密码了(efdd会快很多,但是我没有破解版)

得到密码 560615-577522-342881-216865-242561-312356-584837-421597

11.分析刘洋liuyang_pc.E01检材,找出VC加密容器的密钥文件,给出该密钥文件的绝对路径?[答案格式:D:\ABC\123\测试.txt]

D******:</font>BaiduNetdiskDownload</font>无标题.png**

得到密码之后解密分区,在百度网盘的下载文件夹里看到一个png文件

导出放进随波逐流里看看,可能是引写

12.接上题,该VC加密容器的密钥文件的图像高度是多少像素?[答案格式:1345]

1080

查看一下修复后图片的属性

13.分析刘洋liuyang_pc.E01检材,请给出团队重要信息加密保存的软件名?[答案格式:abc123]

1Password

在下载中看到1Password的软件

打开发现需要密码,弱口令也不对

在上面看到了这个程序的压缩包,解压发现需要密码,而且提示了密码

说明这就是个团队重要信息加密保存的软件

14.分析刘洋liuyang_pc.E01检材,该软件的保险库文件名为什么?[答案格式:abc.abc]

liuyang.opvault

在文档处还看到了一个1Password的文件夹,打开发现是软件的保险库

15.分析刘洋liuyang_pc.E01检材,该软件的保险库文件打开密码是什么?[答案格式:124@password]

liuyang@6419

根据压缩包的提示,来爆破一下密码,分析liuyang.opvault编写脚本

import hashlib
import hmac
import base64
import struct
import sys
import time
from multiprocessing import Pool, cpu_count
​
SALT = base64.b64decode("IeURd51uAYC1eLekU4BwFA==")
ITERATIONS = 100000
​
OVERVIEW_KEY_B64 = "b3BkYXRhMDFAAAAAAAAAACDcPhy5RqzGti3mEraiflCWM3tkcTXdKYimn0yGOpegf5ECqqovRBauxoeTlU7fCZRy0zmIOuhcHsNnVx8bYs6u+HUJBpgdVJjqAnMLYIHMlbhxNcC+HMJdVmYinkBuM3Gop9N9XxK08K/mENTbWQfYiBLEj91LgxkCRobA3pKh"
MASTER_KEY_B64 = "b3BkYXRhMDEAAQAAAAAAAGfym+bTedJNHPrsp1DtSrH4iu7nA3lMUHzuq1H49jlwIvSES6b55ZGNZHA0xtyJgifKgDgc82rEOJLNzSg4Xl+qaGCk33/tJmEZWS6r7Ef+wSErsxNcUYQxVHkaWQtbofQ8vif+46dYXBGfTiT5a/JEQU2X6bn2Snd5jkOSz62sPQcuHYwJ1lFxLv4WYRWROVKMvVA4b0ByNrjTmfUHrSuPv3JuBNfiLXX69LvVPW8EdznhnZG4BlU1+m3ZCZr2HST9+04JMhFJhj0UmhO07nijbUIvcDxeqJoeznyZ1CC6eocrQlvyv2EIAOMxcMmSuCGY2CMw+MPCdlklnLEdaULfhgEEaNHfWnpFFnVql5P5B1xZOHP80SW9qzmRmzoxQ/l7tOP7XEGld2vwHQlS+Smrzp2XVDRAi8yDVMH4rmJS"
​
overview_key_raw = base64.b64decode(OVERVIEW_KEY_B64)
overview_expected_hmac = overview_key_raw[-32:]
overview_hmac_input = overview_key_raw[:-32]
​
master_key_raw = base64.b64decode(MASTER_KEY_B64)
master_expected_hmac = master_key_raw[-32:]
master_hmac_input = master_key_raw[:-32]
​
​
def try_password(password):
    derived = hashlib.pbkdf2_hmac('sha512', password.encode('utf-8'), SALT, ITERATIONS, dklen=64)
    mac_key = derived[32:64]
    computed = hmac.new(mac_key, overview_hmac_input, hashlib.sha256).digest()
    if hmac.compare_digest(computed, overview_expected_hmac):
        return password
    computed2 = hmac.new(mac_key, master_hmac_input, hashlib.sha256).digest()
    if hmac.compare_digest(computed2, master_expected_hmac):
        return password
    return None
​
​
def try_batch(start):
    for i in range(start, min(start + 50, 10000)):
        password = f"liuyang@{i:04d}"
        result = try_password(password)
        if result:
            return result
    return None
​
​
if __name__ == '__main__':
    print(f"[*] OPVault Brute Force - liuyang@0000 to liuyang@9999")
    print(f"[*] PBKDF2-SHA512, {ITERATIONS} iterations")
    print(f"[*] Using {cpu_count()} CPU cores")
    print(f"[*] Starting...")
    start_time = time.time()
​
    batches = list(range(0, 10000, 50))
​
    with Pool(processes=cpu_count()) as pool:
        for idx, result in enumerate(pool.imap_unordered(try_batch, batches)):
            if result:
                elapsed = time.time() - start_time
                print(f"\n[+] PASSWORD FOUND: {result}")
                print(f"[+] Time elapsed: {elapsed:.1f} seconds")
                pool.terminate()
                sys.exit(0)
            if idx % 20 == 0:
                elapsed = time.time() - start_time
                progress = (idx * 50) / 10000 * 100
                print(f"[*] Progress: {progress:.1f}% ({idx*50}/10000) - {elapsed:.1f}s", end='\r')
​
    elapsed = time.time() - start_time
    print(f"\n[-] Password not found in range 0000-9999 ({elapsed:.1f}s)")
​

或者使用john ** **python 1password2john.py liuyang.opvault > opvault.hash

john.exe --format=cloudkeychain --mask='liuyang@?d?d?d?d' opvault.hash

16.分析刘洋liuyang_pc.E01检材,请给出用户刘洋的开机密码?[答案格式:p@ssw0rd123]

6yang@2o26

解开软件可以看到

17.分析刘洋liuyang_pc.E01检材,请给出pve服务器的管理密码?[答案格式:p@ssw0rd123]

pgscup2o@6

编辑一下pve可以看到

18.分析刘洋liuyang_pc.E01检材,找出计算机内的脚本加密工具,给出该加密工具的SHA1的前6位?[答案格式:字母小写]

7860dc

在1Password中看到了VC的密码

在百度网盘的下载文件夹找到加密容器

用VC挂载一下,把密码8687f7d845649e03d02d4ff1f36ec952,pim2026全都挂上

发现并没有加密脚本,那就用密钥文件(修复后的)和pim2026试一下,找到加密脚本,这里其实就有服务器上的一些文件

计算哈希

19.分析刘洋liuyang_pc.E01检材,该脚本加密工具在进行脚本加密时,最后一层是进行什么操作?[答案格式:字符替换]

十六进制转换

打开脚本

20.分析刘洋liuyang_pc.E01检材,请解密该脚本加密工具加密的文件database.php.obf,给出该文件内的数据库密码?[答案格式:p@ssw0rd123]

pgscup@o26

服务器的脚本依旧适用

# -*- coding: utf-8 -*-
import base64
​
XOR_KEY = 0x5A
BASE64_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
CUSTOM_TABLE = "ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba9876543210+/"
​
​
def xor_decrypt(data):
    result = []
    for i, c in enumerate(data):
        result.append(chr(ord(c) ^ (XOR_KEY + i) % 256))
    return ''.join(result)
​
​
def deobfuscate(hex_data):
    step1 = bytes.fromhex(hex_data).decode('ascii')
    step2 = step1.translate(str.maketrans(CUSTOM_TABLE, BASE64_TABLE))
    step3 = base64.b64decode(step2).decode('utf-8')
    step4 = xor_decrypt(step3)
    return step4
​
​
with open(r'D:\OneDrive\Desktop\新建文件夹 (2)\.env.obf', 'r') as f:
    data = f.read().strip()
​
plaintext = deobfuscate(data)
print(plaintext)
print()
for line in plaintext.splitlines():
    if 'APP_KEY' in line:
        print(f"[*] {line}")
        key_value = line.split('=', 1)[1]
        print(f"[*] APP_KEY last 8 chars: {key_value[-8:]}")

**详细可看服务器20题 **https://mp.weixin.qq.com/s/ykMy9WPY7i1p2botsyebrQ

21.分析刘洋liuyang_pc.E01检材,找出刘洋计算机内的交易信息.rar,给出该文件的打开密码?[答案格式:p@ssw0rd123]

pgscup@9541

这里就是之前第一次拿密码挂的容器了,发现压缩包加密了 ** **

直接用passwarekit爆破了

得到密码

22.分析刘洋liuyang_pc.E01检材,找出刘洋计算机内刘桂荣的身份证号码?[答案格式:5.....1]

未知

直接搜索

找到三个,比较逆天,随便填一个吧

23.分析刘洋ly-memdump.mem镜像,给出用户刘洋的NT哈希值?[答案格式:数字字母组合,字母小写]

876dfe7bd78730b7b0baaf451414de8e

24.分析刘洋ly-memdump.mem镜像,给出1Password密码管理器的数据库文件名?[答案格式:123ABc.abc]

1Password10.sqlite

在进程中搜索1Password

25.分析刘洋ly-memdump.mem镜像,1Password在VeraCrypt启动后约多少分钟启动?[答案格式:123]

2

进程列表搜索VeraCrypt

然后再搜索1Password

相减一下时间

26.分析黄志远PC.E01镜像,黄志远使用的ai agent的名称是什么?[答案格式:www]

hermes

在历史命令中看到

27.分析黄志远PC.E01镜像,黄志远使用的模型api后4位是什么?[答案格式:abcd]

gioa

/home/kali/.hermes/state.db找到数据库文件

28.请分析黄志远PC.E01镜像中的渗透.rar文件,分析黄志远PC.E01镜像,黄志远总共攻击了多少台主机?[答案格式:123]

16

在kali目录下找到此文件

解压发现需要密码,但是在压缩包上面就可以看到渗透密码的文件夹

五百张图片的拼图,应该是拼成压缩包旁边照片的样子,用一下拼图小工具

使用瞪眼大法看出密码是今晚去杀鬼

看到十六个不同ip的报告

29.请分析黄志远PC.E01镜像中的渗透.rar文件,反编译exploit二进制文件发现其调用了setuid()、setgid()和system("/bin/bash"),该程序的源文件编译前名称是什么?[答案格式:xxx.c]

exploit.c

用ida打开程序,反编译main函数,发现调用这些函数

提取一下字符串strings exploit看到两个.c文件

crtstuff.c(编译器生成)exploit.c(源文件)

30.请分析黄志远PC.E01镜像中的渗透.rar文件,Webshell 功能逻辑研判观察 file_shell.php 的源码,若攻击者请求 ?download=/etc/passwd,程序执行的核心函数是什么?[答案格式:func()]

readfile()

打开文件看到下载功能的代码

分析代码可知,当访问?download=/etc/passwd时,核心执行的是readfile()函数

31.请分析黄志远PC.E01镜像中的渗透.rar文件,Nikto扫描结果发现通过发送超长斜杠序列可以探测目录列举漏洞,该漏洞对应的CVE编号是什么?[答案格式:CVE-XXXX-XXXX]

CVE-2002-1078

在pentest-lab文件夹中看到扫描结果

32.请分析黄志远PC.E01镜像中的渗透.rar文件,SQLite 数据库结构分析在 users 表的定义中,id 字段使用了 AUTOINCREMENT。这意味着什么?[答案格式:SQL_KEYWORD]

AUTOINCREMENT

在渗透测试报告中找到users表定义

AUTOINCREMENT是SQLite的关键字

确保id字段自动递增且永不重用已删除的ID值

与单纯的PRIMARY KEY不同,AUTOINCREMENT保证ID严格递增

33.请分析黄志远PC.E01镜像中的渗透.rar文件,Webshell 命令执行参数若要利用 file_shell.php 获取当前系统的用户权限,正确的 URL 参数构造是什么?[答案格式:cmd=xxx]

cmd=id

找到相关代码

id命令是Linux系统中查看用户权限的标准命令

例如http://192.168.61.135/file_shell.php?cmd=id

34.请分析黄志远PC.E01镜像中的渗透.rar文件,API 端口风险判定8000端口运行的技术组件是什么?[答案格式:XxxYyy]

FastApi

通讯录管理系统漏洞清单.md中找到开放端口信息

35.请分析黄志远PC.E01镜像中的渗透.rar文件,数据库存储安全性评估users 表的密码存储存在什么安全隐患?[答案格式:CVE-XXXX-XXXX]

CVE-2026-0005

渗透测试报告_192.168.61.135.md中找到

36.请分析黄志远PC.E01镜像中的渗透.rar文件,文件上传漏洞利用条件利用 upload.php 上传漏洞后,攻击者利用 Webshell 前最关键的一步是什么?[答案格式:xxx/]

uploads/

在漏洞清单中可以看到

上传webshell后,攻击者需要知道文件上传到哪个目录,攻击者需要访问uploads/目录来确认webshell已上传成功并获取访问路径

37.请分析黄志远PC.E01镜像中的渗透.rar文件,根据通讯录管理系统漏洞清单,CVE-2026-0003(无限制文件上传漏洞)的CVSS评分是多少?[答案格式:1.2]

8.8

在上一题可以看到

38.请分析黄志远PC.E01镜像中的渗透.rar文件,根据file_shell.php源码,文件上传功能使用哪个PHP函数将临时文件移动到目标路径?[答案格式:php_func]

move_uploaded_file

查看file_shell.php上传功能代码,分析代码可知

39.请分析黄志远PC.E01镜像中的渗透.rar文件,Web 目录遍历隐患uploads/ 目录启用目录列表功能通常由哪个组件控制?[答案格式:apache_opt]

apache_******Indexes**

在漏洞清单中可以看到

Apache通过Options指令中的Indexes选项控制目录列表的开启

40.请分析黄志远PC.E01镜像中的渗透.rar文件,敏感凭据深度关联在 address_book.db 中,管理员密码 Str0ngP@ssw0rd2026! 是什么角色?[答案格式:SQL_DEFAULT]

未知

打开数据库文件

41.请分析黄志远PC.E01镜像中的渗透.rar文件,数据规模与风险评估遭受泄露的个人联系人信息条数大约为多少?[答案格式:12345]

15000

在报告中可以看到

42.请分析黄志远PC.E01镜像中的渗透.rar文件,系统运行权限分析Web服务器运行的用户身份是什么?[答案格式:xxx-xxx]

www-data

依旧报告中可以看到

43.请分析黄志远PC.E01镜像中的渗透.rar文件,命令行注入漏洞识别验证 tools.php 命令执行漏洞时,哪个命令返回了uid的值?[答案格式:cmd]

id

查看漏洞清单

44.请分析黄志远PC.E01镜像中的渗透.rar文件,数据库物理路径获取攻击者通过 generate_data.php 得知数据库在服务器上的绝对物理路径是什么?[答案格式:/xxx/xxx/xxx.db]

/var/www/html/address_book.db

在漏洞测试报告可以找到

45.请分析黄志远PC.E01镜像中的渗透.rar文件,Webshell 下载参数逻辑源码中通过设置哪个 Header 实现浏览器自动弹出下载框?[答案格式:Content-xxx]

Content-Disposition

看file_shell.php下载功能代码,分析代码可知

46.请分析黄志远PC.E01镜像中的渗透.rar文件,身份验证策略评估系统中存在的弱密码策略漏洞不包括哪项?[答案格式:user/pass]

admin/Str0ngP@ssw0rd2026!

漏洞清单这里都是弱密码

结合前几题猜测答案是admin/Str0ngP@ssw0rd2026!

47.请分析黄志远PC.E01镜像中的渗透.rar文件,API 环境交互日志价值未授权访问8000端口日志接口,最可能导致哪类敏感信息泄露?[答案格式:/api/xxx]

/api/logs

和34题一样

48.请分析黄志远PC.E01镜像中的渗透.rar文件,攻击路径逻辑推演攻击者获取持久访问权限的最典型方式是什么?[答案格式:xxx.php]

file_shell.php

在测试报告中可以看到

49.请分析黄志远PC.E01镜像中的渗透.rar文件,漏洞 CVE 编号识读被标识为未授权命令执行漏洞的虚拟CVE编号是什么?[答案格式:CVE-XXXX-XXXX]

CVE-2026-0002

在渗透测试报告中搜索可得

50.请分析黄志远PC.E01镜像中的渗透.rar文件,系统修复优先级研判24小时紧急加固中,哪项不属于立即修复级别?[答案格式:ABC]

WAF

查看漏洞清单中的修复建议优先级

51.请分析黄志远PC.E01镜像中的渗透.rar文件,管理员凭据有效性验证利用管理员密码,攻击者在哪个页面时才能生效?[答案格式:xxx.php]

tools.php

查看漏洞清单中的攻击链

52.请分析黄志远PC.E01镜像中的渗透.rar文件,本系统使用的后端数据库技术是什么?[答案格式:DB_name]

SQLite

查看系统信息

53.请分析黄志远PC.E01镜像中的渗透.rar文件,Webshell 目录处理逻辑文件上传功能中,源码将上传后的文件命名为什么?[答案格式:$_xxx]

$_FILES

查看file_shell.php上传代码

54.请分析黄志远PC.E01镜像中的渗透.rar文件,目标系统运行的 Apache 具体版本号是什么?[答案格式:x.x.xx]

2.4.66

在漏洞清单中可以看到

55.请分析黄志远PC.E01镜像中的渗透.rar文件,根据通讯录管理系统漏洞清单,CVE-2026-0001(敏感信息泄露漏洞)的CVSS评分是多少?[答案格式:1.2]

9.8

搜索一下即可

56.请分析黄志远PC.E01镜像中的渗透.rar文件,攻击者最终获取了什么角色的权限?[答案格式:xxx-xxx]

www-data

在渗透测试报告中看到

服务器取证

现在服务器甚至不用挂载都可以用codex一把嗦,我这里依旧还是正常做法

从题目直接就可以看出是pve集群服务器,每个镜像磁盘有两个,分为一个系统盘一个数据盘,仿真的时候两个一起挂载即可,切记用网络配置选择NAT模式

仿真之后可以看到node1,node2,node3,接下来以node1为例

这里学习了一下大佬的思路,可以直接启动ens33网卡,获取IP ** **参考文章 https://mp.weixin.qq.com/s/dUHS-2CVggBnYD6ZVXajGg

虚拟机启动后默认只有vmbr网卡正常,想要访问PVE控制台要启动ens33网卡(看自己的网卡),获取IP

ip link show
ip link set ens160 up
dhclient ens160

访问https://192.168.50.128:8006即可 root/123456

进入网站发现node2,node3都是离线的,查看host文件cat /etc/hosts

可以看到各节点之间是通过vmbr0网卡进行通信的,vmbr0网卡没有绑定到真实网卡,没法起桥接,将各个节点的vmbr0网卡绑定到ens160网卡,brctl addif vmbr0 ens160,然后走vmware的网络互联 ,之后可以看到所有节点都上线了

接下来就该配置ceph集群了,先查看集群状态

这说明Ceph 存储集群还没激活,看下服务启动日志

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

因为不存在这些ip的网卡,所以就得尝试修改一下ceph集群的ip,最简单的做法是给vmbr0网卡加一个临时170段的IP地址

# pve-node1 (170.50 → 0.50)
ip addr add 192.168.170.50/24 dev vmbr0
​
# pve-node2 (170.51 → 0.51)
ip addr add 192.168.170.51/24 dev vmbr0
​
# pve-node3 (170.52 → 0.52)
ip addr add 192.168.170.52/24 dev vmbr0

配好之后显示如下

最后每个节点上重启下mon服务

systemctl start ceph-mon@$(hostname)
systemctl status ceph-mon@$(hostname)

如果出现以下报错

输入命令(以node1为例)systemctl reset-failed ceph-mon@pve-node1.servicesystemctl start ceph-mon@pve-node1.service即可

查看集群状态ceph -s

查看WEB管理台,已配置完成

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

9.1.1

直接在node1输入pveversion -v即可

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

6.17.2-1-pve

输入uname -r查看主机内核版本,当然火眼也可以跑出来

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

pgscup2026

**查看pve集群的Corosync配置信息 **cat /etc/pve/corosync.conf

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

F7:2C:A0

直接计算并显示PVE集群根证书的SHA256指纹

openssl x509 -in /etc/pve/pve-root-ca.pem -noout -fingerprint -sha256

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

ntp.aliyun.com

查看Chrony 时间同步服务的配置文件cat /etc/chrony/chrony.conf

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

Ceph_pgscup_pool

查看pve集群的存储配置cat /etc/pve/storage.cfg,或者看Ceph 存储集群中所有存储池的详细配置信息ceph osd pool ls detail

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

RBD

由上题可知

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

3f28d8bb

**查看当前 Ceph 存储集群的唯一标识符 **ceph fsid

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

2

直接查询Ceph_pgscup_pool这个数据池在写入时所需的最小成功副本数

ceph osd pool get Ceph_pgscup_pool min_size

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

2026-04-16-15:05:19

直接在web管理面板上可以看到

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

3.10.0-957.el7.x86_64

启动虚拟机发现报错

点击Options,把kvm这个关掉

然后发现了新的报错

点击Hardware,将cpu改为2

再次启动,又报错

**查看一下集群状态,发现挂了 **

重启下所有node,重新走一遍配置,所有ceph节点启动上线

再次启动虚拟机,又多了两个报错

清除残留锁文件: rm -f /var/lock/qemu-server/lock-100.conf

将 VM 内存从 8192MB 调整为 2048MB: qm set 100 --memory 2048

再次启动虚拟机即可

这里不知道账号密码,可以看我龙信杯这篇重置虚拟机账号密码的文章,方法是一样的 ** **https://mp.weixin.qq.com/s/BYL3aGLmaoe7ZOEQxMoQog

查看内核版本号uname -a

之后可以添加ip,拿finalshell连接好操作ip addr add 192.168.50.70/24 dev eth0

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

22

查看SSH服务监听的 TCP 端口号ss -tlnp | grep sshd

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

192.168.0.70

刚刚用ssh连接的时候,其实就看到了ip

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

jlzb.vip

在/etc/nginx/conf.d/找到配置文件

查看一下cat /<font style="color:rgb(38,44,49);">etc/nginx/conf.d/jinqin.conf</font>

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

encrypt_tool.py

刚连上服务器时输入ls即可看到一个名称为加密工具的文件

虽然其外层被⼀个 shar/gzip 壳包裹, 但文件名已经直接表明工具名称

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

JDSJ2026@Backup

**提取encrypt_tool.py真实源码 **tail -n +44 encrypt_tool.py | gzip -cd

分析加密算法为4层加密:XOR(0x5A) → Base64 → 字符替换表 → Hex编码

#!/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()

在加密算法中看到了密码

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

0x5A

由上题可知

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

pgscup@o26

依旧在算法中看到

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

user_chat

<font style="color:rgb(38,38,38);">/var/www/html/app/UserChat.php</font>文件内部定义了该模型对应的数据表

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

ABCDEFG

**在相同目录下,**Users.php文件中可以看到盐值

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

otS+rWI=

**在 **/var/www/html/ 下发现 .env.obf 加密配置文件

写一个脚本进行解密

# -*- coding: utf-8 -*-
import base64
​
XOR_KEY = 0x5A
BASE64_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
CUSTOM_TABLE = "ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba9876543210+/"
​
​
def xor_decrypt(data):
    result = []
    for i, c in enumerate(data):
        result.append(chr(ord(c) ^ (XOR_KEY + i) % 256))
    return ''.join(result)
​
​
def deobfuscate(hex_data):
    step1 = bytes.fromhex(hex_data).decode('ascii')
    step2 = step1.translate(str.maketrans(CUSTOM_TABLE, BASE64_TABLE))
    step3 = base64.b64decode(step2).decode('utf-8')
    step4 = xor_decrypt(step3)
    return step4
​
​
with open(r'D:\OneDrive\Desktop\新建文件夹 (2)\.env.obf', 'r') as f:
    data = f.read().strip()
​
plaintext = deobfuscate(data)
print(plaintext)
print()
for line in plaintext.splitlines():
    if 'APP_KEY' in line:
        print(f"[*] {line}")
        key_value = line.split('=', 1)[1]
        print(f"[*] APP_KEY last 8 chars: {key_value[-8:]}")

同时还印证了前面几道题的答案

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

3

知道了数据库的基本信息,我们现在对他进行连接

成功连接

查看robot表

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

11494

在这个表中查询user_chat发现为空

根据 encrypt_tool.py 源码中的数据库备份逻辑,备份流程是

在home文件夹发现加密的备份数据库文件

进行解密openssl aes-256-cbc -d -salt -pass pass:JDSJ2026@Backup -in /home/jinqin_backup.sql.gz.enc -out backup.sql.gz

进行解压

gunzip backup.sql.gz

然后把sql文件提取出来

也可以直接在虚拟机里导入mysql -u root -p jinqin < backup.sql

这里延迟高的话,可以直接本地建一个jinqin数据库,导入文件的

我这里文件有损坏,我修复了一下,如果你也有问题可以私聊解决

查看数据

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

21722

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

370100196901274436

SELECT card_id FROM users_real WHERE name='季丽华';

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

燕春梅

好像答案是林斌,不清楚了,后面这几道题

先查看一下流水用户

SELECT ur.name, total_amount 
FROM (SELECT w.user_id, SUM(w.change) AS total_amount FROM wallet_log w GROUP BY w.user_id) AS t 
JOIN user_real ur ON t.user_id = ur.user_id 
ORDER BY ABS(t.total_amount) DESC 
LIMIT 2;

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

1727

SELECT seller_id, COUNT(*) AS deal_count 
FROM legal_deal 
GROUP BY seller_id 
ORDER BY deal_count DESC 
LIMIT 1;

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

37240.76

SELECT SUM(l.caution_money) AS total_caution 
FROM lever_transaction l 
WHERE l.status = 3 
GROUP BY l.user_id 
ORDER BY total_caution DESC 
LIMIT 1;

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

15860623709

SELECT mobile 
FROM seller 
ORDER BY seller_balance ASC 
LIMIT 1;

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

8461.4