题目附件链接:https://wwi.lanzoup.com/b017uwjrc 密码:yichen

CVVD2022:蓝牙钥匙的春天

下载下来是一个蓝牙流量包,随便翻翻发现存在 SMP 协议,全称是 Secure Manager Protocol,是蓝牙用来定义配对和密钥分发的

image.png
image.png

配对后的流量是被加密的,但是有个工具 crackle 是可以解密这种数据包的,这个工具解密蓝牙流量有三个前提,这也在官方的 FAQ 中提到了:
https://github.com/mikeryan/crackle/blob/master/FAQ.md

image.png
image.png

首先要有完整的配对过程流量,要使用链路层加密(有些开发者会自己实现加密),且只适合于传统配对(legacy pairing)
安装 crackle

1
2
3
4
git clone https://github.com/mikeryan/crackle.git
cd crackle
make
make install

如果提示下图则需要安装相关依赖 sudo apt-get install libpcap-dev

image.png
image.png

安装完成后我们使用 crackle 解密发现如下提示,它不支持 BLUETOOTH_LE_LL

image.png
image.png

但是在它的 issues 中发现有人讨论过这个问题

image.png
image.png

用这个人的 crackle 再解一遍发现已经可以识别

image.png
image.png

加个参数 -o 可以保存出解密的数据包

1
crackle -i uploads_2022_04_11_h5kAcZEg_ble.pcapng -o de.pcapng
image.png
image.png

保存出来的数据包用 wireshark 打开后发现了一些值

image.png
image.png

把这些值提取出来之后发现一共有四组不同的,对他们进行两次十六进制编码后拼接,得到了 flag

image.png
image.png
image.png
image.png

未知比赛:low_energy_crypto

仿的 Cyber Apocalypse 2021 Low Energy Crypto
wireshark 打开后并没有发现类似上一题那样的配对流量,但是翻了翻流量,发现了一些交互,RX 收到了下面这些信息

image.png
image.png
image.png
image.png

复制出来是一个公钥,直接保存为 pub.key:

1
2
3
4
5
-----BEGIN PUBLIC KEY-----
MGowDQYJKoZIhvcNAQEBBQADWQAwVgJBAKKPHxnmkWVC4fje7KMbWZf07zR10D0m
B9fjj4tlGkPOW+f8JGzgYJRWboekcnZfiQrLRhA3REn1lUKkRAnUqAkCEQDL/3Li
4l+RI2g0FqJvf3ff
-----END PUBLIC KEY-----

往下翻翻,发现了一些 TX 的数据,应该是用私钥加密后发出来的

image.png
image.png

密码学不太懂,直接用 RsaCtfTool 来解密,把密文复制出来的时候选择 as a Hex Stream:

image.png
image.png

然后用 winhex 创建一个新文件 enc,直接贴过来 ASCII Hex 格式

image.png
image.png
1659949119577_552D9D9E-A7F7-49b9-A8C9-26E0008C7A22.png
1659949119577_552D9D9E-A7F7-49b9-A8C9-26E0008C7A22.png

然后把后面的一堆 0 删掉,它正好是对齐的

image.png
image.png

python RsaCtfTool.py --publickey ./pub.key --uncipherfile ./enc直接跑出来

image.png
image.png