首页
社区
课程
招聘
[原创]基于树莓派的蓝牙调试环境搭建
2023-3-25 01:45 20878

[原创]基于树莓派的蓝牙调试环境搭建

2023-3-25 01:45
20878

前言

img
从nazo✌那里借来一块树莓派,准备在上面搭建一个蓝牙嗅探/扫描环境以供蓝牙的研究

通过SD卡烧录镜像

官方网站:https://www.raspberrypi.com/

下载并使用烧录软件

官网->firmware:然后选择符合你系统型号(windows/linux/mac)的烧录软件
运行起来是这个效果:
img
镜像版本我选择的是官方的镜像:
img
按shift+ctrl+x有镜像的一些初始化配置:
img
烧录完成过后将SD卡插入树莓派然后连上typec供电开机即可:
img

开机后的操作

上图左边的那根线是micro HDMI线,另一头连接的是一块便携屏,开机过后便携屏上就有画面了:
img
当然如果没有便携屏的话,也可以在烧录的时候(按ctrl+shift+x)添加ssh和wifi的选项,然后开机后默认会连上你选择的wifi(默认是你电脑连的wifi)
然后进入路由器的管理页面查看树莓派的ip(当然也可以扫一下自己的路由ip),然后就能ssh连上去了:
img
但是像wireshark这种需要图形化显示的软件,直接ssh没办法做到
这个时候可以使用VNC Viewer等软件进行一个远程桌面的显示
不过可能有延迟,笔者还没有试过,大家如果有需要可以试试看,这里就不赘述

安装蓝牙嗅探的依赖

换源

这里我选择的是中科大源
在中科大的开源镜像站里搜索
img
点进去按它的教程执行如下指令:

1
2
3
sudo sed -i 's|//archive.raspberrypi.org|//mirrors.ustc.edu.cn/archive.raspberrypi.org|g' /etc/apt/sources.list.d/raspi.list
sudo apt-get update
sudo apt upgrade

(ps:在用sudo之前需要通过sudo passwd root来设定root密码)

按装蓝牙依赖

1
2
sudo apt-get install cmake libusb-1.0-0-dev make gcc g++ libbluetooth-dev \
pkg-config libpcap-dev python-numpy python-pyside python-qt4

安装ubertooth one蓝牙嗅探软件

笔者使用的嗅探设备为ubertooth one:
img
比较好的就是它有配套的软件,并且可以通过wireshark直接抓包
官方文档:https://ubertooth.readthedocs.io/en/latest/index.html
按照"Build guide"、"firmware"、"wireshark"一栏慢慢安装
首先安装libbtbb:

1
2
3
4
5
6
7
8
9
wget https://github.com/greatscottgadgets/libbtbb/archive/2020-12-R1.tar.gz -O libbtbb-2020-12-R1.tar.gz
tar -xf libbtbb-2020-12-R1.tar.gz
cd libbtbb-2020-12-R1
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig

然后安装ubertooth tools:

1
2
3
4
5
6
7
8
9
wget https://github.com/greatscottgadgets/ubertooth/releases/download/2020-12-R1/ubertooth-2020-12-R1.tar.xz
tar -xf ubertooth-2020-12-R1.tar.xz
cd ubertooth-2020-12-R1/host
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig

安装wireshark以及ubertooth插件:

1
2
3
4
5
6
7
sudo apt-get install wireshark wireshark-dev libwireshark-dev cmake
cd libbtbb-2020-12-R1/wireshark/plugins/btb
mkdir build
cd build
cmake -DCMAKE_INSTALL_LIBDIR=/usr/lib/arm-linux-gnueabihf/wireshark/plugins/ ..
make
sudo make install

安装经典蓝牙插件:

1
2
3
4
5
6
7
sudo apt-get install wireshark wireshark-dev libwireshark-dev cmake
cd libbtbb-2020-12-R1/wireshark/plugins/btbredr
mkdir build
cd build
cmake -DCMAKE_INSTALL_LIBDIR=/usr/lib/arm-linux-gnueabihf/wireshark/plugins/ ..
make
sudo make install

添加wireshark权限:

1
2
3
4
sudo groupadd wireshark
sudo chgrp wireshark /usr/bin/dumpcap
sudo chmod 4755 /usr/bin/dumpcap
sudo gpasswd -a 你的用户名 wireshark

嗅探

使用"mkfifo file_name"或者"mknod file_name p"创建管道文件
然后在wireshark里按如下方式点击配置:
img
然后点击OK->start即可到达一个空白页面
(ps:在browser里可能会出现查找不到/tmp/pipe的情况,直接回车然后OK->start即可)
然后在命令行里输入:

1
ubertooth-btle -f -c /tmp/pipe

即可看到wireshark里的蓝牙抓包信息:
img

扫描和连接

嗅探其实是一个帮助我们分析的过程,实际上与一个设备通信的关键是获取通信设备的MAC地址以及与它建立连接
这个过程同时也需要一定的硬件支持,不然可能会出现连不上的问题(参考今年西湖的10cm蓝牙2333)
于是我使用了一个蓝牙适配器,连完过后我的树莓派已经全副武装了hhh:
img
执行"hciconfig -a"指令:
img
这个hci1就是我们的蓝牙适配器了

扫描

通过bluetoothctl进行扫描,就能捕获到周围的蓝牙设备:
img
当然你也可以使用hcitool lescan,不过效果可能没有那么好:
img
有些设备是会显示设备名的,而有些设备可能就是unknown,这种情况可能就需要你带着你的蓝牙设备去一个偏僻无人的角落进行抓包获取MAC地址了XD

连接

可以通过如下命令与设备建立连接:

1
gatttool -b MAC地址 -I

img
通过help我们能看出可以选择的命令
我们比较关心几个东西:
(1)连接/断开:对应着connect和disconnect
(2)发送消息:

1
char-write-req handle value:将value写到handle句柄

(3)读取消息:

1
char-read-hnd handle:读取handle句柄中的数值

(4)获取服务和特征值:primary和characteristics
当然命令也不止这几个,但这几个是相对比较常用的,如有其它需求,也可以参考help自行使用

后续工作

做好准备工作过后,我们就正式开始对一个蓝牙设备的攻击研究了
首先需要通过嗅探获取蓝牙报文,然后分析达成特定功能的报文处理的格式
然后通过gatttool连接到设备,发送同样格式的报文即可完成中间人攻击
后续会结合相应的例子具体分析,敬请期待~

参考文章

https://zhuanlan.zhihu.com/p/344447077


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

最后于 2023-3-28 11:36 被Nameless_a编辑 ,原因:
收藏
点赞9
打赏
分享
最新回复 (8)
雪    币: 3473
活跃值: (5980)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
e*16 a 2 2023-3-26 19:56
2
0
厉害
雪    币: 10421
活跃值: (6504)
能力值: ( LV12,RANK:214 )
在线值:
发帖
回帖
粉丝
neilwu 1 2023-3-27 16:00
3
0
经典蓝牙报文都是加密的 如何中间人呢
雪    币: 11973
活跃值: (15270)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2023-3-27 17:57
4
0
感谢分享
雪    币: 3306
活跃值: (1882)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wogao 2023-3-28 09:39
5
0
发现一个笔误:读取消息的命令是char-read-hnd,而不是char-read-hhd,
雪    币: 5179
活跃值: (10208)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
Nameless_a 4 2023-3-28 11:37
6
0
wogao 发现一个笔误:读取消息的命令是char-read-hnd,而不是char-read-hhd,[em_1]
感谢指出,已经修复
雪    币: 10951
活跃值: (7703)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
ztree 6 2023-5-10 01:33
7
0
tql   想问问这个树莓派是什么型号的?
雪    币: 5179
活跃值: (10208)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
Nameless_a 4 2023-5-10 07:06
8
0
ztree tql 想问问这个树莓派是什么型号的?
4b
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_modsgtws 2024-3-19 15:43
9
0
你好,可以加个联系方式沟通一下这篇内容嘛?有偿
游客
登录 | 注册 方可回帖
返回