<p>知道创宇安全研究团队 2015 . 03 . 31</p><p><strong>一</strong>.漏洞概要</p><p>近期,国外安全研究员发布了针对全球 ADSL 设备存在目录穿越漏洞的研究<<a href="http://www.csoonline.com/article/2899874/network-security/at-least-700000-routers-given-to-customers-by-isps-are-vulnerable-to-hacking.html#tk.rss_all" target="_blank">网页链接1</a>>,这个漏洞早在 2011 年就被提出了,影响烽火(Fiberhome)HG-110 型号设备<<a href="http://www.exploit-db.com/exploits/35597/" target="_blank">网页链接2</a>>,本着学习的态度,笔者对该漏洞进行了一番考证,写在这里。</p><p>a)漏洞描述</p><p>烽火(Fiberhome)HG-110 型号设备目录穿越漏洞<<a href="http://www.exploit-db.com/exploits/35597/" target="_blank">网页链接3</a>>,是由于 webproc 文件在处理参数 getpage 传递过来的文件访问时没有合适过滤,导致用户可以利用 ../../ 跳转访问 web 目录之外的系统文件。</p><p>b)漏洞分析</p><p>烽火(Fiberhome)HG-110 型号设备目录穿越漏洞在 exploit-db 上被提交了两次<<a href="http://www.exploit-db.com/exploits/35597/%EF%BC%8Chttp://www.exploit-db.com/exploits/28450/" target="_blank">网页链接4</a>>,其中 poc 35597 需要登录授权才能触发漏洞,poc 28450 的 poc 可以绕过权限认证;笔者在 ZoomEye 上检索 HG-110,可惜找不到任何实例,但是检索到了另外一款存在漏洞的设备,由于无法得知其设备名称,简称为 PLC 设备吧(管理页面内有 PLC 字样),本文漏洞分析就以它为例。</p><p>在跟踪烽火(Fiberhome)HG-110 设备时,发现其实 netgear 竟然也存在这个漏洞,该漏洞被提交在 exploit-db 上<<a href="http://www.exploit-db.com/exploits/35325/" target="_blank">网页链接5</a>>,影响 NETGEAR WNR500 设备(固件1.0.7.2),WNR500 设备固件是开源的,可以从这里下载:<<a href="http://kb.netgear.com/app/answers/detail/a_id/2649/%7E/netgear---open-source-code-for-programmers-%28gpl%29" target="_blank">网页链接6</a>>,</p><p>在 WNR500 最新固件 1.0.8.1 的源码中,我们发现,代码的版权属于 T&W 公司,经过检索,T&W 属于一家国内的 IT 公司<<a href="http://www.twsz.com/" target="_blank">网页链接7</a>>,代码截图:</p><p><img src="http://blog.knownsec.com/wp-content/uploads/2015/04/image002.png" alt="image002" height="363" width="753"></p><p>由此可以推测,烽火公司和 NETGEAR 公司均使用了 T&W 公司的固件,才导致出现相同的漏洞。同时,难道仅此两家吗?不,PLC 也存在同样问题,或许有更多使用该固件的设备,只是未发掘出来。</p><p>PLC 在登录后存在同样问题,可以读取系统配置文件 config.xml:<<a href="http://223.85.54.202/cgi-bin/webproc?getpage=../../etc/config.xml&var:page=deviceinfo&var:retag=1" target="_blank">网页链接8</a>></p><p>结果如图:</p><p><img src="http://blog.knownsec.com/wp-content/uploads/2015/04/image003_1.png" alt="image003_1" height="318" width="600"></p><p>可以读取内存信息:<<a href="http://223.85.54.202/cgi-bin/webproc?getpage=../../dev/mem&var:page=deviceinfo&var:retag=1" target="_blank">网页链接9</a>></p><p>结果如图:</p><p><img src="http://blog.knownsec.com/wp-content/uploads/2015/04/image004_1.png" alt="image004_1" height="318" width="600"></p><p>可以读取系统帐号信息:<<a href="http://223.85.54.202/cgi-bin/webproc?getpage=../../etc/passwd&var:page=deviceinfo&var:retag=1" target="_blank">网页链接10</a>></p><p>结果如图:</p><p><img src="http://blog.knownsec.com/wp-content/uploads/2015/04/image005_11.png" alt="image005_1" height="63" width="600"></p><p>PLC 的问题是有趣的。PLC 从 80 端口访问是需要登录的,然而 80 端口是不可以从外网访问的,而 8080 端口可以从外网访问,并且提供同样的 Web 服务,更重要的是,他可以直接登录设备 Web 管理后台,不需要验证!不知道 PLC 设备的开发者是怎么想的,笔者想知道的是为什么 8080 端口就可以直接登录了,下载 Web 服务进程 mini_http 文件,载入 IDA 分析。</p><p>mini_http 进程启动后会监听 4 个端口,分别是 80,808,1050,8080:</p><p><img src="http://blog.knownsec.com/wp-content/uploads/2015/04/image006.png" alt="image006" height="491" width="368"></p><p>mini_http 通过 getsockname() 函数区分哪个端口来的访问做什么响应:</p><p><img src="http://blog.knownsec.com/wp-content/uploads/2015/04/image007.png" alt="image007" height="538" width="313"></p><p>如果是 8080 端口来的访问,那就直接重定向到一个 URL:<<a href="http://223.85.54.202:8080/cgi-bin/webproc?getpage=html/index.html&errorpage=html/main.html&var:language=zh_cn&%20var:menu=setup&var:page=connected&var:retag=1&var:subpage=-" target="_blank">网页链接11</a>></p><p>如图:</p><p><img src="http://blog.knownsec.com/wp-content/uploads/2015/04/image008.png" alt="image008" height="208" width="621"></p><p>注意到这个 Location 的重定向跳转中带有一个 retag=1 的参数,经过测试,如果有这个参数就可以不需要口令认证直接登录 PLC 设备 Web 管理后台,看来问题在 retag 这个参数。</p><p>跳转到/cgi-bin/webproc 就交给 CGI 文件 webproc 处理了,把 webproc 下载并放入 IDA 分析,我们发现,webproc 文件会判断提交的参数中是否有 retag 参数:</p><p><img src="http://blog.knownsec.com/wp-content/uploads/2015/04/image009.png" alt="image009" height="389" width="530"></p><p>如果有的话,把 sessionid 内容写入/var/redsessiond 文件:</p><p><img src="http://blog.knownsec.com/wp-content/uploads/2015/04/image010.png" alt="image010" height="382" width="588"></p><p>在这里,把外部传递过来的 session 提交给 system() 函数,是可以造成命令注入漏洞的,重点不在此,不表。</p><p>那么为什么 retag=1 就可以登录了呢,笔者分析了 webproc 的上下文,始终没有找到原因(也可能是能力问题),纠结几天后,笔者决定把 PLC 设备中所有的进程都分析一遍,终于发现了问题所在,问题在于 logic 进程文件,下载 logic 文件,载入 IDA 分析。</p><p>logic 接收消息,如果收到消息中是“check”则读取/var/redsession 文件中的数据:</p><p><img src="http://blog.knownsec.com/wp-content/uploads/2015/04/image011.png" alt="image011" height="406" width="776"></p><p>接下来把 session 增加到授权 session 列表内,并删除/var/redsession 文件:</p><p><img src="http://blog.knownsec.com/wp-content/uploads/2015/04/image012.png" alt="image012" height="386" width="815"></p><p>那 logic 进程是谁发给他的 check 消息呢,代码在 webproc 文件中。</p><p>在对 sessionid 的验证中会调用 CheckAuth() 函数:</p><p><img src="http://blog.knownsec.com/wp-content/uploads/2015/04/image013.png" alt="image013" height="286" width="477"></p><p>CheckAuth() 函数就会发送 check 消息:</p><p><img src="http://blog.knownsec.com/wp-content/uploads/2015/04/image014.png" alt="image014" height="350" width="353"></p><p>到此,PLC 设备的登录绕过漏洞分析完毕。</p><p>笔者在研究中发现,PLC 设备的 webproc 文件和 NETGEAR 的 webproc 文件是不完全一样的,NETGEAR 没有针对 retag 参数的判断,由此可以推断 PLC 设备固件是对 T&W 固件的二次开发。</p><p>c)漏洞修复</p><p>PLC 设备笔者无法查找其生产商,所以在漏洞修复升级固件更是无从谈起,如果你恰好用的这款设备,那么建议你从内网 telnet 登录该设备,用户名和密码都是 root,然后在/var/目录下创建 redsession 文件夹:<strong>mkdir /var/redsession</strong></p><p>这样就可以修复 8080 端口的登录绕过漏洞了。</p><p>至于目录穿越漏洞,笔者无能为力,不过至少利用该漏洞需要授权登录,危害较小。</p><p>3.ZoomEye 检测报告</p><p>在 ZoomEye 中搜索 webproc 字样:</p><p><img src="http://blog.knownsec.com/wp-content/uploads/2015/04/ze_3178.png" alt="ze_3178" height="520" width="600"></p><p>我们找到 <strong>3178</strong> 条记录,这仅仅是暴漏在外网的 PLC 设备漏洞,其他使用 T&W 公司固件的设备恐怕更多!</p><p>4.相关资源链接</p><p>1.来源于 <a href="http://www.csoonline.com/article/2899874/network-security/at-least-700000-routers-given-to-customers-by-isps-are-vulnerable-to-hacking.html#tk.rss_all" target="_blank">CSOONLINE</a></p><p>2.来源于 <a href="http://www.freebuf.com/news/61860.html" target="_blank">FreeBuf</a></p><p>3.来源于 <a href="http://www.exploit-db.com/search/?action=search&filter_page=1&filter_description=&filter_exploit_text=webproc%20&filter_author=&filter_platform=0&filter_type=0&filter_lang_id=0%20&filter_port=&filter_osvdb=&filter_cve=" target="_blank">Exploit-db</a></p><p>4.来源于 <a href="http://seclists.org/nmap-dev/2013/q3/30" target="_blank">Seclists</a></p><p>PDF 下载:<a target="_blank" href="http://blog.knownsec.com/wp-content/uploads/2015/04/%E7%83%BD%E7%81%ABHG-110%E8%AE%BE%E5%A4%87%E5%BD%95%E7%A9%BF%E8%B6%8A%E6%BC%8F%E6%B4%9E%E8%80%83%E5%AF%9F.pdf">烽火HG-110设备录穿越漏洞考察</a></p>
暂无评论