材料下载

比赛VC容器下载:下载地址-分享密码8v69cb

(容器挂载密码:2022.4th.changancup!)

取证步骤

材料一

1.检材1的SHA256值为?

9E48BB2CAE5C1D93BAF572E3646D2ECD26080B70413DC7DC4131F88289F49E34

直接导入火眼算"检材1.e01"的sha256值.

2. 分析检材1,搭建该服务器的技术员IP地址是多少?用该地址解压检材2

172.16.80.100

火眼查看登录日志即可得出答案,顺手把材料2解压了.

3. 检材1中,操作系统发行版本号为

A、CentOS 7.5.1804

因为检材1是centos系统,用火眼仿真之后,进到虚拟机里使用cat /etc/redhat-release(该命令仅Redhat系有效)即可查看系统发行版本(非内核版本)

4. 检材1系统中,网卡绑定的静态IP地址为

172.16.80.133

系统里尝试ipconfig发现没有该命令,于是使用ip a查看网卡相关信息得出答案(建议查看完后对网卡配置进行修改,改ip到你vm的网段里,方便后续ssh,访问网页等操作)

5. 检材1中,网站jar包所存放的目录是

/web/app/

通过history或者火眼查看历史命令,发现有频繁在/web/app/下操作,打开该目录下确认是jar包存放的目录

6. 检材1中,监听7000端口的进程对应文件名为

cloud.jar

(方法1)比赛当时我看历史记录有启动jar包的历史,于是挨个java -jar XXX.jar运行该目录下的jar包,然后用netstat -napt查看哪个个包开启了7000端口监听,最后排查到了cloud.jar

(方法2)也可使用jd-gui(Github地址)将这几个包反编译查看声明信息,发现cloud.jar配置中有7000端口

7. 检材1中,网站管理后台页面对应的网络端口为

9090

(方法1)当时我是看历史记录,到/web/app/admin里用npm run dev指令运行了管理后台,根据提示访问虚拟机的ip地址:9090端口,发现确实是管理后台

(方法2)可以查看之前用问题2答案解压的检材2,发现其浏览器历史记录有访问过管理后台,其端口为9090

PS:在查看检材2的时候也可以在其虚拟机的D盘发现在检材1历史命令中删除的网站一键启动脚start_web.sh,可以恢复到检材1的/web/app/下,并使用该脚本sh start_web.sh运行整个网站项目

(D盘还有其他文件,但是当时并不知道什么用途,到了检材3才发现有用)

8. 检材1中,网站前台页面里给出的APK的下载地址是

https://pan.forensix.cn/f/c45ca511c7f2469090ad/?dl=1

当时我同样也是到/web/app/web里用npm run dev指令运行,根据提示访问ip地址:3000,页面左上角的二维码扫描即可得出答案

9. 检材1中,网站管理后台页面调用的用户表(admin)里的密码字段加密方式为?

md5

(方法1)登录的时候会出现一个请求到http://172.16.80.133:6010/admin/system/employee/googleAuth/sign/in,我们可以去反编译那几个包搜一下关键词,最后在admin-api.jar里查看到了相关信息,确定是md5加密.

(方法2)反编译admin-api.jar包,查看application.properties配置信息中有md5的key,再关联其他配置确定是md5加密,同时问题10的答案也能出来了

10. 分析检材1,网站管理后台登录密码加密算法中所使用的盐值是

XehGyeyrVgOV4P8Uf70REVpIw3iVNwNs

可参考问题9的方法2

检材二

11. 检材2中,windows账户Web King的登录密码是

135790

12. 检材2中,除检材1以外,还远程连接过哪个IP地址?并用该地址解压检材3

172.16.80.128

用火眼查看到xshell有两个连接,133是检材1的ip,另一个就是我们要的答案

13. 检材2中,powershell中输入的最后一条命令是

ipconfig

PS:这里需要注意,火眼里的系统ssh历史命令其实是误导项(差点踩坑),因为仔细看其实都是linux命令(因为检材2里面还有wsl)

(方法1)最简单粗暴,直接进虚拟机,打开powershell,按向上方向键,即可查看

(方法2)使用火眼或者进虚拟机的C:\Users\Web King\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine目录下,有一个ConsoleHost_history.txt是记录PowerShell的文件,打开即可看到答案

14. 检材2中,下载的涉案网站源代码文件名为

ZTuoExchange_framework-master.zip

通过火眼查看到几条下载记录,然后去github上比对,最后确认是ZTuoExchange_framework-master.zip

15. 检材2中,网站管理后台root账号的密码为

root

同样查看浏览器保存的密码,发现有关后台的账号密码

16. 检材2中,技术员使用的WSL子系统发行版本是?

20.04

直接在powershell里输入wsl -l -v,即可得到

17. 检材2中,运行的数据库服务版本号是

8.0.30

到wsl里看历史命令,发现装有mysql,启动后查看版本

18. 上述数据库debian-sys-maint用户的初始密码是

ZdQfi7vaXjHZs75M

根据网上查到的信息,知道该用户初始密码会保存在/etc/mysql/debian.cnf里(wsl映射到windows目录为C:\Users\Web King\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04LTS_79rhkp1fndgsc\LocalState\rootfs\etc\mysql\debian.cnf)打开即可看到密码

19. 检材3服务器root账号的密码是

h123456

直接可以从检材2中的系统ssh历史命令发现其密码

材料三

20. 检材3中,监听33050端口的程序名为

docker-proxy

打开虚拟机第一件事就是用history查看历史命令,发现大量docker命令,于是启动docker看看,发现就是docker占用的33050端口

21. 除MySQL外,该网站还依赖以下哪种数据库

redis,mongo

(方法一)其实根据检材1的admin-api.jar中的BOOT-INF.classes.application.properties配置文件,可以找到问题21/22/24三问的答案,位置如下图

22. 检材3中,MySQL数据库root账号的密码是

shhl7001

(方法1)参考上一问解法

(方法2)用history发现docker-compose.yml文件出现频率有点高,根据历史命令发现该文件在/data/mysql/下,打开该文件即可得出密码和23题的答案

23. 检材3中,MySQL数据库在容器内部的数据目录为

/var/lib/mysql

参考21,22题解法

24. 涉案网站调用的MySQL数据库名为

b1

参考21题解法

25. 勒索者在数据库中修改了多少个用户的手机号?

3

查看检材3/data/mysql/db目录下的8eda4cb0b452.log文件,搜索关键词update,匹配不多,挨个数,有只有3个

(这里有个坑,登录也会更新数据库信息,如果直接计数,会把那5次登录ip的更新记录也加上了)

26. 勒索者在数据库中删除的用户数量为

28

同样查看8eda4cb0b452.log文件,搜索关键词delete,发现28个匹配

27. 还原被破坏的数据库,分析除技术员以外,还有哪个IP地址登录过管理后台网站?用该地址解压检材4

172.16.80.197

我们在初次进入/data/mysql/db目录下的时候发现并没有检材1中分析出来的数据库b1,发现检材2的D盘中不仅有b1数据库文件夹,还有后端数据库的启动脚本start.sh,美滋滋.

将b1数据库文件恢复到检材3的/data/mysql/db/路径下,将start.sh恢复到检材3.

记得给权限,直接将两者chmod -R 777.

运行start.sh脚本启动数据库后,使用Navicat连到该数据库(记得数据库docker外部接口是33050,别填错了

登录进去后,发现有个admin_access_log表,查看发现有两个ip,分别去解压检材4,发现172.16.80.197是答案

28. 还原全部被删改数据,用户id为500的注册会员的HT币钱包地址为

cee631121c2ec9232f3a2f028ad5c89b

来到member_wallet这个表即可找到

29. 还原全部被删改数据,共有多少名用户的会员等级为'LV3'

164

根据member表信息推测member_grade_id为用户等级,进行筛选,有158条符合(同时别忘了,还要加之前被删除的用户有没有符合的)

因为表中最后一位id为972,所以删除是从973开始,于是8eda4cb0b452.log前5672行没用了,删掉后,从30行到最后也没用,删除.根据特征搜索关键词0, 3, 0计数,加上之前的数,便可得到答案164.

30. 还原全部被删改数据,哪些用户ID没有充值记录

318,989

发现member_wallet表的balance列是充值金额,使用SELECT * FROM member_wallet WHERE balance = 0查询记录为0的用户,得出答案

31. 还原全部被删改数据,2022年10月17日总计产生多少笔交易记录?

1000

使用sql语句SELECT * FROM member_transaction WHERE create_time BETWEEN "2022-10-17 00:00:00" AND "2022-10-17 23:59:59"查询

32. 还原全部被删改数据,该网站中充值的USDT总额为

408228

使用sql语句SELECT SUM(amount) FROM member_transaction查询

检材四

33. 嫌疑人使用的安卓模拟器软件名称是

夜神模拟器

检材4原本是.npbk格式文件,搜了一下发现是夜神模拟器的包名,可以使用解压工具将其解压后放入火眼分析

34. 检材4中,“老板”的阿里云账号是

forensixtech1

使用火眼发现微信聊天中出现了答案

35. 检材4中安装的VPN工具的软件名称是

v2Ray

同样火眼可看,同时36题答案也出来了

36. 上述VPN工具中记录的节点IP是

38.68.135.18

37. 检材4中,录屏软件安装时间为

2022/10/19 10:50:27

在应用列表中按安装时间排序,会发现一个包名com.jiadi.luping,它的安装时间便是

38. 上述录屏软件中名为“s_20221019105129”的录像,在模拟器存储中对应的原始文件名为

0c2f5dd4a9bc6f34873fb3c0ee9b762b98e8c46626410be7191b11710117a12d

到该应用路径分区4\data\com.jiadi.luping\databases,发现有几个数据库,其中在record.db中找到了视频文件的路径信息

39. 上述录屏软件登录的手机号是

18645091802

record.db数据库和其缓存文件record.db-wal使用sqlitestudio打开即可看到

40. 检材4中,发送勒索邮件的邮箱地址为

[email protected]

在材料4的邮箱中可以查到发件人地址

检材五

41. 分析加密程序,编译该加密程序使用的语言是

python

使用ida查询发现很多py关键词,于是推断是使用的python

42. 分析加密程序,它会加密哪些扩展名的文件?

txt.jpg.docx.xls

encrypt_file.exe先使用pyinstxtractor.py提取.

然后使用uncompyle6反编译encrypt_file_1.pyc,输出后复制出来,发现其代码会对txt.jpg.docx.xls格式进行加密

43. 分析加密程序,是通过什么算法对文件进行加密的?

异或

根据刚才的代码,我们会发现其代码逻辑是使用密钥进行异或加密

44. 分析加密程序,其使用的非对称加密方式公钥后5位为?

u+w==

45. 被加密文档中,FLAG1的值是(FLAG为8位字符串,如“FLAG9:QWERT123”)

TREFWGFS

同理,反编译decrypt_file.exe,其代码明晃晃就把密码明文显示出来了(4008003721),再运行decrypt_file.exe用这密码将数据下载地址.docx_encrypted进行解密,打开文档就出现flag了

46. 恶意APK程序的包名为

cn.forensix.changancup

apk包可以通过检材1网站页面的二维码下载,放入雷电app分析工具分析即可

47. APK调用的权限包括

READ_EXTERNAL_STORAGE;WRITE_EXTERNAL_STORAGE;

48. 解锁第一关所使用的FLAG2值为(FLAG为8位字符串,如需在apk中输入FLAG,请输入完整内容,如输入"FLAG9:QWERT123")

MATSFRKG

先连模拟器进行一键脱壳后再用jadx反编译

然后搜索关键词flag2(记得勾选代码搜索和忽略大小写),找到相关位置

flag2就明文存放在这里FLAG2:MATSFRKG,复制到模拟器中,顺利通关

49. 解锁第二关所使用的FLAG3值为(FLAG为8位字符串,如需在apk中输入FLAG,请输入完整内容,如输入"FLAG9:QWERT123")

TDQ2UWP9

50. 解锁第三关所需的KEY值由ASCII可显示字符组成,请请分析获取该KEY值

a_asd./1imc2)dd1234]_+=+

这个我其实不会,不过感谢当时复盘直播的时候有个大佬(具体名字给忘了,十分抱歉,大佬若看见可以回复一下,我表明出处)在留言框里发了一个c++的爆破程序,分享给大家

#include <iostream>
#include <string>
#include <thread>
#include <cstdint>
#include <map>
#include <vector>


unsigned int calc(unsigned int i)
{
	auto p = reinterpret_cast<unsigned char*>(&i);
	unsigned int ret = 0;
	ret = (long)(p[0] << 16);
	ret = ret | ((long)(p[1] << '\b'));
	ret = ret | ((long)(p[2] << 24));
	ret = ((long)p[3]) | ret;
	return ret;
}

std::pair<int64_t, int64_t> OooO(int64_t j, int64_t j2) {
	if (j == 0) {
		return { 0, 1 };
	}
	auto ret = OooO(j2 % j, j);
	return { ((j2 / j) * ret.first) + ret.second, ret.first };
}
void run_range(unsigned int start, unsigned int end)
{
	static const uint32_t oooooo[] = { 1197727163, 1106668241, 312918615, 1828680913, 1668105995, 1728985987 };
	for (unsigned int i = start; i < end; ++i)
	{
		auto ret = calc(i);

		auto ret2 = ((OooO(ret, 4294967296L).first % 4294967296L) + 4294967296L) % 4294967296L;

		for (int j = 0; j < 6; ++j)
		{
			if (oooooo[j] == ret2)
			{
				std::cout << j << ":" << oooooo[j] << ":" << std::string(reinterpret_cast<const char*>(&i), 4) << std::endl;
				break;
			}
		}
	}

}
int main()
{
	std::cout << "hello" << std::endl;

	std::vector<std::thread> thds;
	for (uint32_t i = 0; i < 16; ++i)
	{
		auto start = 0x10000000 * i - 1;
		auto end = 0x10000000 * (i + 1) - 1;
		thds.emplace_back([start, end] {run_range(start, end); });
	}


	for (auto& thd : thds)
	{
		thd.join();
	}

	return 0;
}

运行程序后会有好几段输出,根据每行第一个字符的顺序把可见ascii码拼凑起来就是flag3了a_asd./1imc2)dd1234]_+=+

结语

今年的题目个人感觉比往年难不少,特别是最后程序逆向方面.不过依旧玩的很开心,祝长安杯越办越好!?

当然如果有什么问题,欢迎大家在下方评论区友好交流!!

是一名喜欢每天折腾的咸鱼! 也是一名半退役的算竞摸鱼选手,参与过icpc,天梯赛,蓝桥等比赛.Datawhale 成员及优秀队长 --------------------------------------------------- 认证类: 华为 Harmony OS应用开发者高级认证, NISP 一级认证, H3C NE-RS网络工程师认证 --------------------------------------------------- 荣获奖项荣誉: 第十八届“挑战杯”全国大学生课外学术科技作品竞赛 “揭榜挂帅”专项赛-全国特等奖、 “美亚杯”第八届中国电子取证大赛 三等奖、 “蓝桥杯”国优、 中国高校计算机大赛-团体程序天梯赛 省高校一等奖、 “蓝桥杯”省一等奖、 H3C新华三杯 省三等奖、 中国移动“梧桐杯”大数据创新大赛 省三等奖、 百度 飞桨领航团 金牌团长
最后更新于 2024-01-24