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