题目介绍:
There's a very busy bus we've tapped a port onto,surely there is some juicy information hidden in the device memory...somewhere...
环境搭建
sudo make build
sudo make test
socat -v tcp-listen:31340,reuseaddr exec:"docker run --rm -i -e SEED=1234 -e FLAG=flag{skIpn1MnWtBC1DkTFhKBO8yMofVTRU8qUuMxc52jzss1XrnNva6Td2Ex84XJZCoNa6RQKoFYhKPNItMpHtocOxD} bus:challenge"
相关背景知识
I²C协议简单了解
-
START信号和STOP信号都由主设备产生。所有信号以START信号开始,以STOP信号结束。START信号和STOP信号之间的时间认为I²C总线处于忙碌(busy)阶段。 -
I²C有着完善的应答机制,每个字节后面必须跟一个ACK信号或者NAK信号。
-
由于START和STOP是主设备发出的,所在START后的7bit是从设备地址,然后有1bit的读/写标志位,该标志位说明了主设备要对从设备进行读("1")或者写("0")操作,如果对应的从设备在总线上,那该从设备将以ACK信号应答。
分析解题
解法一:
解法二
^82+00+00+1f+00+00+00+12+47+40+41+c6+97+e1+3f+89+81+3f+c1+99+1d+a1+c0+20+18+a1+40+5e+42+ac+3c+.
^83+00+00+3f+.
^82+00+00+3f+00+00+00+20+fa+3f+41+c8+da+e2+3f+a6+64+3f+c1+ff+33+a1+c0+a4+d2+a0+40+de+50+55+40+.
^b4+01+a9+94+c7+59+78+58+87+6b+d3+8e+04+be+2a+47+d4+cc+f8+6e+6c+26+67+a6+98+5e+4a+75+69+63+79+20+44+61+74+61+20+30+33+.
^83+00+00+1f+.
^82+00+00+1f+00+00+00+1d+ec+3f+41+d8+04+e5+3f+67+4e+40+c1+38+1b+a1+c0+e1+dd+a0+40+b9+91+91+3c+.
“
这里一开始我本来是怀疑这个从设备地址书上是不是写错了,看了源码之后发现,在源码中它会将我们输入的第一个字节作为设备地址跟0xfe进行AND操作,发现它的确实地址就是0x82、0x83以及0xb4 ”
第一个字节 | 从设备地址 | 读/写标志位 | I²C语义 |
---|---|---|---|
0x82 | 0x82 | 0 | 写 |
0x83 | 0x83 | 1 | 读 |
0xb4 | 0xb4 | 0 | 写 |
^83+00+00+3f+.
^83+00+00+1f+.
第一个字节 | 从设备地址 | 读/写标志位 | 本题实际语义 |
---|---|---|---|
0x82 | 0x82 | 0 | 读 |
0x83 | 0x83 | 1 | 写 |
0xb4 | 0xb4 | 0 | 读 |
#从ID:0x82的设备读取内容
^82+00+00+1f+00+00+00+12+47+40+41+c6+97+e1+3f+89+81+3f+c1+99+1d+a1+c0+20+18+a1+40+5e+42+ac+3c+.
#向ID:0x82的设备写入内容
^83+00+00+3f+.
#从ID:0x82的设备读取内容
^82+00+00+3f+00+00+00+20+fa+3f+41+c8+da+e2+3f+a6+64+3f+c1+ff+33+a1+c0+a4+d2+a0+40+de+50+55+40+.
#从ID:0xb4的设备读取内容
^b4+01+a9+94+c7+59+78+58+87+6b+d3+8e+04+be+2a+47+d4+cc+f8+6e+6c+26+67+a6+98+5e+4a+75+69+63+79+20+44+61+74+61+20+30+33+.
#向ID:0x82的设备写入内容
^83+00+00+1f+.
#从ID:0x82的设备读取内容
^82+00+00+1f+00+00+00+1d+ec+3f+41+d8+04+e5+3f+67+4e+40+c1+38+1b+a1+c0+e1+dd+a0+40+b9+91+91+3c+.
* OBC (Onboard computer - bus master)
* EEP (Some kind of device which contains "juicy data" + the flag)
* EPS (Electrical power system controller)
^83+00+00+3f+.
^83+00+00+1f+.
-
先对82进行读操作,确认其某个参数是否被设置;82初始状态为:^83+00+00+1f -
发现82某个参数没有被设置,对82进行写操作,将其对应的参数设置 -
再次对82进行读操作,确认该参数被设置 -
对EEP(b4)进行读操作 -
对82进行写操作使其恢复为初始状态,操作为:^83+00+00+1f -
对82进行读操作确认是否恢复初始状态
EEP电源开/关(82) | EPS状态(十六进制) | EPS状态(二进制) |
---|---|---|
关 | 1f | 0001 1111 |
开 | 3f | 0011 1111 |
There's a very busy bus we've tapped a port onto, surely there is some juicy
information hidden in the device memory... somewhere...
The OBC is tying up the bus most of the time.
By looking at the traffic, we see the OBC enabling power to the device,
reading from it (in random areas that don't contain the flag), and
turning it off afterwards. After that, there's a short pause
(a few seconds) before the polling starts again.
“
复现过程中发现20并不唯一,存在多个参数可解;
”
“
这里在关闭了除了EEP的其他设备后,b4后面的参数已经不重要了,对b4的读操作会将EEP中的所有内容都读出来。 复现过程中尝试搞明白为什么在^83+00+00+20.操作过后就能够关闭其他设备,从而直接泄露EEP的全部内容,但是有些操作好像在源码中不能直接看出来,直接略过。有明白的师傅可以交流一下!!! ”
^b4111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
参考文章:
https://cloud.tencent.com/developer/article/2332362
原文始发于微信公众号(山石网科安全技术研究院):【卫星安全系列二】HAS-BUS赛题复现
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论