【2022第四届“长安杯”电子数据取证竞赛】赛后复盘_哔哩哔哩_bilibili
检材一
1 检材1的SHA256值为
直接对检材进行哈希计算
2 分析检材1,搭建该服务器的技术员IP地址是多少?用该地址解压检材2
查看该服务器的登录日志
3 检材1中,操作系统发行版本号为
查看记录操作系统发行版本号的特定文件
查看 Linux 发行版名称和版本号的 8 种方法_chuixue24的博客-CSDN博客_linux查看发行版本
搜索centos-release文件
4 检材1系统中,网卡绑定的静态IP地址为
5 检材1中,网站jar包所存放的目录是
6 检材1中,监听7000端口的进程对应文件名为
试用jd-gui反编译分析jar包
7 检材1中,网站管理后台页面对应的网络端口为
这里我比赛时是在检材二中的微信缓存图片中找到的
其实可以从网站构建配置文件里发现
8 检材1中,网站前台页面里给出的APK的下载地址是
这题我比赛时是在源码里翻到的二维码图片
扫描出来
访问这个网址就会下载一个apk安装包,就是后面的锁机软件了
实际上我发现在微信缓存图片的网站前台图片里也有提示app下载
当然这题也可以把网站搭建起来查看
9 检材1中,网站管理后台页面调用的用户表(admin)里的密码字段加密方式为?
分析admin-api这个jar包
10 分析检材1,网站管理后台登录密码加密算法中所使用的盐值是
检材二
11 检材2中,windows账户Web King的登录密码是
12 检材2中,除检材1以外,还远程连接过哪个IP地址?并用该地址解压检材3
检材一的ip为172.16.80.133,所以还连接过172.168.80.128
13 检材2中,powershell中输入的最后一条命令是
powershell取证 查看历史命令记录文件
Windows Powershell相关(历史命令、命令)_shu天的博客-CSDN博客_powershell历史命令
搜索ConsoleHost_history.txt
14 检材2中,下载的涉案网站源代码文件名为
找浏览器下载记录
15 检材2中,网站管理后台root账号的密码为
在浏览器有登陆过网站后台,记录了密码
16 检材2中,技术员使用的WSL子系统发行版本是
这题我比赛时做的方法时搜索os-release,找到记录操作系统发行版本的文件
但实际上这题安装有两个wsl子系统
但是使用的是20.04,我们找到安装的子系统的目录
可以看见22.04的目录只有8条记录,20.04有很多记录,所以使用的必然是20.04
实际上22.04的版本并未安装
或者仿真用命令wsl -l -v
17 检材2中,运行的数据库服务版本号是
注意这题问的是运行的,所以去子系统中分析
18 上述数据库debian-sys-maint用户的初始密码是
Ubuntu 20.04.3 下设置MySQL8.0的初始密码_HWSTARS的博客-CSDN博客
debian-sys-maint是mysql8.0的一个默认用户,默认密码在debian.cnf文件
19 检材3服务器root账号的密码是
检材三
20 检材3中,监听33050端口的程序名(program name)为
systemctl status docker 查看docker状态是否启动
systemctl start docker 启动docker
netstat -anptl 查看端口进程
21 除MySQL外,该网站还依赖以下哪种数据库
查看历史命令
history | grep mongodb
history | grep redis
22 检材3中,MySQL数据库root账号的密码是
检材一中的admin-api这个jar包里有
或者
查看docker-compose.yml文件
23 检材3中,MySQL数据库在容器内部的数据目录为
同上题 /var/lib/mysql
24 涉案网站调用的MySQL数据库名为
结合后面的题我们知道有数据被删除了
在历史记录中发现删除了/data/mysql下的b1,同时在检材二中可以找到b1
打开是一个数据库,所以调用的数据库就是b1
或者在数据库日志文件也可以发现调用的是b1数据库
25 勒索者在数据库中修改了多少个用户的手机号?
分析数据库日志
26 勒索者在数据库中删除的用户数量为
27 还原被破坏的数据库,分析除技术员以外,还有哪个IP地址登录过管理后台网站?用该地址解压 检材
这个解压密码可以爆破出来,利用PasswareKitForensic,自己用print写一个172.16.80.0-255和192.168.60.0-255的字典
分析数据库日志
或者查看b1数据库
28 还原全部被删改数据,用户id为500的注册会员的HT币钱包地址为
用数据库取证工具分析b1数据库
进行数据分析后找到
29 还原全部被删改数据,共有多少名用户的会员等级为'LV3'
然后再看删除的用户中有多少等级为3
6+158就是164位了
这里要注意,有可能用户等级并不和这里的member_grade_id对应,所以要去网站上看,这里我暂时没有重构网站,之后再看
30 还原全部被删改数据,哪些用户ID没有充值记录
查找balance为0的用户
31 还原全部被删改数据,2022年10月17日总计产生多少笔交易记录?
SELECT * FROM member_transaction WHERE create_time BETWEEN "2022-10-17 00:00:00" AND "2022-10-17 23:59:59"
32 还原全部被删改数据,该网站中充值的USDT总额为
检材四
33 嫌疑人使用的安卓模拟器软件名称是
夜神模拟器的备份系统文件是npbk后缀
对检材四解压
直接分析vmdk,或者可以直接用夜神模拟器导入vmdk文件,打开手机分析
34 检材4中,“老板”的阿里云账号是
35 检材4中安装的VPN工具的软件名称是
或者
36 上述VPN工具中记录的节点IP是
或者
37 检材4中,录屏软件安装时间为
38 上述录屏软件中名为“s_20221019105129”的录像,在模拟器存储中对应的原始文件名为
打开软件找到录像,其视频长16s
根据时间线判断
找到一个0c2f5dd.....的文件,其路径正好是在录频app的数据目录下
用播放器打开比对是一样的
这里正确做法是分析其数据库
在record.db数据库可以找到记录
39 上述录屏软件登录的手机号是
同样在数据库里找,这里要用到db browser for sqlite
因为在取证工具只能看db文件,不能看wal文件
40 检材4中,发送勒索邮件的邮箱地址为
加/解密程序
41 分析加密程序,编译该加密程序使用的语言是
在检材二里可以找到该程序
导出用ida分析,Shiift+F12查看字符串,可以看见有很多py
或者用die
42 分析加密程序,它会加密哪些扩展名的文件?
https://www.jianshu.com/p/9f35a6f7ba05
参考博客先进行反向解析
43 分析加密程序,是通过什么算法对文件进行加密的?
异或
44 分析加密程序,其使用的非对称加密方式公钥后5位为?
pubkey = '-----BEGIN PUBLIC KEY-----\nMIIBIzANBgkqhkiG9w0BAQEFAAOCARAAMIIBCwKCAQEAx5JF4elVDBaakgGeDSxI\nCO1LyyZ6B2TgR4DNYiQoB1zAyWPDwektaCfnvNeHURBrw++HvbuNMoQNdOJNZZVo\nbHVZh+rCI4MwAh+EBFUeT8Dzja4ZlU9E7jufm69TQS0PSseIiU/4Byd2i9BvIbRn\nHLFZvi/VXphGeW0qVeHkQ3Ll6hJ2fUGhTsuGLc1XXHfiZ4RbJY/AMnjYPy9CaYzi\nSOT4PCf/O12Kuu9ZklsIAihRPl10SmM4IRnVhZYYpXedAyTcYCuUiI4c37F5GAhz\nRDFn9IQ6YQRjlLjuOX8WB6H4NbnKX/kd0GsQP3Zbogazj/z7OM0Y3rv3T8mtF6/I\nkwIEHoau+w==\n-----END PUBLIC KEY-----\n'
45 被加密文档中,FLAG1的值是
加密勒索apk程序
46 恶意APK程序的包名为
这个程序在之前我们知道就是网站前端二维码下载下来的那个apk
在检材中也能找到
直接分析
看结果
47 APK调用的权限包括
48 解锁第一关所使用的FLAG2值为
打开jadx反编译
先搜索一波flag
private void OooO00o() {
int i2 = App.OooO0OO.getInt("unlocked", 0);
if ((i2 & 4) != 0) {
this.OooO0OO.setText("哎呀,第三关都通过了,恭喜恭喜,现在你的手机已获得自由!");
this.OooO0Oo.setVisibility(8);
this.OooO0o0.setVisibility(8);
} else if ((i2 & 2) != 0) {
this.OooO0OO.setText("你是怎么通过第二关的???不过还有第三关,现在你手机里任何文档,压缩包,图片,视频都已被加密,请再次联系QQ:90001234进行解密");
this.OooO0Oo.setOnClickListener(this);
this.OooO0o0.setHint("输入解密文件的key");
this.OooO0o0.setText("");
} else if ((i2 & 1) != 0) {
this.OooO0OO.setText("居然通过了第一关,不过还有第二关在等着你,现在你的手机在接下来的时间,会每隔一段时间关闭屏幕,请再次联系QQ:90001234进行解除,期间请勿尝试任何手段破解,否则将触发自毁程序");
this.OooO0Oo.setOnClickListener(this);
this.OooO0o0.setHint("FLAG3:XXXXXXXX");
this.OooO0o0.setText("");
} else {
this.OooO0OO.setText("恭喜,你的手机已被锁,请联系QQ:90001234进行解决,期间请勿尝试任何手段破解,否则将触发自毁程序");
this.OooO0Oo.setOnClickListener(this);
this.OooO0o0.setHint("FLAG2:XXXXXXXX");
this.OooO0o0.setText("");
}
}
下面一关一关看,找对应的if判断,第一关代码里直接有FLAG2
"FLAG2:MATSFRKG".equals(trim2) //判断你输入的是否和FLAG2:MATSFRKG相等
再看第二关
else if (App.OooO0O0.OooO0oo.equals(this.OooO0o0.getText().toString()) && App.OooO0OO.edit().putInt("unlocked", App.OooO0OO.getInt("unlocked", 0) | 2).commit()) {
StringBuilder OooO0OO2 = C0261o0000Oo.OooO0OO(App.OooO0OO.getString("flag16_tkey", ""));
OooO0OO2.append(App.OooO0O0.OooO0oo);
if (App.OooO0OO.edit().putString("flag16_tkey", OooO0OO2.toString()).commit()) {
App.OooO0Oo();
System.out.println("delay lock screen close");
OooO00o();
找一下OooO0是哪里来的
this.OooO0oo = new String(decrypt(OooO0O0.OooO0O0("ffd4d7459ad24cd035611b014a2cccac")));
他是加密了ff4d...这一字符串得来的,这里要编写apk输出,没搞会
50 解锁第三关所需的KEY值由ASCII可显示字符组成,请请分析获取该KEY值
暂时不会