U盘目录穿越获取车机SHELL - 分析与复现
github上破解日系车机的文章 - https://github.com/ea/bosch_headunit_root
其中有利用 U 盘获取车机 shell 的操作
主要根据下面这篇文章进行环境搭建和复现
U盘目录穿越获取车机 SHELL(含模拟环境) - https://delikely.github.io/2021/06/04/U%E7%9B%98%E7%9B%AE%E5%BD%95%E7%A9%BF%E8%B6%8A%E8%8E%B7%E5%8F%96%E8%BD%A6%E6%9C%BASHELL/
环境准备
掏出我的U盘,不过好像ubuntu不支持
第一个是插入U盘前 第二个是插入U盘后
一般来说 /dev/sda 是指第一个磁盘设备,/dev/sdb 是指第二个磁盘设备,U盘插进去一般就是sdb了,因为虚拟机本身还有一个磁盘
我用blkid命令都不显示 额....
怀疑是不是因为U盘不是ETX4结构的
掏出我的傲梅分区助手,格式化分区
选择EXT4
等待执行完成即可
插入ubuntu虚拟机 可以看到这里已经是ext4类型了
接下来是固件环境的搭建,这里直接使用原博主已经弄好的Dockerfile,在虚拟机里面搭建一个模拟环境(可能这个时候你想说,那我们U盘插进去的时候,是插的虚拟机还是docker容器,答案是使用 --privileged 参数,以特权模式运行容器,即容器内的进程将具有与主机相同的权限。这可以让容器内的进程执行敏感操作,如挂载文件系统等)
我这里没有直接用wget,下载了对应文件传到虚拟机上
接着创建镜像
额这么慢?
不好意思打开方式错了,先改docker镜像源
sudo vi /etc/docker/daemon.json
添加
重启docker
可以看一下更新成功没有
现在再搭建docker,世界终于美好了
接下来运行这个镜像 原文中的命令有点问题 这里使用
OK到这里环境终于OK了
漏洞代码分析
因为我们的docker前面启动设置的原因 所以现在如果插入U盘 会直接挂载到docker容器中 如下
可以看到是在容器中
另外车机的操作系统为 Linux
U 盘等外设热插拔由 udev 实现。udev 是 Linux 系统中的一个设备管理守护进程,全称为 "Userspace Device Manager"(用户空间设备管理器)。它负责监听和管理计算机系统中的硬件设备
配置文件在 /etc/udev 下 。udev 会根据设备的 UUID 和 LABEL,构造挂载点。UUID 是块设备的唯一标识符,LAEBL 是块设备的一个标签
车机中自定义了 U 盘挂载脚本,在 udev 配置文件 /etc/udev/rules.d/local.rules 中 ,指定了由脚本 /etc/udev/scripts/mount.sh 处理
接下来看 mount.sh 的内容
查看主动挂载函数
逐行分析
下面的代码判断U盘的文件系统 ID_FS_TYPE,可识别就继续执行,否则就退出
然后设置mountdir,如果 ID_FS_UUID 不为空则 mountdir 为 ID_FS_UUID,如果 ID_FS_LABEL 不为空则 mountdir 为 ID_FS_LABEL,否则mountdir为disk
拼接一下 /dev/media 就是形成了最终的挂载点。最后使用 mount 命令将 U盘挂载到刚才构造的这个路径上
下面这部分因为我们是ETX4所以可以忽略
然后是真正的挂载操作
$mountdir 这里很关键,刚好是我们能够控制的 而且没有什么过滤操作,存在目录穿越漏洞
咱们接着把挂载脚本看完
我们看挂载成功之后的逻辑 会调用logger命令,我们劫持/usr/bin/之后,可以在U盘里面再写一个logger脚本,导致挂载的时候运行到这里的时候,调用我们的logger脚本,从而实现反弹shell
漏洞利用
因为 $mountdir 没有被过滤,所以可以控制 $mountdir 来实现目录穿越,从而劫持系统中的程序实现任意命令执行
前面 $mountdir 我们可以通过 ID_FS_UUID 和 ID_FS_LABEL 来控制
blkid 命令是一个用于显示块设备(如硬盘、分区等)的文件系统类型和UUID(Universally Unique Identifier)的工具命令。它可以帮助您在 Linux 系统中识别和管理块设备。
可以看到其中
- LABEL 为 EasyU
- UUID 为 7cc162e8-93d7-1f44-bbd6-0d308f113468
我们使用 tune2fs 工具
tune2fs 是一个用于调整和修改 ext2、ext3 和 ext4 文件系统参数的命令行工具。它是 e2fsprogs 软件包(ext2/ext3/ext4 文件系统工具集)中的一部分,常用于 Linux 系统中
使用tune2fs控制UUID
不规范的UUID,所以将其置空
控制 LABEL
看一下成果
暂停docker,在U盘目录下编写logger脚本来进行反弹shell,这里我除了IP,其余直接复制原博主的了
启动docker环境~
最后再插入U盘 ,ubuntu虚拟机拿到反弹shell~ (大功告成
原来的/usr/bin 目录下就被劫持了,只剩下了U盘内容
可以看到反弹shell中我们用 whoami 就找不到命令了
如果想要使用其他的/usr/bin/目录下的命令,就需要把原来/usr/bin 目录的文件(或相同架构的可执行文件)拷贝到 U 盘根目录,这样在劫持了之后才有命令可用
END
建了一个微信的安全交流群,欢迎添加我微信备注进群
,一起来聊天吹水哇,以及一个会发布安全相关内容的公众号,欢迎关注 😃
__EOF__

本文链接:https://www.cnblogs.com/Cl0ud/p/17643514.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)