当前位置: 首页 > news >正文

2026FIC初赛-服务器部分WP

写在前面

由于笔者也是第一次复现RAID阵列的题目,不足之处大家见谅(应该是有三题错误,主要还是想复现一下还原的过程)

题目关键还是还原RAID0阵列,查找部分倒不是特别难

最后感谢你Alexander✌带飞好吧,挂一下申的博客:https://www.cnblogs.com/alexander17

还原

首先就是EWF的识别,这边两个镜像都挂不上火眼,显示是未分配簇,无法分析,猜测可能是RAID阵列

工具的准备

sudo apt-get update
sudo apt-get install -y ewf-tools lvm2 mdadm

查看镜像1、2的基本信息:

image-20260427073108423

可以看到原始磁盘都是60GiB,证实了之前磁盘阵列的猜想

挂载

sudo ewfmount 检材3-1.E01 /mnt/ewf1sudo ewfmount 检材3-2.E01 /mnt/ewf2

切loop

loop 是 Linux 把“文件”当成“块设备”用的一种机制,很多工具不能直接把文件当硬盘分区操作,这时候用 losetup 把文件映射成块设备,之后 Linux 就能像操作硬盘一样操作它

当然这里我们是把raw文件的部分分区切出来

值得注意的是,切的顺序是固定的,这是因为RAID0的储存方式是按条带进行切分的:

第 1 个 512K -> 成员 0
第 2 个 512K -> 成员 1
第 3 个 512K -> 成员 0
第 4 个 512K -> 成员 1

从第一个 E01 的第一个 LVM 分区切 loop:

LOOP1=$(sudo losetup -r -f --show -o $((2048*512)) --sizelimit $((58591232*512)) /mnt/ewf1/ewf1) 

从第二个 E01 的第一个 LVM 分区切 loop:

LOOP2=$(sudo losetup -r -f --show -o $((8204288*512)) --sizelimit $((58593280*512)) /mnt/ewf2/ewf1) 

从第一个 E01 的第二个 LVM 分区切 loop:

LOOP3=$(sudo losetup -r -f --show -o $((58593280*512)) --sizelimit $((67233792*512)) /mnt/ewf1/ewf1) 

从第二个 E01 的第二个 LVM 分区切 loop:

LOOP4=$(sudo losetup -r -f --show -o $((66797568*512)) --sizelimit $((59029504*512)) /mnt/ewf2/ewf1) 

这里的 -o 是起始扇区偏移,--sizelimit 是分区长度,乘以 512 是因为扇区大小按 512 字节换算

确认 loop 设备:

echo "$LOOP1" "$LOOP2" "$LOOP3" "$LOOP4"

激活卷组

sudo pvscan --cache

扫描这些 loop 设备里的 LVM 物理卷,并刷新 LVM 缓存。

sudo vgscan

扫描 LVM 卷组,也就是把多个 PV 组合出来的 VG 找出来。

sudo vgchange -ay

激活卷组,让里面的逻辑卷出现在 /dev/root/data、/dev/volum/root 这种路径下。

sudo lvs -a -o vg_name,lv_name,lv_path,devices

查看识别出来的逻辑卷,以及它们由哪些 loop 设备组成。

image-20260427080254502

超块信息

image-20260427075808616

image-20260427080046048

这里可以看出确实是RAID0,同时两个逻辑卷的UUID相同,再次证实这两份检材同属一个RAID0阵列

组装

LV0="/dev/root/data" 

把第一个 md RAID 成员设置为变量。这个是 RAID 的 Device 0。

LV1="/dev/volum/root" 

把第二个 md RAID 成员设置为变量。这个是 RAID 的 Device 1。

sudo mdadm --assemble --readonly /dev/md0 "$LV0" "$LV1" || sudo mdadm --assemble --readonly --force /dev/md0 "$LV0" "$LV1" 

把两个逻辑卷按 md 超块信息组装成只读 RAID0。我这边系统最后实际分配成 /dev/md127,这是正常的自动命名。

cat /proc/mdstat 

查看当前 Linux 内核里的 md RAID 状态,确认阵列已经 active。

sudo mdadm --detail /dev/md127 

查看 RAID 详细信息:

image-20260427080700072

sudo blkid /dev/md127 

image-20260427080833183

识别重组出来的最终设备类型,这里能看到 TYPE="btrfs" 和 Btrfs UUID。

sudo btrfs inspect-internal dump-super -f /dev/md127 | head -25 

读取 Btrfs 超块,确认RAID 拼出来的是正确文件系统。

sudo mount -t btrfs -o ro,usebackuproot,rescue=all /dev/md127 /mnt/evd 

把 Btrfs 挂载到 /mnt/evd,usebackuproot,rescue=all 是因为这个 Btrfs 需要救援参数才能稳定打开。。。

ls -la /mnt/evd/@rootfs 

查看根目录,能看到 etc、var等目录,还原完成

image-20260427081619452

完整还原代码

sudo -sapt-get update
apt-get install -y ewf-tools lvm2 mdadm btrfs-progsmkdir -p /mnt/ewf1 /mnt/ewf2 /mnt/evd /mnt/restoreumount /mnt/evd 2>/dev/null || true
mdadm --stop /dev/md127 2>/dev/null || true
mdadm --stop /dev/md0 2>/dev/null || true
vgchange -an 2>/dev/null || true
umount /mnt/ewf1 2>/dev/null || true
umount /mnt/ewf2 2>/dev/null || truecd /home/kali/桌面/fic #这里改成自己检材所在目录即可IMG1="$PWD/检材3-1.E01"
IMG2="$PWD/检材3-2.E01"ewfmount "$IMG1" /mnt/ewf1
ewfmount "$IMG2" /mnt/ewf2RAW1="/mnt/ewf1/ewf1"
RAW2="/mnt/ewf2/ewf1"LOOP1=$(losetup -r -f --show -o $((2048*512)) --sizelimit $((58591232*512)) "$RAW1")
LOOP2=$(losetup -r -f --show -o $((58593280*512)) --sizelimit $((67233792*512)) "$RAW1")
LOOP3=$(losetup -r -f --show -o $((8204288*512)) --sizelimit $((58593280*512)) "$RAW2")
LOOP4=$(losetup -r -f --show -o $((66797568*512)) --sizelimit $((59029504*512)) "$RAW2")echo "$LOOP1" "$LOOP2" "$LOOP3" "$LOOP4"pvscan --cache
vgscan
vgchange -aylvs -a -o vg_name,lv_name,lv_path,devicesLV0="/dev/root/data"
LV1="/dev/volum/root"mdadm --examine "$LV0" | egrep 'Array UUID|Raid Device|Raid Devices|Data Offset|Chunk Size|Name'
mdadm --examine "$LV1" | egrep 'Array UUID|Raid Device|Raid Devices|Data Offset|Chunk Size|Name'mdadm --assemble --readonly /dev/md0 "$LV0" "$LV1" || mdadm --assemble --readonly --force /dev/md0 "$LV0" "$LV1"cat /proc/mdstatMDDEV="/dev/md0"
[ -e "$MDDEV" ] || MDDEV="/dev/md127"mdadm --detail "$MDDEV"
blkid "$MDDEV"
btrfs inspect-internal dump-super -f "$MDDEV" | head -25mount -t btrfs -o ro,usebackuproot,rescue=all "$MDDEV" /mnt/evdls -la /mnt/evd
btrfs subvolume list /mnt/evd
ls -la /mnt/evd/@rootfs
cat /mnt/evd/@rootfs/etc/os-release

开始写题

image-20260427082417190

1. 操作系统版本

image-20260425171928329

13.0

2. 根分区 UUID

image-20260425171952168

3231e52f-5e15-44c4-b224-e29cb4201c0e

3. 最新 Docker 镜像创建时间

cd /mnt/evd/@rootfs/data/image/overlay2/imagedb/content/sha256

这里叫ai写个脚本匹配最新创建时间:

sudo python3 - <<'PY'
import json, os
d='/mnt/evd/@rootfs/data/image/overlay2/imagedb/content/sha256'
rows=[]
for name in os.listdir(d):p=os.path.join(d,name)try:data=json.load(open(p,'r',encoding='utf-8'))except Exception:continuet=data.get('created') or data.get('Created')if t:rows.append((t,name))
for t,name in sorted(rows):print(t, name)
PY

image-20260427090640095

2026-04-16T07:15:50.535713491Z

4. 根分区快照路径

@rootfs/root/history

明显的快照格式

image-20260425172535863

/root/history

5. 后台管理入口文件名

看下nginx的登录日志:

image-20260427091006817

可以看到入口是user.php,原来还有个admin1.php,但是文件目录里找不到

image-20260425172653875

user.php

6. ICP

读取站点配置:

cat /var/www/html/maccms10/application/extra/maccms.php

image-20260425172756477

icp1919810

7.主域名

出处见上

www.2026fic.forensix

8. 分类3中视频的拼音

下面可以看到分类3:

image-20260425173004619

fenlei3

9. 站点设置页面前端模板源文件

application/admin/view_new/system/config.html

这个是后台“站点设置”页面本身,只负责显示配置项,不是前端模板。

application/extra/maccms.php

这个是站点配置文件,里面可以看到当前使用的模板目录:

'template_dir' => '001tep',

真正被使用的前端模板文件在:

template/001tep/html/index/index.html

如果平台按“配置来源文件”判题,则可能是:

application/extra/maccms.php

10. 伪静态规则配置文件 SM3

实际 Nginx 站点配置为:

/etc/nginx/sites-available/default

导出后计算 SM3:

$tmp = Join-Path $env:TEMP 'nginx_default_forensic.conf'
python .\forensics_btrfs.py export /etc/nginx/sites-available/default $tmp
wsl -u root bash -lc 'python3 - <<PY
import hashlib
p="/mnt/c/Users/Alexander/AppData/Local/Temp/nginx_default_forensic.conf"
print(hashlib.new("sm3", open(p,"rb").read()).hexdigest().upper())
PY'

结果:

E73407468E6F52AF54C7B14632EEEB9BE25B05106D06C4C3085FC843C223793F

11. 数据库 IP

cat /var/www/html/maccms10/application/database.php

关键字段:

'hostname' => 'mytidb',
'database' => 'mac2',
'username' => 'aa',
'password' => '123456',
'hostport' => '3306',

再读 hosts:

cat /etc/hosts

image-20260425173334843

10.0.3.100

12. 数据库使用的容器技术

cat /var/lib/lxc/mytidb/config

image-20260425173415627

LXC

13. 4000 端口备份数据库版本

4000 是 TiDB 的默认服务端口。前面数据库主机 mytidb 对应的是 LXC 容器,备份数据库痕迹在:

/mnt/evd/@rootfs/media/zfs

直接在这个文件里检索版本字符串:

grep -aob '8.5.0-alpha' /mnt/evd/@rootfs/media/zfs

能看到版本号:

8.5.0-alpha

14-15. 用户注册日期统计与马慧美最后登录 IP

LXC 容器内 MySQL 数据目录为:

/var/lib/mysql/mac2

关键文件:

mac_user.MYD
mac_user.MYI
mac_user_422.sdi
binlog.000009

直接挂 MyISAM 时索引状态不一致,因此采用 mysqlbinlog 还原 mac_user 行事件到临时 MySQL,再查询:

SELECT DATE_FORMAT(FROM_UNIXTIME(user_reg_time),'%Y/%c/%e') AS d, COUNT(*) AS c
FROM mac_user
GROUP BY d
ORDER BY c DESC, d ASC
LIMIT 10;SELECT user_id,user_name,INET_NTOA(user_last_login_ip),user_last_login_time,FROM_UNIXTIME(user_last_login_time)
FROM mac_user
WHERE user_name='Ma Hui Mei' OR user_nick_name='Ma Hui Mei';

结果:

2026/4/15  28933
2026/4/16  132324236  Ma Hui Mei  51.43.21.163  1776282701  2026-04-16 03:51:41
2026/4/15
51.43.21.163

16. 未被使用的文件系统

题目选项为:

A. ntfs
B. btrfs
C. xfs
D. lvm

实际证据:

/etc/fstab

里面根分区使用的是 btrfs

UUID=3231e52f-5e15-44c4-b224-e29cb4201c0e / btrfs defaults,subvol=@rootfs 0 0

同时前面还原过程中已经确认底层使用了 LVM

Linux LVM -> /dev/root/data
Linux LVM -> /dev/volum/root

没有看到 ntfsxfs 的使用痕迹。

A、C

也就是:

ntfs
xfs

17. 安装的数据库服务

TiDB 的证据:

/var/lib/lxc/mytidb/config

以及 4000 端口备份数据库版本 8.5.0-alpha,说明存在 TiDB。

PostgreSQL 的证据:

/var/lib/postgresql
/etc/postgresql
/usr/lib/systemd/system/postgresql.service

MySQL 的证据来自 LXC 容器里的数据目录和日志恢复:

/var/lib/mysql/mac2
mac_user.MYD
mac_user.MYI
binlog.000009

GuessDB 没有发现;mariadb 只看到兼容/客户端痕迹,不作为服务选择。

A、C、D
http://www.jsqmd.com/news/720410/

相关文章:

  • 用JavaScript手写一个斗地主残局破解器(附完整源码和递归算法详解)
  • Windows系统调校的艺术:Winhance中文版深度解析与实践指南
  • AI超级员工系统怎么选?这5个问答帮你避开90%的坑 - 速递信息
  • 从‘红字’到‘白屏’:深入浏览器控制台,彻底理解Promise错误捕获机制
  • AVAudioSession 核心实战:后台播放、听筒/扬声器切换与静音键适配全解析
  • R 4.5下microbiome+metagenomeSeq+mixOmics三库协同失效?——2024年首份跨平台多组学整合分析稳定性白皮书
  • 2026年浙江灭火设备厂家权威推荐,烟罩灭火设备/灶台灭火设备/食堂灭火设备/学校食堂灭火设备/厨房灶台灭火设备 - 品牌策略师
  • 基于Matlab的脑电信号处理系统设计与实现:GUI界面、时频域分析、预处理与分解
  • 保姆级教程:在Ubuntu 20.04上搞定ARM交叉编译工具链gcc-arm-8.3-2019.03
  • 山东兴德链条:深耕链板提升机制造 解决多行业爬坡输送痛点 - 奔跑123
  • 告别配对数据烦恼:用EnlightenGAN无监督增强夜间照片,实测效果与避坑指南
  • 为什么你的鸿蒙游戏发布越来越慢?
  • Python+OpenCV实战:用HSV色彩空间轻松实现视频中红色物体追踪(附完整代码)
  • 2026最新火锅企业推荐!国内优质权威榜单发布,成都四川福建等地品牌口碑出众 - 十大品牌榜
  • JVM调优实战:GC日志分析及参数设置避坑大全
  • 连锁品牌做 GEO 该怎么选平台?2026 年多门店多城市场景下的 AI 搜索引擎优化选型建议 - 速递信息
  • 国内大桶灌装生产线厂家实测排行及选型参考 - 奔跑123
  • 举办知识竞赛前期准备完整清单
  • 生意越冷,越要守住「看不见的家底」
  • db-mysql
  • PHP 8.9大文件处理性能跃迁实录(87%内存降低+4.2倍吞吐提升):Fiber协程+Chunked Transfer全链路解析
  • 2026最新串串香品牌推荐!国内优质权威榜单发布,成都福建四川等地品牌口碑出色 - 十大品牌榜
  • 别再死记硬背DTC码了!手把手教你用Python解析故障码(B100016, U007304为例)
  • 北京家教市场乱象调查:从“开盲盒”到“价格刺客”,北师大家教中心已走出一条规范化之路 - 教育资讯板
  • 教育培训行业做 GEO 该找哪家?2026 年知识类场景 AI 搜索引擎优化平台深度评测 - 速递信息
  • 数字文博展馆设计公司全国实力测评:成都汉诺会展实力登榜 - 速递信息
  • 猫抓Cat-Catch:从资源被动获取到数字主权掌控的认知突破
  • 2026年北京专业消杀公司深度横评|臻洁虫控与行业领军品牌对标指南 - 企业名录优选推荐
  • 2026最新麻辣烫厂家推荐!国内优质权威榜单发布,成都福建四川等地品牌口碑出众 - 十大品牌榜
  • 基于Matlab的FFT频谱分析与数字滤波器功能:谐波提取、自定义频段清除及无相位滞后滤波处理...