本帖最后由 rainmote 于 2021-9-14 14:43 编辑
有台小米音箱万能遥控版,型号是LX05A,探索如何进行自定义指令,比如控制kodi,iptv切换频道等。
如何利用串口TTL登陆shell环境?
经过探索我一共试过2种方法:
1. 利用SN计算密码
看到一篇帖子提到最新已经失效,我目前没遇到。
可以利用已知的几个uuid+自己的SN试试。
import hashlib
sn = '换成你的SN'
def calc(uuid):
md5 = hashlib.md5()
md5.update(str(sn + uuid).encode())
s = md5.hexdigest()
print(s.lower()[:14])
calc('9C78089F-83C7-3CDC-BCC9-93B378868E7F')
calc('B0168A6D-119A-F21A-DA58-980732F80A19')
calc('5775B10D-15C0-7827-97B9-88EA07FCA97A')
# 7745c21148c36d
# a0ccbd2c6c2e46
# 88e3bb3369a90c
2. 利用uboot修改启动参数
这里启动需要登陆主要原因是/etc/inittab里面有
::askconsole:/bin/ash --login
把--login参数去掉就好了,当然我们没改固件当然没法直接改。
这里就需要先进入uboot,修改启动参数来实现。
小米uboot做了部分加固,默认启动按任意键进入uboot被屏蔽了。
经过探索,在uboot启动过程中可以不断发送stopgs来强制进入uboot,我是用coolterm这个串口工具提前输出好字符串一直回车发送成功进入。
进入之后,利用env print打印环境变量,发现有2个系统启动参数(小米音箱可能都是两个),可以发现setargs_first和setargs_second里面有init参数。
经过尝试,修改second启动参数来测试:
setenv setargs_second setenv bootargs console=ttyS0,115200 root=/dev/nande rootwait init=/bin/ash cma= loglevel=8 partitions=env@nanda:kernel1@nandb:rootfs1@nandc:kernel2@nandd:rootfs2@nande:misc@nandf:private@nandg:crashlog@nandh:UDISK@nandi
然后启动
run setargs_second boot_second
如果正常就会直接进入ash的shell环境中。
另外,uboot里可以把启动时delay 0修改为3,然后保存,下次就可以按任意键进入uboot了。
如何dump出rootfs文件系统?
进入系统,发现除了/data目录外,其他都是只读的,为了能ssh登陆或者取消登陆等,我们需要修改/etc/下面一些配置。
首先看下rootfs对应的设备
/ # cd /dev/by-name/
/dev/by-name # ls -ltr
lrwxrwxrwx 1 root root 10 Jan 1 1970 rootfs2 -> /dev/nande
lrwxrwxrwx 1 root root 10 Jan 1 1970 rootfs1 -> /dev/nandc
lrwxrwxrwx 1 root root 10 Jan 1 1970 private -> /dev/nandg
lrwxrwxrwx 1 root root 10 Jan 1 1970 misc -> /dev/nandf
lrwxrwxrwx 1 root root 10 Jan 1 1970 kernel2 -> /dev/nandd
lrwxrwxrwx 1 root root 10 Jan 1 1970 kernel1 -> /dev/nandb
lrwxrwxrwx 1 root root 10 Jan 1 1970 env -> /dev/nanda
lrwxrwxrwx 1 root root 10 Jan 1 1970 crashlog -> /dev/nandh
lrwxrwxrwx 1 root root 10 Jan 1 1970 UDISK -> /dev/nandi
我们找一个可以写的(且比较大的)目录,利用dd把rootfs2 dump出来
/dev/by-name # df -h
Filesystem Size Used Available Use% Mounted on
rootfs 24.0M 24.0M 0 100% /
/dev/root 24.0M 24.0M 0 100% /
tmpfs 60.1M 6.7M 53.4M 11% /tmp
tmpfs 512.0K 0 512.0K 0% /dev
/dev/by-name/UDISK 23.2M 2.2M 19.8M 10% /data
/dev/by-name/UDISK 23.2M 2.2M 19.8M 10% /etc/shadow
/dev/by-name # dd if=/dev/nande of=/tmp/rootfs2.img
接着我们利用scp把rootfs2.img复制到其他电脑上,安装squashfs工具,利用unsquashfs来解压出来,比如把/etc/inittab改下,然后再用squashfs压缩回去
unsquashfs -s old.img
注意压缩的-b 262144是上面unsquashfs -s old.img命令输出的block size。
修改且打包好了,再用scp传会到/tmp目录,然后利用dd刷进去。
dd if=/tmp/new.img of=/dev/nande bs=1024
然后重启,进入uboot,切换到系统2启动起来。
如何抓https包?
抓https包核心就是把自签名证书导入到设备中,不校验(忽略)HTTP证书问题的请求就比较方便了。
把burp证书导出,利用openssl转成crt格式。
然后计算hash值
openssl x509 -inform PEM -subject_hash -in burp.crt
在把证书拷贝到/etc/ssl/certs,利用ln -sf burp.crt xxxxxx.0建立软连接。
证书安装完就可以转包了,可以利用电脑分享热点。
然后使用iptables把http/https流量镜像/转发到burp的8080端口,镜像用TEE模块
iptables -t nat -A PREROUTING -p tcp -s 192.168.100.2 --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -p tcp -s 192.168.100.2 --dport 443 -j REDIRECT --to-port 8080
跨机器用DNAT或者在设备上利用route命令修改默认网关为指定机器。
参考资料
https://www.freebuf.com/articles/endpoint/281185.html
|