直接对检材进行哈希计算
查看该服务器的登录日志
查看记录操作系统发行版本号的特定文件
查看 Linux 发行版名称和版本号的 8 种方法_chuixue24的博客-CSDN博客_linux查看发行版本
搜索centos-release文件
试用jd-gui反编译分析jar包
这里我比赛时是在检材二中的微信缓存图片中找到的
其实可以从网站构建配置文件里发现
这题我比赛时是在源码里翻到的二维码图片
扫描出来
访问这个网址就会下载一个apk安装包,就是后面的锁机软件了
实际上我发现在微信缓存图片的网站前台图片里也有提示app下载
当然这题也可以把网站搭建起来查看
分析admin-api这个jar包
检材一的ip为172.16.80.133,所以还连接过172.168.80.128
powershell取证 查看历史命令记录文件
Windows Powershell相关(历史命令、命令)_shu天的博客-CSDN博客_powershell历史命令
搜索ConsoleHost_history.txt
找浏览器下载记录
在浏览器有登陆过网站后台,记录了密码
这题我比赛时做的方法时搜索os-release,找到记录操作系统发行版本的文件
但实际上这题安装有两个wsl子系统
但是使用的是20.04,我们找到安装的子系统的目录
可以看见22.04的目录只有8条记录,20.04有很多记录,所以使用的必然是20.04
实际上22.04的版本并未安装
或者仿真用命令wsl -l -v
注意这题问的是运行的,所以去子系统中分析
Ubuntu 20.04.3 下设置MySQL8.0的初始密码_HWSTARS的博客-CSDN博客
debian-sys-maint是mysql8.0的一个默认用户,默认密码在debian.cnf文件
systemctl status docker 查看docker状态是否启动
systemctl start docker 启动docker
netstat -anptl 查看端口进程
查看历史命令
history | grep mongodb
history | grep redis
检材一中的admin-api这个jar包里有
查看docker-compose.yml文件
同上题 /var/lib/mysql
结合后面的题我们知道有数据被删除了
在历史记录中发现删除了/data/mysql下的b1,同时在检材二中可以找到b1
打开是一个数据库,所以调用的数据库就是b1
或者在数据库日志文件也可以发现调用的是b1数据库
分析数据库日志
这个解压密码可以爆破出来,利用PasswareKitForensic,自己用print写一个172.16.80.0-255和192.168.60.0-255的字典
分析数据库日志
或者查看b1数据库
用数据库取证工具分析b1数据库
进行数据分析后找到
然后再看删除的用户中有多少等级为3
6+158就是164位了
这里要注意,有可能用户等级并不和这里的member_grade_id对应,所以要去网站上看,这里我暂时没有重构网站,之后再看
查找balance为0的用户
SELECT * FROM member_transaction WHERE create_time BETWEEN "2022-10-17 00:00:00" AND "2022-10-17 23:59:59"
夜神模拟器的备份系统文件是npbk后缀
对检材四解压
直接分析vmdk,或者可以直接用夜神模拟器导入vmdk文件,打开手机分析
或者
或者
打开软件找到录像,其视频长16s
根据时间线判断
找到一个0c2f5dd.....的文件,其路径正好是在录频app的数据目录下
这里正确做法是分析其数据库
在record.db数据库可以找到记录
同样在数据库里找,这里要用到db browser for sqlite
因为在取证工具只能看db文件,不能看wal文件
在检材二里可以找到该程序
导出用ida分析,Shiift+F12查看字符串,可以看见有很多py
或者用die
https://www.jianshu.com/p/9f35a6f7ba05
参考博客先进行反向解析
异或
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'
这个程序在之前我们知道就是网站前端二维码下载下来的那个apk
在检材中也能找到
直接分析
看结果
打开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输出,没搞会
暂时不会