碧湖路由器的无线网络路由器存在几个网络安全问题。
http://blog.ioactive.com/2016/08/multiple-vulnerabilities-in-bhu-wifi.html
一、三或两句话
碧湖uRouter无线网络路由器是由碧湖高科在中国制造并销售的公司级智能路由器产品。它的外观无可替代,但不保证温柔——这台机器存在几个严重的网络安全问题。
未经认证的网络攻击可以绕过机器设备的认证系统,浏览存储在系统软件日志中的秘密数据。更有甚者,一些网络攻击甚至可以在拥有root管理权限的路由器上实现系统软件级 *** 控指令。此外,uRouter的默认设置还启用了隐藏客户、SSH、硬编码root登录密码等功能。,并且它将继续在所有客户的HTTP通信数据信息中引入第三方JavaScript脚本文件。
在这篇文章中,我可能会详细介绍该路由器中的许多关键网络安全问题。另外,我可以教大家如何从机器设备上获取系统软件fixture(用UART调整针的角度),发现其中存在的网络安全问题。
第二,冲主题风格
当然路由器的web管理方式的socket必须是中文的,并没有显示语言设置的功能。接下来,我要把它拆开,看看能不能浏览它的系统软件fixtures。
(1)使用UART获取系统软件fixtures
从图中可以看到,鲜红色的边框框住了UART针角,橙色的边框标记了大家插的SD卡。在整个实验过程中,我使用了BusPirate系统总线连接UART针角。
启动机器后,我们可以在终端设备中看到以下信息:
任意按住键盘上的一个功能键(1),可以停止启动机器设备的全过程,然后终端设备会显示bootloader列表,如下图所示:
现在按住“C”键,然后进入命令行界面(2)。因为它用的是U-Boot,所以我可以更改“bootargs”的主要参数,然后不需要运行init程序流就能立刻得到路由器的外壳:
当应用指令“printenv”检查U-Boot的默认设置时,系统软件将在启动序列完成后立即运行“/sbin/init”。这些代码承担了重置路由器的Linux计算机 *** 作系统的实际 *** 作。
如今,我们可以应用“setenv”指令将“/sbin/init”替换为“/bin/sh”。更换后,系统软件可能会马上运行大家的shell代码,让大家马上浏览机器设备的系统文件。
“boot”命令使U-Boot能够在机器设备的启动序列中再次执行(PS:因为我刚刚停止了机器设备的启动过程)。在终端设备上显示大量调整信息后,我们得到机器设备的外壳:
也就是我已经成功获取了路由器的外壳,所以我也可以获取系统软件fixtures,然后我就开始分析负责解决路由器Web管理方法页面的通用网关ipsocket(CGI)。
从路由器获取文件的方法有很多。我更改了U-Boot的主要参数,打开了机器设备的网络连接功能,然后使用“scp”命令将所有必要的文档复制到我的笔记本上。
当然,我也可以立即对储存在SD卡中的recovery.img文件开展剖析,那样也可以做到一样的实际效果。可是那样实际 *** 作得话,大家将有可能忽略一些预安裝的文档和配备信息,由于这种数据信息并没有recovery镜像系统中。当然,我也可以马上分析SD卡中存储的recovery.img文件,也能达到同样的实用效果。但是,如果你真的那样做了,你很可能会忽略一些预装的文档和设备信息,因为这类数据信息并不在恢复镜像系统中。
(CGI编码的逆向分析。
我的主要总体目标是找出哪个程序流负责解决路由器的Web管理方法socket,以及其他程序是如何被 *** 纵的。下图显示了路由器的启动配置信息:
Mongoose是嵌入在这个路由器机器中的轻量级Web服务器。因为在机器上找不到mongoose.conf文档,所以我认为默认设置应该应用于网络服务器。根据对mongose文本文档的描述,在默认设置下,mongose会用。cgi后缀作为CGI代码。我还找到了两个。路由器系统文件中的cgi文件:
路由器的Web管理方法套接字必须依赖于以下两个组件:
1.cgiPage.cgi:这个文档好像是解决Web管理方法的控制面板首页。
(http://192.168.62.1/CGI-bin/CGIpage.CGI?pg=urouter)
2.CGISV.CGI:该文档在解决方案管理方法的控制面板中扮演各种角色。如登录、申请注册、查询系统信息、更改系统设置等。
在分析了cgiSrv.cgi文件中的代码后,我发现这段代码非常有趣。因为它可以升级路由器的配置信息,所以我打算从它入手。
虽然所有的系统软件调整标记(如函数名和主参数名)都从编码中去掉了,但我们可以只从主函数开始分析。因此,我打算应用IDA来分析代码:
main函数将启用“getenv”(6)函数来获取存储在系统变量“request_method”(7)中的请求模式。然后,启用strcmp函数(9),比较“REQUEST_METHOD”中的值(8)是否为字符串数组“post”(10)。如果请求模式是POST(11),则可以启用功能(12)。
简单地说,当主函数接受POST请求时,函数(12)将被启用。为了更方便,我将函数(12)命名为“handle_post”。
对于GET请求,编码中使用了相同的逻辑。当主函数接受一个GET请求时,它将启动相关的solution函数来解决它。我把这个函数命名为“handle_get”。
接下来我准备提前从“handle_get”函数来分析一下。因为这个函数似乎比解决POST请求的函数简单。
图中这个瀑布般的网格显示了类似“if{}elseif{}else{}”的条件表达式,它们承担着定期检查和解决相对GET请求的实际 *** 作。
块A:
在块A中,“handler_get”函数将启用“find_val”方法(14)来检查URL的主参数(15)中的字符串数组“file”。如果检查结果为真(16),则功能“get_file_handler”可以被启用(17)。
函数“get_file_handler”可以根据使能函数“strcmp”(20)检查URL主参数“file”的值(18)是否等同于“syslog”(19)。如果相同(21),函数将返回字符串数组“/var/syslog”(22)。否则,函数将返回NULL(23)。接下来,主函数可能会启动另一个函数打开文件/var/syslog,读取文件中的数据信息,然后加载到网络服务器的HTTP响应消息中。虽然很容易理解整个过程,但是找到解决GET请求的solution函数,以及知道这个请求是如何处理的,仍然需要一些时间。
(3)路由器认证系统
请稍等片刻!当您浏览syslog文件时,系统软件是否会验证您客户的真实身份?显然,当我们浏览路由器的系统软件日志文件时,cgiSrv.cgi代码并没有检查客户的真实身份。好吧,可能系统软件日志文档没有包含所有敏感信息…..
请求信息:
响应信息:
但显然,系统软件日志确实包含了很多敏感信息。如图所示,日志文档包括管理员帐户的cookie信息,例如会话ID(SID)。如果我们在自己的计算机浏览器中应用这个cookie值,我们就可以劫持管理器的对话信息并重启路由器机器和设备:
响应信息:
别急,你能得到的数据信息还远着呢。在某些特殊情况下,很有可能管理员从未登录过路由器,所以不容易在系统软件日志中有SID的cookie值。但是,您仍然可以应用硬编码的SID:70000000000000。你还记得吗,这段数据信息曾经出现在以前的系统软件日志中:
即使路由器重启,这个硬编码的SID值也不会改变,管理员也不能更改这个值。这意味着你可以用它来浏览路由器的所有功能。
在此阶段检查客户的真实身份:
响应信息:
然而,什么是dms:3呢?我们没有在路由器的Web管理方法套接字中找到关于dms:3的所有信息。是它路由器的bug?还是某种旁门左道的账户?
三。摘要
总的来说,碧湖优路的无线网络路由器设计还是很不错的。但可悲的是,在其美丽的表面背后,却隐藏着许多严重的网络安全问题。
网络攻击可以利用这个系统漏洞来实施:
-根据向路由器呈现任意SIDcookie值,绕过系统软件的认证系统;
-浏览路由器的系统软件日志,利用日志中的数据信息与被劫持路由器的管理人员对话;
-应用硬编码的SID值劫持DMS客户端并获得对路由器的访问权;
-引入系统软件级的 *** 作指令,并以根管理权限执行这些指令;
此外,碧湖uruter无线网络路由器还将继续在客户的HTTP通信数据信息中引入第三方JavaScript文档。虽然网络攻击不能立即浏览在线JavaScript脚本,但网络攻击可以通过引入任意JavaScript内容在客户端计算机浏览器中实施恶意程序。
除了上面提到的一些安全隐患,我对路由器的内核模块进行了分析,发现了大量的安全隐患。由于文章数量有限,不可能在本文中逐一分析路由器中的所有安全风险。如果你对一件事的科学研究感兴趣,请访问IOActive安全宣传。我在这里公布了我发现的所有隐患【自动跳转连接】。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)