0x00 漏洞介绍
smarty
是一个基于PHP开发的PHP模板引擎。它提供了逻辑与外在内容的分离,简单的讲,目的就是要使用PHP程序员同美工分离,使用的程序员改变程序的逻辑内容不会影响到美工的页面设计,美工重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。由于Smarty
中 Smarty_Internal_Runtime_TplFunction
模块通过引擎编译生成模板文件,攻击者可利用该漏洞在获得权限的情况下,构造恶意数据,最终造成远程代码执行。
0x01 漏洞环境
- 攻击机:192.168.91.1 windows10
- 目标机:192.168.91.142 Ubuntu 18.04-server(64)
- 工具:火狐浏览器
- Tiki Wiki版本:Tiki Wiki CMS 21.1, Smarty 3.1.38
0x02 漏洞搭建
1、docker搭建
1、Ubuntu-18.04-server
的docker
和docker-compose
安装与Ubuntu-20-server
不一致,这里介绍18的,20的安装参考
https://github.com/sukusec301/vulhub
apt install docker docker-compose proxychains
proxychains wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip
unzip vulhub-master.zip
cd vulhub-master/tikiwiki/CVE-2020-15906/
docker-compose up -d
2、安装完毕后,ubuntu打开防火墙,ufw allow 8080
随后访问http://192.168.91.142:8080
即可。如果访问不到,清理缓存,然后多试几次,有延迟。
3、==设置docker容器开机自启动==
因为当搭好服务之后,关机再看容器就exit
了,那么只能再次docker start containerID
了。
当我们建立起来了一个容器服务后,输入这条命令docker update --restart=always
,下次再开机就好了,不用我们费事再start
了
2、CMS源码安装
https://tiki.org/Download在官网下载CMS
1、安装apache2、mysql、php、unzip、lrzsz
apt install -y unzip
apt install -y lrzsz
apt install -y apache2
apt install -y mysql-server
apt install -y php php-curl php-gd php-xml php-mbstring php-xmlrpc php-zip php-soap php-intl php-mysql php-xsl php-zip
mysql_secure_installation
systemctl restart apache2
systemctl restart mysql
2、之后将源码拖进系统,解压缩,输入chown -R www-data:www-data tiki
然后再访问,即可安装
3、之后这个邮箱可以忽略
4、新建一个数据库叫tiki
,并且再新建一个用户root_sql
,拥有管理员权限。然后下方填写新建用户的账号与密码。
mysql -u root -p
use mysql;
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'localhost' IDENTIFIED BY '密码' WITH GRANT OPTION;
flush privileges;
exit;
systemctl restart mysql
5、随后安装个什么数据库引擎。Mysql数据库最重要的底层机制就是存储引擎。主要有四种,详情参见:https://www.jianshu.com/p/4bb9f78b4f6d
这个tikiwiki cms
支持两种吧可能,也可以能是我Mysql 5.6
只支持的数据库引擎。这里随便选了一个。
6、随后安装完成
7、后面两部需要填写一些用户的邮箱之类的信息,不用管。到下面截图这一步就是最后一步,点击推荐的那个。
8、设置管理员密码
用户名:admin
密码:ZKebpy*uahcL
9、随后点击这个直接进入即可
10、成功进入,至此完成搭建成功。
0x03 影响范围
Tiki Wiki <21.2
Smarty是一个使用PHP写出来的模板引擎,是业界最著名的PHP模板引擎之一。全球有数万 Web服务器采用 Smarty,可能受漏洞影响的资产广泛分布于世界各地,中国大陆省份中,浙江、广东、山东、北京、上海等省市接近 30%。
目前受影响的Smarty版本:
Smarty<=3.1.38
0x04 漏洞条件
需要满足 Tiki Wiki CMS Groupware 认证绕过漏洞(CVE-2020-15906)
Tiki Wiki CMS Groupware或简称为Tiki(最初称为TikiWiki)是一种免费且开源的基于Wiki的内容管理系统和在线办公套件。在如下这些版本21.2, 20.4, 19.3, 18.7, 17.3, 16.4前存在一处逻辑错误,管理员账户被爆破60次以上时将被锁定,此时使用空白密码即可以管理员身份登录后台。
==也就是说,需要先通过CVE-2020-15906来绕过认证,再使用CVE-2021-26119于后台执行命令==
0x05 漏洞原理
由于Smarty中 Smarty_Internal_Runtime_TplFunction
模块通过引擎编译生成模板文件,攻击者可利用该漏洞在获得权限的情况下,构造恶意数据,最终造成远程代码执行。在Smarty中,Smarty从$smarty.template_object
变量访问实例,由于用户可以任意访问smarty
或parent
属性,从而可以访问Smarty
实例,没有相应的身份验证,导致攻击者可以构造任意恶意代码进行攻击。
0x06 漏洞复现
这里注意一下,我用的是docker安装的tiki,因为源码cms安装网站我使用POC无效。
1、从这里https://srcincite.io/pocs/cve-2021-26119.py.txt复制下来POC
到POC.py
。这个POC
通杀这两个BUG
2、使用很简单,就是一行命令的事情,注意/
后面有空格
python3 CVE-2021-26119.py 192.168.91.142:8080 / id
python3 CVE-2021-26119.py 192.168.91.142:8080 / whoami
python3 CVE-2021-26119.py 192.168.91.142:8080 / ifconfig
3、有一个很离谱的事情,就是我在想着怎么利用,可是使用bash
反弹命令,怎么也反不回来。
4、使用CS的CrossC2
生成一句话,居然让它上线了!这一点属实把我惊到了,可能是说这个python
脚本出了某种问题。
5、最后收集一下这个源文件,将docker images
打包成tar
包,以下命令需要在docker
启动靶机后使用
docker save -o tiki-21.tar vulhub/tikiwiki