目录

0x00 前言

0x01 漏洞简介

0x02 环境搭建

0x03 漏洞利用

0x04 漏洞机理

1、POC验证

​2、漏洞产生原理和攻击思路

3、payload构建

0x05 危害分析和处理建议

0x06 参考资料


0x00 前言

本漏洞的exp放出来快一星期了,目前网上的分析文章也出了几篇,但是大都集中于通过容器简单复现攻击过程,没有深入的分析产生原因和exp的构造原理。笔者借鉴了大牛Michał Bentkowski,也就是漏洞发现者的博客上的英文ppt(参考链接3),写了这篇文章。本文详细介绍了在本地搭建了模拟攻击环境的过程(非docker搭建),并完整分析了这个漏洞的攻击原理。现在分享给大家。

0x01 漏洞简介

Kibana存在远程代码执行漏洞,影响版本为5.6.15和6.6.0之前的所有版本。拥有Kibana的Timelion模块访问权限的人可以以Kibana的运行权限执行任意代码,包括反弹shell。

0x02 环境搭建

靶机环境:

Parrot Security OS 4.7 64位 或其他类Linux操作系统(VMWare 14)

Elasticsearch6.5.4

Kibana 6.5.4

IP:10.10.10.128

攻击机环境:

Windows 10 Home 64位

Netcat 1.12 64位

Chrome浏览器

IP:172.16.2.62

0x03 漏洞利用

1)在靶机上部署Kibana 和Elasticsearch,并开放访问端口(./config/kibana.xml中的server.host改成0.0.0.0)让攻击机可以访问(如图1所示)。

图1 在靶机上部署Elasticsearch和Kibana

2)确认执行权限并启动Elasticsearch和Kibana(如图2,3所示)

图2 在靶机上确认Kibana执行权限

图3 执行 Elasticsearch和Kibana

在攻击机上启动netcat(图4),并通过Chrome浏览器访问Kibana的Timelion页面,并输入payload(图5)。

图4 在攻击机上启动netcat

图5 登录Timelion并在输入框中输入payload

payload如图6所示(为了避免各类纠纷,本文的攻击代码只放图片版,文字版可以去参考链接里面自取)

(注意替换payload中的反弹IP为攻击机IP)

点击右边的执行按钮执行,然后点击控制面板左边的Canvas,可以获取反弹shell

图6 获得反弹shell

多次操作之后可能会出现反弹不成功的现象,此时可以删除kibana目录并重新部署一次,记得修改kibana.xml

0x04 漏洞机理

“原型污染”是一种针对JS语言开发的攻击方法。JS语言中,每一个对象都是有其原型(__proto__)的,而该原型又有其自己的原型对象,直到某个对象的原型为null。而如果JS对其中定义的对象原型的属性读写缺乏控制,容易让攻击者操纵一些敏感特征,从而实现攻击者的目的。

本漏洞就是是一个由于JS语言的“原型污染”,导致靶机环境量被污染,最终获得shell执行的漏洞。具体调试过程如下

1、POC验证

1) 在Timelion的输入框中输入本漏洞的POC:

2) 点击canvas,可以发现cookie被污染,页面无法访问。

3)通过node调试工具(具体使用方法见参考链接)连接后台,删除Object.prototype的cookie值,刷新发现页面暂时恢复正常。因此可以判定该处存在JS原型污染漏洞

2、漏洞产生原理和攻击思路

1)点击canvas页面,可以发现后台大量报错,报错原因是9229端口被占用。因此可以判断:在点击canvas页面的过程中,kibana创建了新的node进程。(注意此时要连接chrome的node调试工具才会看到报错)因此可以考虑通过劫持环境变量来实现shell命令注入。

2) 在创建新的node进程过程中,必然使用了NODE_OPTIONS环境变量,如果我们可以劫持该变量,那么就能影响node的新进程创建。NODE_OPTIONS不限制--require选项,该选项可以在执行js文件之前首先加载其他js模块。而在本案例中,实现上传恶意模块的思路难以实现。因此考虑进一步污染环境变量的方法来间接达到这一目的。

3、payload构建

在构建payload之前,我们通过调试工具查看Object.protoytpe.env变量。

Timelion中,props方法的官方解释是:     

简单来说,props可以修改任意对象的属性值。

因此可以采用props方法来对JS中object对象的原型进行修改,同时也就修改了靶机的环境变量。据此,我们构建出了如下的代码:

其中,label.__proto__.env是靶机的环境变量,我们在该变量中添加了一个键值对

最后两个斜杠用于把后面的内容注释掉。因此我们目前的payload是

点击执行之后,继续在调试工具中查看Object.protoytpe.env变量的污染情况:

可以看到env已经被污染

下一步就是污染NODES_OPTIONS变量,让node命令在运行时执行我们上面构建的反弹shell的命令。

首先考虑使用eval函数,而node的开发者显然意识到了这是个很危险的设计,因此在NODE_OPTIONS变量中禁用了eval函数,然而却没有禁用—require这个选项。因此我们构建这一部分的代码:

最终,我们构建的payload成了如下结构:

点击执行之后再次查看env的污染情况

总体来看,我们首先把环境变量修改成了一条js语句,然后又在node执行过程中劫持了执行参数NODE_OPTIONS,这样构成了完整的攻击链。当然还有最后一步点击canvas页面,让node建立新进程的过程执行起来。从而达到反弹shell的目的。

0x05 危害分析和处理建议

危害分析:

CNVD评级:高(A*V:N/AC:L/Au:N/C:C/I:C/A:C)

CNNVD评级:超危

虽然该漏洞是一个远程命令执行漏洞,但是本人认为该漏洞影响不大。

因为本漏洞是执行在Kibana的宿主机上,而Kibana是一个Elasticsearch的可视化工具,该工具很少有人会把其页面暴露于公网。

能够造成威胁的只有一种情况,就是页面被暴露于公网,而且使用了弱用户名和弱口令。

故本人认为该漏洞威胁不大。

处理建议:

1)及时升级Kibana和Elasticsearch到最新版本,同时尽量用低权限执行Kibana和Elasticsearch。

2)尽量不要让Kibana的Timelion页面暴露于公网,并检查是否存在使用弱口令登录的情况。

0x06 参考资料

1) https://nodejs.org/en/docs/inspector

2) https://github.com/mpgn/CVE-2019-7609

3) https://slides.com/securitymb/prototype-pollution-in-kibana/#/

4) CNVD 国家信息安全安全漏洞共享平台  https://www.cnvd.org.cn/flaw/show/CNVD-2019-12163

5) CNNVD 国家信息安全漏洞库  http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD=CNNVD-201902-1035

靶机平台:

https://github.com/vulhub/vulhub/blob/master/kibana/CVE-2019-7609/README.zh-cn.md

平台的docker-compose.yml运行后 报错Kibana server is not ready yet 发现版本不匹配问题 修改后的文件如下:

version: '3.7'services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:6.6.0container_name: elasticsearchenvironment:- discovery.type=single-nodekinaba:image: docker.elastic.co/kibana/kibana:6.5.4container_name: kibanaports:- "5601:5601"depends_on:- elasticsearch

cve-2019-7609 Kibana远程代码执行漏洞攻击方法和漏洞原理分析相关推荐

  1. Kibana远程代码执行漏洞攻击方法和漏洞原理分析

    漏洞简介 Kibana存在远程代码执行漏洞,影响版本为5.6.15和6.6.0之前的所有版本.拥有Kibana的Timelion模块访问权限的人可以以Kibana的运行权限执行任意代码,包括反弹she ...

  2. 网络安全漏洞分析之远程代码执行

    介绍 Apache Flume 是一个分布式的,可靠的,并且可用于高效地收集,汇总和移动大量日志数据的软件.它具有基于流数据流的简单而灵活的体系结构.它具有可调的可靠性机制以及许多故障转移和恢复机制, ...

  3. sqlite 0转换为bit_Cisco Talos在SQLite中发现了一个远程代码执行漏洞

    思科Talos的研究人员在SQLite中发现了一个use-after-free() 的漏洞,攻击者可利用该漏洞在受影响设备上远程执行代码. 攻击者可以通过向受影响的SQLite安装发送恶意SQL命令来 ...

  4. Gitea 1.4 未授权远程代码执行漏洞复现

    ​Gitea 1.4 未授权远程代码执行 一.漏洞描述 Gitea是从gogs衍生出的一个开源项目,是一个类似于Github.Gitlab的多用户Git仓库管理平台.其1.4.0版本中有一处逻辑错误, ...

  5. Fastjson 1.2.24远程代码执行漏洞(com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl)

    1.漏洞信息 1.1 漏洞简介 · 漏洞名称:Fastjson 1.2.24远程代码执行漏洞(com.sun.org.apache.xalan.internal.xsltc.trax.Template ...

  6. 赏金猎人计算机病毒,GitLab 向「赏金猎人」颁发 20,000 美元赏金,用于修补远程代码执行漏洞...

    原标题:GitLab 向「赏金猎人」颁发 20,000 美元赏金,用于修补远程代码执行漏洞 技术编辑:王治治丨发自 猫爬架 SegmentFault 思否报道丨公众号:SegmentFault 近日, ...

  7. php x24 x65 x6d x61,Jboss远程代码执行漏洞CVE:2013-4810获得system权限

    此方法成功的渗透至Windows系统并获得最高权限exp 此方法成功的渗透至Windows系统并获得最高权限 exp ?php/*Apache Tomcat/JBoss EJBInvokerServl ...

  8. windows server 2012 远程连不上_CVE20201350 | Windows DNS Server远程代码执行漏洞通告

    0x00 漏洞概述 CVE   ID CVE-2020-1350 时     间 2020-07-15 类     型 RCE 等     级 严重 远程利用 是 影响范围 0x01 漏洞详情 微软于 ...

  9. CVE-2021-1675: Windows Print Spooler远程代码执行漏洞

    ** 赶紧点击上方话题进行订阅吧!** 报告编号:B6-2021-062902 报告来源:360CERT 报告作者:360CERT 更新日期:2021-06-29 1 漏洞简述 2021年06月29日 ...

最新文章

  1. 力扣(LeetCode)31
  2. kafka0.9 java commit_kafka提交offset失败
  3. 皮一皮:多少人的爱情在昨天就像他一样...
  4. 解释i节点在文件系统中的作用?超级块作用?
  5. DL:基于sklearn的加利福尼亚房价数据集实现GD算法
  6. android wm 改变大小,Android 屏幕适配经验总结
  7. 云计算呼叫中心_SaaS云呼叫中心系统只用于销售或客服?
  8. [FPGA]基于FPGA的数字跑表
  9. RTX5 | 线程管理01 - 创建线程(静态堆栈方式)
  10. oracle:oracle学习笔记(三)
  11. 多项目公共代码库该如何管理
  12. 基于Python的随机森林(RF)回归与变量重要性影响程度分析
  13. java批量生成条形码图片 打包zip
  14. CSS动画实现星星闪烁效果
  15. Self-Supervised Gait Encoding with Locality-Aware Attention for Person Re-Identification阅读
  16. 有c语言基础自学JAVA要多久,零基础学java需要多久?要先学习C语言吗?
  17. Ubuntu16.04 (ROS)下通过CAN分析仪(USBCAN/CANalyst-II)调试无人车助力转向电机(1)
  18. hdoj 超级赛亚ACMer (贪心)
  19. 计算机的二三事——软件篇
  20. 网络营销试卷(参考答案及评分标准)

热门文章

  1. Python基本语法_函数属性 参数类型 偏函数的应用
  2. linux驱动入口函数执行了,probe函数没有执行排查
  3. 一个简单自激振荡器电路分析
  4. 802.11(wi-fi)的PHY层(编码与调制方法)
  5. 分享27个最新国外超酷单页面网站设计
  6. 借东西的小人阿莉埃蒂
  7. IKE IPSEC ×××
  8. 在单元测试时指定HttpContext的各种Path
  9. 科学家揭示灵长类早期胚胎发育多能性的变化模式
  10. MySQL两种表存储结构MyISAM和InnoDB的性能比较测试