×

基于BLE的IoT智能灯泡的漏洞利用
  

少年不在年少 3683

{{ttag.title}}
将灯泡连接到电源。然后,试着使用智能手机来打开和关闭灯泡,以确保它工作正常。接下来,我们首先要做的是找到目标设备的蓝牙地址。
第1步:我们使用hcitool查找主机附近存在的所有可用的BLE设备。
hcitool lescan
使用hcitool查找主机附近存在的所有可用的BLE设备
在上图中,我们能够看到自己周围的多个设备的蓝牙地址。通过检查后发现,我们的灯泡的蓝牙地址看起来像是88:C2:55:CA:E9:4A,该设备的蓝牙名称是cnligh。
第2步:现在,我们已经知道了目标设备的BD_ADDR(蓝牙地址),接下来就可以使用gatttool来查看目标设备中运行的各种服务了。使用gatttool -I切换到交互模式,然后通过给定的BD_ADDR连接到目标设备。
gatttool -I
connect 88:C2:55:CA:E9:4A
primary
使用gatttool来查看目标设备中运行的各种服务
在上图中,有三个主要的服务在运行,对应于三个UUID。其中,00001800和00001801是Bluetooth SIG定义的服务,而UUID 0000f371则并非由蓝牙SIG定义的服务。
第3步:现在我们可以使用char-desc列出特定UUID(0000f371)中的所有句柄。最好指定attr和end group句柄,就本例而言为0x0010 0xffff
char-desc 0x0010 0xffff
特定的UUID 0xffff的句柄列表
在上图中,我们给出了特定的UUID 0xffff的句柄列表。
通过观察,我们发现服务0xfff1到0xfff9是由制造商定义的,其他的则是由蓝牙技术联盟采用的服务,如主要服务、特征、特征用户描述。如果您想进一步了解服务及其具体的UUID值的话,请参考https://www.bluetooth.com/specifications/gatt/services
第4步:这里有很多句柄同时我们不知道可以向哪些句柄写数据,所以我们尝试用句柄值来读取句柄
char-read-hnd 0x0012
句柄
当我们尝试读取句柄时,会收到如上图所示的错误信息。当然,这里有点难度,因为我们不知道哪些句柄可以读取/写入数据,甚至连数据包的格式都不知道。
为了了解数据包格式和句柄,我们可以嗅探BLE数据包。这方面,Ubertooth是一种有效的工具,可用于BLE流量的主动嗅探。
第5步:利用ubertooth-btle嗅探BLE数据包。为此,我们可以直接使用ubertooth-btle -f命令。如果您有多个设备,可以使用ubertooth-btle -f -t 与目标设备的蓝牙地址。在本例中
ubertooth-btle -f -t88:C2:55:CA:E9:4A
利用ubertooth-btle嗅探BLE数据包
第6步:为了捕获数据包,可以使用以下命令
     
ubertooth-btle -f -t88:C2:55:CA:E9:4A -c smartbulb_dump.pcap
用于捕获由文件名指定的pcap中的数据包
-c用于捕获由文件名指定的pcap中的数据包。
现在打开您的灯泡手机应用程序并连接灯泡。连接成功后,请执行一个动作,如改变灯泡的颜色,ubertooth将捕获所有的数据包。
灯泡的广告包
上图展示的是灯泡的广告包,并且需要注意以下几点
访问地址(AA)为0x8e89bed6,用于管理链路层,它是一个随机数。
它是37频道,专们用于广告的频道之一。
数据包PDU是ADV_IND,意味着它是可连接的,单向的和可扫描的。
AdvA id是88:c2:55:ca:e9:4a,这只是广告设备的BD_ADDR
Type 01标志表示AdvA地址是随机的。
如果仔细观察上图,我们将注意到这里有两个值——来自目标设备的扫描响应(SCAN_RSP)和来自应用程序的扫描请求(SCAN_REQ)
SCAN_REQ
ScanA是一个6字节的扫描地址,TxAdd指示它是随机值还是公共地址
AdvA是一个6字节的广告地址,PDU中的RxAdd表示地址是公共的还是随机的
SCAN_RES
AdvA是一个6字节的广告地址,TxAdd表示地址的类型,是随机的还是公开的
ScanRspData是来自广告客户的可选广告数据
Connec_REQ
Connec_REQ
下图展示的是嗅探到的数据
嗅探到的数据
第7步:下面使用wireshark分析捕获的数据包,首先启动wirehark,然后打开捕获的pcap文件。
使用wireshark分析捕获的数据包
这时,它将显示所有捕获的数据包。
第8步:现在我们需要在这些捕获的数据包中查找ATT数据包。其中,最简单的方法就是使用wireshark中的过滤器选项,即键入btl2cap.cid == 0x004
查找ATT数据包
如果我们观察上图,会发现这里只有ATT数据包和数据包方面的信息。
第9步:这里,我们在改变灯泡的颜色的同时已经捕获了数据包,所以让我们来研究一下写请求数据包。

现在我们知道数据将被写入句柄0x0012,该句柄属于我们需要弄清楚的某个UUID。
第10步:如果我们分析特定的写请求包,我们可以发现相应的访问地址、CRC值、操作码、句柄和UUID

在上图中我们可以看到
访问地址:0xaf9a9515
主从地址
CRC:0x6dcb5
句柄:0x0012
UUID:0xfff1
值:03c90006000a03000101000024ff000000006

报头长度为2字节,它紧随PDU之后
模式选择是硬编码的,用于控制灯的颜色
0024ff是RGB值,如果改变这6个字节的内容,就可以获得所需的颜色
第11步:我们可以使用gatttool将值写入特定句柄或UUID,
char-write-req 0x0012 03c90006000a03000101000024ff00000000 //bluish green
char-write-req 0x0012 03c90006000a0300010100ff000000000000 // Red
char-write-req 0x0012 03c90006000a030001010000ff0000000000 //Green
char-write-req 0x0012 03c90006000a03000101000000ff00000000 // Blue
char-write-req 0x0012 03c90006000a03000101000024ff00000000 //bluish green
char-write-req 0x0012 03c90006000a0300010100ff000000000000 // Red
char-write-req 0x0012 03c90006000a030001010000ff0000000000 //Green
char-write-req 0x0012 03c90006000a03000101000000ff00000000 // Blue
第12步:若要打开和关闭灯泡,可以更改数据中的开/关位
char-write-req 0x0012 03c90006000a030101010000000000000000 //Off
char-write-req 0x0012 03c90006000a0300010100ff000000000000 //On
char-write-req 0x0012 03c90006000a030101010000000000000000 //Off
char-write-req 0x0012 03c90006000a0300010100ff000000000000 //On
03c90006000a030101010000000000000000将关闭灯泡,RGB值应为零,否则灯泡不会关闭
03c90006000a0300010100ff0000000000000将打开灯泡,这里RGB值是强制性的。

打赏鼓励作者,期待更多好文!

打赏
79人已打赏

头像被屏蔽
三个火枪手 发表于 2017-5-10 10:48
  
提示: 作者被禁止或删除 内容自动屏蔽
深拥 发表于 2017-5-10 10:59
  
太长不看
大宝张 发表于 2017-5-10 11:04
  
继续学习下啊
只是想改个名称 发表于 2017-5-10 11:09
  
66666666666666666
feeling 发表于 2017-5-10 11:12
  
这个有什么用
粉色的小猪在天上飞 发表于 2017-5-10 12:01
  
666666666666
哥丶珍藏版 发表于 2017-5-10 15:16
  
复制的不错
发表新帖
热门标签
全部标签>
技术盲盒
西北区每日一问
安全效果
每日一问
干货满满
新版本体验
【 社区to talk】
技术笔记
功能体验
技术咨询
产品连连看
标准化排查
GIF动图学习
2023技术争霸赛专题
每周精选
信服课堂视频
通用技术
自助服务平台操作指引
秒懂零信任
技术晨报
安装部署配置
答题自测
原创分享
升级&主动服务
社区新周刊
POC测试案例
畅聊IT
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
排障那些事
高手请过招
高频问题集锦
全能先锋系列
云化安全能力

本版达人

新手68983...

本周分享达人

零和一网络

本周提问达人