大家新年好呀。
嗯…因为最近考试快考完了没什么事情干,于是我又手痒了(
想刷之前买的小米路由器BE3600 2.5G (RD15) 玩。
第一步当然是开ssh了。本质上就是用rce改命令参数
网上看到有一个start_binding的洞,之前版本都可以用,于是我也尝试了下:

不行。
进行了一系列搜索之后,我知道小米这一套系统是基于openwrt+luci,也就是lua语言为主。也就是我们需要找到一个命令注入,需要exec我们可控并且不被过滤的字符串。
尝试下了一个最新版本的包,binwalk发现是ubi镜像,于是用这个工具读取‣
接下来用binwalk直接拆开squashfs文件系统。
这里面的lua文件是加密了的,但是也有工具可以解开。‣可以去我fork的action里下载构建好的版本。
GPT写了个脚本,把所有lua改回来了:
Bash
定位到了这个函数,重写了下:

可以看到上面有过滤,1523是因为被filter了,但是网上相关的内容就是这么做的,历史版本代码也一样,不应该有问题呀?搜了下commonstr,找到了过滤字符串

看上去过滤挺全的。不应该会有漏洞?
于是找了老版本拆包看看:

恍然大悟:老版本没有过滤掉换行拼接,这导致了绕过成功。

看起来小米工程师估计是潜伏在恩山内部的,一看到最新漏洞立马就修了!
还有没有其他solution?
不愧是恩山论坛:

但是我就不试了吧,毕竟现在这一套设备是已经能正常工作了,别添乱了(
不过感觉源代码里应该还是能有其他命令注入的
新年第一篇文章就这么愉快的水完了
