题目附件链接:https://wwi.lanzoup.com/b017uwjrc 密码:yichen
CVVD2022:蓝牙钥匙的春天
下载下来是一个蓝牙流量包,随便翻翻发现存在 SMP 协议,全称是 Secure Manager Protocol,是蓝牙用来定义配对和密钥分发的
配对后的流量是被加密的,但是有个工具 crackle 是可以解密这种数据包的,这个工具解密蓝牙流量有三个前提,这也在官方的 FAQ 中提到了:
https://github.com/mikeryan/crackle/blob/master/FAQ.md
首先要有完整的配对过程流量,要使用链路层加密(有些开发者会自己实现加密),且只适合于传统配对(legacy pairing)
安装 crackle
1 | git clone https://github.com/mikeryan/crackle.git |
如果提示下图则需要安装相关依赖 sudo apt-get install libpcap-dev
安装完成后我们使用 crackle 解密发现如下提示,它不支持 BLUETOOTH_LE_LL
但是在它的 issues 中发现有人讨论过这个问题
用这个人的 crackle 再解一遍发现已经可以识别
加个参数 -o 可以保存出解密的数据包
1 | crackle -i uploads_2022_04_11_h5kAcZEg_ble.pcapng -o de.pcapng |
保存出来的数据包用 wireshark 打开后发现了一些值
把这些值提取出来之后发现一共有四组不同的,对他们进行两次十六进制编码后拼接,得到了 flag
未知比赛:low_energy_crypto
仿的 Cyber Apocalypse 2021 Low Energy Crypto
wireshark 打开后并没有发现类似上一题那样的配对流量,但是翻了翻流量,发现了一些交互,RX 收到了下面这些信息
复制出来是一个公钥,直接保存为 pub.key:
1 | -----BEGIN PUBLIC KEY----- |
往下翻翻,发现了一些 TX 的数据,应该是用私钥加密后发出来的
密码学不太懂,直接用 RsaCtfTool 来解密,把密文复制出来的时候选择 as a Hex Stream:
然后用 winhex 创建一个新文件 enc,直接贴过来 ASCII Hex 格式
然后把后面的一堆 0 删掉,它正好是对齐的
python RsaCtfTool.py --publickey ./pub.key --uncipherfile ./enc
直接跑出来