下载并启动虚拟机
请自行去网心云官网下载虚拟机镜像,这里以VMware为例。由于本虚拟机不参与挖矿,导入虚拟机后,分配512M就够了。网卡建议选择仅主机模式,可以禁止程序连接迅雷服务器。一切准备就绪后就可以开机了。开机后,我们可以看到一个简陋而且无法退出的终端,上面显示了虚拟机的ip地址。
dump出虚拟机的内存映像
先挂起虚拟机,点击虚拟机-电源-挂起即可。此时虚拟机会暂停运行,当前的虚拟机状态和内存会保存在磁盘上,我们可以使用VMware自带的一个小工具转换状态文件为虚拟机内存映像。
找到VMware安装目录下的vmss2core.exe,正常安装时,这个文件会在C:\Program Files (x86)\VMware\VMware Workstation下。然后找到网心云虚拟机目录下的vmss和vmem文件,使用vmss2core转换成内存映像,像这样
内存映像为vmss.core0和vmss.core1,保留备用。继续运行虚拟机,然后输入shutdown关机。请文明关机,不要暴力断电,养成好习惯。
把硬盘挂载到其它虚拟机上操作
打开另一个Linux虚拟机,将网心云虚拟机的硬盘添加到此虚拟机中。本人使用Ubuntu server 18.04 系统演示。方便起见,我使用PuTTY登录系统。
sda是虚拟机的硬盘。可以看到,除了作为逻辑分区sda4,其它分区全都加密了,包括boot分区。
提取内存映像中的密钥
我们可以使用cryptsetup luksDump /dev/X (X为磁盘设备文件)命令查看加密属性。 可以看到,分区的主密钥为256位。
在此科普一下,加密分区的是主密钥,而主密钥又被其它密码或密钥文件加密。输入密码或密钥文件可以得到主密钥,而主密钥可以解密硬盘数据。
我们可以利用findaes来查找内存中的aes密钥。下载findaes,解压findaes.exe到网心云虚拟机的目录。
打开cmd,切到网心云虚拟机文件目录,运行
findaes.exe vmss.core1
,稍等一会,就能得到内存中的AES密钥。注意,磁盘的主密钥是256位的,所以128位的密钥没用。内存中只会保存主密钥,并不会保存加密主密钥的密钥。
保存主密钥。命令如下。
printf "密钥" | tr -d ' ' | xxd -r -ps > 密钥文件
保存完成后,可以一个一个密钥试着解密分区。
命令:
cryptsetup open /dev/硬盘设备文件 目标设备文件 --master-key-file 密钥
一阵操作猛如虎,也就解出来三个分区。
让我们先将已解密的硬盘挂载上。进入sda2,讲道理,这里应该就是系统的根分区了。
查看fatab,发现没什么好东西。那我们看看crypttab,发现好东西了。里面写着密钥路径。/boot下面是空的,boot分区还没有解密,里面的密钥拿不到。由于根分区已解密,/.botk下的密钥是可以拿到的。让我们来解密boot分区。注意,这里的密钥不是主密钥。使用
cryptsetup open /dev/设备文件名 目标文件名 -d 密钥
来解密。boot分区成功解密,进入.appk目录拿key。boot目录下.sysk文件夹里面有个key能解密/dev/sda3。至此,磁盘已全部解密。
开启ssh
chroot到根目录,然后输入passwd更改root密码
输入vi /etc/ssh/sshd_config 更改sshd服务,启用root登录,修改监听地址为0.0.0.0
截图里的第三行改为的ListenAddress 0.0.0.0,倒数第三行PermitRootLogin yes去掉前面的#注释。
然后在/etc/rc.local里加入service sshd start。别忘了chmod 755 /etc/rc.local。
关闭Ubuntu虚拟机,打开网心云虚拟机,即可ssh连接。
参考资料
https://foo-manroot.github.io/post/ctf/cybercamp/write-up/2018/12/26/cybercamp-medium-2.html