0x0Ccve-2019-10669

CVE-2019-10669LibreNMS 命令注入漏洞

参考:https://github.com/cyberghost2h1/metasploit-framework/blob/c833487457be6c16be214048e3fb0e7ef2a23cdf/documentation/modules/exploit/linux/http/librenms_collectd_cmd_inject.md

0x1 漏洞复现

这个漏洞的环境也是蛮麻烦的

看到poc发现是集成的msf模块,然后到我的msf里一查,发现已经有了

攻击环境就准备好了

靶机环境:

本来想下软件装,装了好几次不成功

参考:https://cloud.tencent.com/developer/article/1518046

先下一个librenms的ubuntu版直接虚拟机跑

然后根据参考改一下网卡的配置,在主机上访问对应的ip地址和端口就能访问web界面了

此时在kali里跑msf,始终打不成功,看报错是没找到对应的collectd插件

需要在ubuntu换源更新下载安装一条龙

装好了之后根据官方配置(太简略,并不能成功(https://docs.librenms.org/Support/Configuration/#collectd

最后找到github上一个配置才成功,此时页面上出现了collectd插件

image-20201112100410102

也能打成功了

image-20201112100430763

0x2 漏洞原理

漏洞点:html/includes/graphs/device/collectd.inc.php

其中用户提供的参数from和to是用mysqli_escape_real_string函数(mres)过滤的,但是这个函数不能转义多个命令行语法字符,我们就可以注入命令到变量$rrd_cmd中,通过passthru()执行

DED6A2E31D73FFB660CEFBF548FD1BD6

passthru — 执行外部程序并且显示原始输出

passthru ( string $command [, int &$return_var ] ) : void

B99C52DBA71F8893ED2EBA7059B778F5

image-20201112205158282

image-20201112205315869

3FF732E6A3DA2AF9AFBACCD7AD86A5CA-5185412

image-20201112205357269

escapeshellarg — 把字符串转码为可以在 shell 命令里使用的参数,escapeshellarg() 将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 函数,并且还是确保安全的。