WIFI7都发布了,是时候升级到WIFI6了。
前几个月矿难,某类路由器的价格一路狂跌。正好家里最近新增了个NAS,mt7621也性能瓶颈了,该换了。听朋友推荐,入手了这款京东云雅典娜。
设备说明
刷机
到手第一件事,肯定是把京东的破系统扬了,毕竟我又不拿来跑pcdn。
看了下网上的教程,都是拆机走9008刷机的。
设备到手,一看,好家伙,2022.10的老库存了,估计是老版rom,说不定不需要拆机。

ROM版本: JDC02-1.5.50.r2204
查了下,果然有漏洞,通过固件的ubus总线更改配置可以开启ssh。
开启SSH
漏洞原理就不分析了,看了下b站的教程,写得也忒晦涩了。
简单说下原理吧,具体的可以直接用我的脚本一把嗦
/usr/sbin/dropbear 是这个路由器负责启动SSH服务的进程,需要开启SSH服务启动一下这个就行了。
现在我们只需要一个命令注入,能执行命令启动dropbear,正好ipv6的DHCP服务有个漏洞,可以执行命令。
利用流程:
- 篡改/etc/config/dhcp,更新odhcpd配置,设置leasetrigger为我们要启动的dropbear
- 提交配置生效
- 开启ipv6的NAT6服务,触发命令执行,启动SSH
脚本(python版本):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| import requests
url = "http://192.168.68.1/jdcapi" sessionid = ""
def get_dhcp_config(): r = requests.post(url, json={ "jsonrpc": "2.0", "id": 1, "method": "call", "params": [ sessionid, "uci", "get", { "config":"dhcp", "section":"odhcpd" } ] }) print(r.json()) def set_dhcp_config(): r = requests.post(url, json={ "jsonrpc": "2.0", "id": 1, "method": "call", "params": [ sessionid, "uci", "set", { "config": "dhcp", "type":"odhcpd", "section": "odhcpd", "values":{ "leasetrigger":"/usr/sbin/dropbear" } } ] }) print(r.json()) r = requests.post(url, json={ "jsonrpc": "2.0", "id": 1, "method": "call", "params": [ sessionid, "uci", "commit", { "config": "dhcp" } ] }) print(r.json())
if __name__ == "__main__": set_dhcp_config()
|
浏览器F12,获取下cookie,填写到相应位置,执行上面的脚本。
好多人都不会python,还是改成JS吧。
连夜找deepseek写的。
JS版:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| const sessionid = document.cookie .split('; ') .find(row => row.startsWith('sessionid=')) ?.split('=')[1] || '';
const apiUrl = '/jdcapi';
async function setDhcp() { try { const setRes = await fetch(apiUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ "jsonrpc": "2.0", "id": 1, "method": "call", "params": [ sessionid, "uci", "set", { "config": "dhcp", "type": "odhcpd", "section": "odhcpd", "values": { "leasetrigger": "/usr/sbin/dropbear" } } ] }) }); console.log('设置结果:', await setRes.json());
const commitRes = await fetch(apiUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ "jsonrpc": "2.0", "id": 1, "method": "call", "params": [ sessionid, "uci", "commit", { "config": "dhcp" } ] }) }); console.log('提交结果:', await commitRes.json()); } catch (e) { console.error('操作失败:', e); } }
setDhcp()
|
浏览器F12,控制台执行上面的代码就行了。
执行完脚本后,浏览器进路由器后台,路由设置-上网设置-IPV6网络设置,打开,切换上网方式为NAT6,保存即可触发。

轻松拿下shell。
刷入uboot
uboot:uboot-JDC_AX1800_Pro-AX6600_Athena-20240510.bin
先刷入uboot,直接scp上传到路由器上
然后开刷
1 2 3 4
|
dd if=/root/uboot-JDC_AX1800_Pro-AX6600_Athena-20240510.bin of=$(blkid -t PARTLABEL=0:APPSBL -o device) conv=fsync dd if=/root/uboot-JDC_AX1800_Pro-AX6600_Athena-20240510.bin of=$(blkid -t PARTLABEL=0:APPSBL_1 -o device) conv=fsync
|

刷入 u-boot 成功之后,可以按照下面的步骤进入 u-boot 界面,刷入 OpenWrt 固件。
- 拔掉电源下电
- 找个牙签怼住reset按键,上电。可以看到路由器启动从红灯闪烁变成持续蓝灯,等待出现稳定不变的蓝灯后,松开reset案件。
- 插网线,配置静态IP
- IP:192.168.1.2
- 网关:192.168.1.1
- 子网掩码:255.255.255.0
- 访问 http://192.168.1.1/
刷GPT分区表
访问 http://192.168.1.1/img.html
刷入GPT分区:gpt-JDC_AX6600_Athena_dual-boot_rootfs2048M_no-last-partition.bin
刷完以后等两分钟,路由器会长亮红灯。直接下电,按reset进uboot就行。
刷ROM
uboot首页( http://192.168.1.1/ ),直接刷入线刷包即可。
ROM包右转github/恩山。
2.5G网口切换
雅典娜提供了一个2.5G网口,默认分给wan口,显然wan口用不上这么大的,改到lan口给nas用才是正道。

先修改lan口的设置,在物理设置里,取消勾选eth0,把eth4(2.5G网口)勾选上

再进wan口和wan6口的设置,更改物理接口到eth0

保存应用后,路由器最右边的接口就变成wan口了,2.5G口直接给nas就ok了。
分区格式化和挂载
由于我们刷的GPT分区是不带最后一个分区的,需要自己分区、格式化硬盘、挂载。
ssh到路由器上,执行cfdisk /dev/mmcblk0

直接NEW

大小默认就可以

选择Wrtie进行写入分区表操作
然后回到路由器管理后台页面

格式化硬盘

选择ext4格式,空间有点大,需要等几分钟。
格式完创建挂载点即可,这里我使用docker,就挂载到了/opt。也可以参考其他教程,直接挂载到/overlay。

完结撒花

处理器性能非常够,内存1G跑路由绰绰有余,有需要搭一点小服务也足够用了。
还能看时间,完美~
参考资料