首页
社区
课程
招聘
[原创]获取虚拟机的shell
发表于: 2024-4-11 19:29 10471

[原创]获取虚拟机的shell

2024-4-11 19:29
10471

很多读者可能会问,为什么要获取虚拟机shell?虚拟机不是自带root权限的shell嘛?实际上很多商业产品,商业防火墙,商业waf,商业邮件服务都是通过软件虚拟机进行部署的。而这类具有商业性质的产品都不会直接给一个root shell。但是作为安全研究人员,白盒审计要比黑盒测试的效率高的多,因此获取此类虚拟机的root shell,进行代码审计和漏洞挖掘是非常有必要的。

大多数产品会使用定制化的linux虚拟机部署产品,因为基于linux的开发环境和组件已经十分成熟了。虚拟机的磁盘中保存了所有的后端逻辑代码,但是不同的厂家的安全措施做的不同,有的厂家会对虚拟机磁盘进行加密,而有的则不会。

一般来说可以通过下面几种方式进行磁盘挂载

通常可以结合diskgenius查看分区信息,然后决定挂载那个分区

所谓patch文件系统获得shell,其实是通过对磁盘进行挂载,修改系统的启动逻辑,增加一个telnet或者ssh启动进程,在系统启动后,研究人员可以通过ssh或者telnet拿到一个调试shell,而不影响系统的正常运行。但是patch文件系统需要对磁盘进行挂载,下面针对两种情况进行样例分析。

如果磁盘本身没有进行加密,那么可通过直接挂载磁盘然后修改rc.local 等启动脚本,更改启动逻辑或者添加用户。

本来想直接更改文件系统中的/etc/passwd 和 /etc/shadow 然后开启sshd获取root shell,但是修改后没有正常启动,经过分析发现固件启动时会更换内核及文件系统

因为需要对INITRD.gz 文件系统进行修改。可以挂载INITRD修改后对应的文件系统,然后使用guestmount挂载虚拟机磁盘并更新INITRD.gz。

修改INITRD.GZ

如果磁盘经过了加密,那么就需要通过调试的手段,获取加密密钥,然后对磁盘进行解密,然后在进行挂载和修改。

首先挂载磁盘,发现磁盘被加密

使用7zip解压后发现多个镜像使用了luks加密

且使用了grub引导,根据grub配置文件发现kernel为/xen/pvboot-x86_64.elf,其中有一些新的grub配置信息

因此可以确定是使用了luks对磁盘进行加密,然后在启动时对磁盘进行cryptomount,所以如果能够恢复密钥,那么就可以对文件系统进行patch,开启root shell。通过对luks的加解密关键函数进行定位可以找到boot分区下的luks.mod 对应了insmod luks

根据grub_crypto_pbkdf2的定义可知,a4为密钥,因此调试时,dump出a4的值即可。这里根据链接1使用kvm进行调试,流程如下,新建虚拟机使用/dev/nbd0作为磁盘导入,然后使用virsh edit vm1

将第一行替换为

devices标签后加入

需要让虚拟机启动时找不到文件,从而进入救援模式,然后恢复文件,进行正常的grub引导和调试

通过检索字符串,只发现了一处显然不是正确的函数地址,但是查看此地址的后面的值,发现是连续的字符串

然后根据汇编代码进行find

因此可以在0x3ff56890处下断点

然后再断点处,dump $rdx 处的值即可

实际上通过对luks.mod的逆向,可以发现luks的密钥生成逻辑是对luks的header进行了异或操作,然后得到luks的密钥。然后使用密钥进行挂载。详见链接2

在实际漏洞挖掘的过程中遇到了一个产品,也是使用了加密的文件系统

其grub的配置为

可以看到使用了decrypt_initrd的参数,加密格式也是luks

通过对decrypt_initrd进行定位,首先将kernel.img进行解压提取其中发现了decryt_initrd等参数

其中有一个debug字段以及quiet字段,其中quiet是一个内核启动参数,大胆的猜测debug参数也是一个内核启动时的参数,使用qemu启动内核

开启debug后可以看到一系列的日志信息,其中可以看到decrypt的日志信息,根据关键字定位逻辑

定位到解密逻辑

继续跟进decrypt函数,发现其接受两个参数,很容易联想到其中一个参数为密文,一个为密钥


[课程]Android-CTF解题方法汇总!

收藏
免费 15
支持
分享
最新回复 (8)
雪    币: 5921
活跃值: (633)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这类文章好少,终于有人愿意分享了
2024-4-12 06:39
0
雪    币: 2364
活跃值: (30676)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2024-4-12 09:21
1
雪    币: 1255
活跃值: (156)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
nszy007 这类文章好少,终于有人愿意分享了
2024-4-12 09:39
0
雪    币: 2143
活跃值: (2677)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
好文章,狠狠学习
2024-4-12 11:53
0
雪    币: 2621
活跃值: (2433)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
6

6啊,patch内存我是没想到

2024-4-12 13:46
0
雪    币: 8848
活跃值: (6030)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
666
2024-4-12 20:24
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
666666
2024-4-15 18:54
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢分享
2024-4-15 20:26
0
游客
登录 | 注册 方可回帖
返回
//