2025年数证杯初赛服务器题解析

yagami 发表于 1 小时前 共 3,986 字、阅读约 13 分钟

2025年数证杯初赛服务器题解析

文档简介:本文档详细解析2025年数证杯初赛服务器取证题目,包含环境重构步骤和20道题目的完整解答过程。

适用对象:数字取证从业者、网络安全专业学生、竞赛参赛选手

难度等级:中级-高级

预计完成时间:4-6小时

📋 参考资源

原文参考:


⚠️ 使用前准备

必备工具

  • 虚拟化软件:VMware Workstation/VirtualBox
  • 容器工具:Docker Desktop
  • 数据库工具:Navicat、DBeaver
  • 取证工具:FTK Imager、X-Ways Forensics
  • SSH客户端:Xshell、MobaXterm
  • Web浏览器:Chrome/Firefox(支持开发者工具)

环境要求

  • 操作系统:Windows 10/11 或 Linux
  • 内存:至少16GB RAM
  • 存储空间:至少100GB可用空间
  • 网络:稳定的网络连接

注意事项

  • 确保虚拟机网络配置正确
  • 检材文件较大,确保足够的存储空间
  • 部分操作需要root权限
  • 建议在测试环境中先练习操作

📚 目录


📋 环境重构

网络配置调整

(1)根据镜像内情况分析为k8s集群,ip地址为192.168.50.x,将vm虚拟机的NAT网段调整至192.168.50.0

服务器检材仿真

(2)仿真 服务器检材01.E01,服务器检材02.E01,服务器检材03.E01,服务器检材04.E01.

Kubernetes集群状态检查

(3)启动后可以使用ssh连入每台虚拟机,在检材01的master上操作

查看节点状态

kubectl get node

image-20251108161524723

查看pod信息和状态

kubectl get pod,svc -A

image-20251108161604204

Kubernetes面板配置

(4)可以使用https://集群服务器ip:30001访问Kubernetes 面板,方便后续解答题目,也可以不使用面板使用命令进行后续答题。(可选)

image-20251108163710269

创建 token

kubectl create token dashboard-admin --namespace kube-system

image-20251108163958314

使用 token登录

image-20251108164411016

NFS服务配置

(5)查看nfs

kubectl describe pod nfs-client-provisioner-79cc77f98-7xzkg -n nfs-storageclass

image-20251109023344289

在检材04检查nfs相关情况

systemctl status nfs-server

exportfs -v

cat /etc/exports

image-20251109023832895

查看防火墙情况

systemctl status firewalld

firewall-cmd --list-all

firewall-cmd --list-ports

firewall-cmd --list-services

image-20251109024101286

添加规则

firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd
firewall-cmd --reload

或者关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

nfs和redis恢复正常

kubectl get pod,svc -A

image-20251109024637131

数据库服务恢复

(6)查看 captcha-bot 情况 无法连接数据库

kubectl logs captcha-bot-6b4d85b765-w6jqq

image-20251109024838907

04检材 在 /data/k8s_data/default/ 下可以看到数据库目录mysql80

查看01检材 /root 下的 mysql-d.yaml mysql80-pvc.yaml 文件后

kubectl apply -f mysql80-pvc.yaml

kubectl apply -f mysql-d.yaml

kubectl get pod,svc -A

image-20251109025611537

使用 navicat 创建MySQL 连接 k8s 虚拟机ip 端口 30627 账号 root 密码 LKKD23mjakl213dmmm 连接

image-20251109025827014

发卡网站恢复

(7)恢复发卡网站

检材01 查看 php-nginx-deployment.yaml dujiaoka-c.yaml 文件,查看pvc

kubectl get pvc -A

image-20251109032042378

检材04 恢复 dujiaoka.tar

cp /root/dujiaoka.tar /data/k8s_data/default/

cd /data/k8s_data/default/

tar xvf dujiaoka.tar

导出01检材 php-nginx镜像到02 03检材导入

docker save -o php-nginx.tar ac

scp /root/php-nginx.tar root@node1:/root/

scp /root/php-nginx.tar root@node2:/root/

image-20251109032805641

检材02和03分别执行

docker load -i php-nginx.tar

docker tag ac webdevops/php-nginx:7.4

image-20251109033414177

检材01执行

kubectl apply -f dujiaoka-c.yaml
kubectl apply -f php-nginx-deployment.yaml

image-20251109034543358

浏览器访问 http://k8s虚拟机ip:31669/

image-20251109034934601

至此重构完成,开始做题


📝 题目解析

题目1:node1节点的磁盘设备SHA256值前六位是?

题目类型: 哈希值计算
题目要求: 字母全大写
答案格式: AAAAAA

✅ 答案

FC9A34

🔧 解题步骤

使用计算机取证软件计算检材02 SHA256哈希

image-20251109035749038


题目2:集群配置了多少个node节点?

答案格式: 1

🎯 答案

2

🔧 解题步骤

检材01执行

cat /etc/hosts

或者

kubectl get nodes

image-20251109040110594


题目3:嫌疑人于什么时间修改master节点的root密码?

**题目要求:**使用双位数格式

答案格式: 00:00:00

🎯 答案

09:35:59

🔧 解题步骤

master执行

grep -i "password changed" /var/log/secur*

image-20251109041747614


题目4:Docker的安装日期是?

**题目要求:**使用双位数格式

答案格式: 01月01日

🎯 答案

04月08日

🔧 解题步骤

rpm -qi docker-ce 2>/dev/null | sed -n 's/^Install Date[[:space:]]*:[[:space:]]*//p'

或者

stat -c 'mtime=%y  ctime=%z  %n' "$(command -v dockerd)"

image-20251109042653764


题目5:Docker通过配置守护进程以使用全局代理,该代理地址的端口是?

答案格式: 1

🎯 答案

4780

🔧 解题步骤

方法1:静态分析方法

systemctl show --property=Environment docker

或者

ps -ef | grep containerd
cat /proc/1296/environ | tr '\0' '\n' | grep -i proxy

image-20251109043215494


题目6:发卡网站使用的Mysql数据库对外访问端口是?

答案格式: 1

🎯 答案

30627

🔧 解题步骤

kubectl get svc -A | egrep -i 'mysql|mariadb|3306|33060'

image-20251109043531216


题目7:发卡网站部署使用的镜像名称是?

答案格式: root/root

🎯 答案

webdevops/php-nginx

🔧 解题步骤

master执行

cat /root/php-nginx-deployment.yaml |grep image

image-20251109043956834


题目8:当前Telegram群管机器人使用的容器ID的前六位是?

答案格式: 123abc

🎯 答案

8fadf5

🔧 解题步骤

Kubernetes 每次启动或重新调度 Pod 时,Pod 内的容器会被重新创建,这意味着容器的 容器 ID 会发生变化。这是因为 Kubernetes 会根据 Pod 定义重新启动容器,而容器 ID 是由 Docker 或容器运行时(如 containerd)在容器启动时分配的,因此每次容器重启时都会分配一个新的 ID。所以最好用静态分析,使用计算机取证软件加载检材03后解析。

image-20251109045817338


题目9:发卡网站使用的缓存数据库是?

答案格式: mysql

🎯 答案

redis

🔧 解题步骤

检材04 执行

cat /data/k8s_data/default/dujiaoka/.env

image-20251109050140298


题目10:集群中配置的发卡网站代码运行所在的物理目录是?

答案格式: /root/root

🎯 答案

/data/k8s_data/default/dujiaoka

🔧 解题步骤

前面恢复发卡网站时可以判断

kubectl get pvc dujiaoka
kubectl describe pv pvc-e39f465b-8687-4cb0-a130-ec33fa9b1d63

image-20251109051145406


题目11:Telegram群管机器人配置的API代理域名是?

答案格式: www.xxx.com

🎯 答案

kk.xilika.cc

🔧 解题步骤

检材04 执行

cat /data/k8s_data/default/captchaBot/config/config.toml

image-20251109051413034


题目12:嫌疑人在Telegram上创建的群名称是?

答案格式: 比武群

🎯 答案

西门庆交流群

🔧 解题步骤

数据库中可以看到

image-20251109054502737

或者根据18题的方式从Redis中或者登录管理后台获取信息 交流群唯一地址:https://t.me/xillkak
用浏览器打开https://t.me/xillkak
image-20251109075043146


题目13:统计嫌疑人在Telegram上创建的群中2025年6月之后成功入群的人数为?

答案格式: 1

🎯 答案

2422

🔧 解题步骤

数据库查询

SELECT COUNT(*)
FROM user_captcha_record
WHERE created_at >= '2025-06-01' and captcha_status = 1

image-20251109054930312


题目14:据嫌疑人交代曾在发卡网上删除过一条订单数据,请找出该删除订单的订单号是?

答案格式: 请按实际值填写

🎯 答案

4V8XNK8Q0wMD5D2R

🔧 解题步骤

wsl的ubuntu安装8.0版本的mysqlbinlog (也可以本地安装windows版本的mysql8.0)

apt-get update
apt-get install mysql-client mysql-server-core-8.0 -y
mysqlbinlog --no-defaults -vv --base64-output=DECODE-ROWS /mnt/d/binlog.000002 > bin2.sql
grep "DELETE FROM" bin2.sql -A 20 && rm bin2.sql

image-20251109064516841


题目15:发卡网站上2025年6月之后订单交易成功的总金额是?忽略被删除的数据

答案格式: 1

🎯 答案

295202

🔧 解题步骤

数据库查询

SELECT
    SUM(actual_price) AS total_amount
FROM
    orders
WHERE
    status = 4 
    AND created_at >= '2025-06-01';

image-20251109065103613


题目16:发卡网站的后台访问路径是?

答案格式: /root

🎯 答案

/admin

🔧 解题步骤

检材04 执行

cat /data/k8s_data/default/dujiaoka/.env

image-20251109065507317


题目17:计算出用户密码算法中Salt的值,并进行Base64编码,结果是?

答案格式: 请按实际值填写

🎯 答案

lAID2ktDeRlGbcg=

🔧 解题步骤

检材04 执行

cat /data/k8s_data/default/dujiaoka/vendor/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php

image-20251109070107228

编写php代码

<?php
$a = 'sdahjklhl212jkljass';
$b = hash('sha256', $a, true);
$c = substr($b, 0, 16);
$d = base64_decode('xPfGJQaE1zE5d+8=');
$e = '';
for($i = 0; $i < strlen($d); $i++) {
    $e .= chr(ord($d[$i]) ^ ord($c[$i]));
}
$salt = base64_encode($e);
echo $salt;
?>

找个php环境或者在线运行

image-20251109071541502


题目18:发卡网站配置的邮件发送人地址是?

答案格式: [email protected]

🎯 答案

[email protected]

🔧 解题步骤

使用 navicat 创建 Redis 连接k8s集群虚拟机ip的31678端口,从Redis数据库中查找

检材04 执行
image-20251109072323390

或者

检材04 上修改

vi /data/k8s_data/default/dujiaoka/vendor/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php

    public function check($value, $hashedValue, array $options = [])
    {
        $value .= $this->getSalt();
        if ($this->verifyAlgorithm && $this->info($hashedValue)['algoName'] !== 'bcrypt') {
            throw new RuntimeException('This password does not use the Bcrypt algorithm.');
        }

        return parent::check($value, $hashedValue, $options);
    }

修改为

    public function check($value, $hashedValue, array $options = [])
    {
        $value .= $this->getSalt();
        if ($this->verifyAlgorithm && $this->info($hashedValue)['algoName'] !== 'bcrypt') {
            throw new RuntimeException('This password does not use the Bcrypt algorithm.');
        }

        return !parent::check($value, $hashedValue, $options);
    }

image-20251109073218877

使用浏览器打开 http://k8s集群虚拟机ip:31669/admin

使用账号admin 密码 任意五位数以上 比如12345 登录后台后查看

image-20251109073923075


题目19:当前发卡网站首页仪表盘中显示的发卡网站版本为?

答案格式: 1.1.1

🎯 答案

2.0.5

🔧 解题步骤

上一题中登录后台可看到

image-20251109074123510

或者
检材04 执行

cat /data/k8s_data/default/dujiaoka/config/dujiaoka.php |grep version

image-20251109074327048


题目20:当前发卡网站中绑定的订单推送Telegram用户id为?

答案格式: 请按实际值填写

🎯 答案

6213151597

🔧 解题步骤

登录后台查看

image-20251109075330302
或者Redis中查看

image-20251109075349289


📝 总结

🎯 本文档特点

本文档完整解析了2025年数证杯初赛服务器取证的20道题目,涵盖了:

🔍 技术领域覆盖

  • 容器化取证:Kubernetes集群分析、Docker容器取证、Pod日志分析
  • 系统取证:Linux系统分析、用户行为追踪、系统配置审计
  • 数据库取证:MySQL数据库分析、Redis缓存取证、二进制日志分析
  • 网络取证:代理配置分析、防火墙规则检查、网络流量追踪
  • Web应用取证:发卡网站分析、后台管理取证、订单数据恢复
  • 加密取证:密码算法分析、哈希值计算、Base64编码解码

📊 题目类型统计

  • 系统配置类:5题(25%)
  • 容器技术类:4题(20%)
  • 数据库取证类:4题(20%)
  • Web应用类:4题(20%)
  • 网络技术类:3题(15%)

🛠️ 取证技能要求

  1. 基础知识:Linux系统管理、网络配置、数据库操作
  2. 容器技术:Kubernetes、Docker、容器网络理解
  3. 取证工具:FTK Imager、Navicat、各类分析工具
  4. 编程能力:Shell脚本、SQL查询、基础编程

🎓 学习价值

适合人群

  • 数字取证从业者:提升容器化环境取证技能
  • 网络安全专业学生:实战练习和学习参考
  • 竞赛参赛选手:准备类似技术竞赛
  • 系统管理员:了解系统安全和取证要点

技能提升

  • 掌握Kubernetes集群环境取证方法
  • 学习容器化应用的调查分析技巧
  • 提升数据库和日志分析能力
  • 理解现代Web应用的取证要点

⚡ 快速参考

常用命令速查

# Kubernetes相关
kubectl get nodes                    # 查看节点状态
kubectl get pod,svc -A              # 查看所有Pod和服务
kubectl describe pod <pod-name>      # 查看Pod详细信息
kubectl logs <pod-name>              # 查看Pod日志

# 系统信息
systemctl status <service>          # 查看服务状态
rpm -qi <package>                   # 查看软件包信息
cat /var/log/secure                 # 查看安全日志

# 网络配置
firewall-cmd --list-all             # 查看防火墙规则
netstat -tulpn                      # 查看网络连接

关键文件路径

  • Kubernetes配置:/etc/kubernetes/
  • 数据库数据:/data/k8s_data/default/
  • 应用配置:/data/k8s_data/default/dujiaoka/.env
  • 系统日志:/var/log/

📈 延伸学习

相关竞赛

  • 全国大学生信息安全竞赛
  • 中国信息安全技能竞赛
  • 强网杯、蓝帽杯等CTF竞赛

学习资源

  • Kubernetes官方文档
  • Docker取证指南
  • Linux系统取证手册
  • 数字取证相关认证课程

🧡 感谢

最后感谢提供检材和题目的小伙伴,另外感谢每个日日夜夜一起研究技术的小伙伴们。

image-20231120211033162

退回首页 留下一言