就是它啦

0x00

从家里翻出一个之前办宽带送的路由器,当时因为对应的OP刚出还不稳定所以扔一边了。想着已经过了这么多年了,是不是应该有稳定的固件了,一看确实已经更新了很多版本了,那就刷个机玩玩,顺便记录一下。

现有教程大多都是不知道从哪复制粘贴来的缝合怪,教程作者不知道其中的原理,碰到问题时解决方案是基本都是重启,换台机器,喝点热水类似这种的。

0x01 “刷机需要另一台OpenWrt才能完成”

这是一个绝对的以讹传讹。实际测试下来需要“另一台OpenWrt”只是表象,其实是需要一个Web服务器,能响应一个带有漏洞利用Payload就可以。所以任何形式的Web服务器都可以,IIS,Apache,或者自己用Python写一个都可以。这里提供一个基于Flask的样例。

1
2
3
4
5
6
7
8
9
10
11
from flask import Flask
import json
app = Flask(__name__)

@app.errorhandler(404)
def unlock(foo):
return json.dumps({
"code": 0,
"token": "; nvram set ssh_en=1; nvram commit; sed -i 's/channel=.*/channel=\"debug\"/g' /etc/init.d/dropbear; /etc/init.d/dropbear start;"
}), 200, {'Content-Type':'application/json'}
# flask --app server_flask run --host=0.0.0.0 --port 80

这段代码因为没有提供任有效的路由,所以访问任何路径都会按404进行返回漏洞利用Payload。在随便一台电脑上运行这个程序,把电脑的网口和要刷机的CR660x设备Lan口连接就行了。

0x02 1619 dhcp failed

什么重启电脑,换热点,关DHCP(甚至还有固定信道和频段带宽,要不就是电脑挑路由器这种玄学理由都出来了)都没说到重点上。

重点是:返回Payload的设备IP必须169.254.31.1,且和CR660x之间能相互ping通。

也就是说如果你用PC运行Web服务提供Payload,那就把你PC的网卡地址配成169.254.31.1,并允许从80端口入站,或者干脆关了防火墙。

如果你用另一台OP提供响应,那另一台OP的Lan地址就得是169.254.31.1

0x03 最后一步503

503了也没关系,其实SSH已经开了。