CVE-2021-26119 PHP Smarty 模版沙箱逃逸遠端程式碼執行漏洞

sukusec不覺水流發表於2022-01-22

0x00 漏洞介紹

smarty是一個基於PHP開發的PHP模板引擎。它提供了邏輯與外在內容的分離,簡單的講,目的就是要使用PHP程式設計師同美工分離,使用的程式設計師改變程式的邏輯內容不會影響到美工的頁面設計,美工重新修改頁面不會影響到程式的程式邏輯,這在多人合作的專案中顯的尤為重要。由於SmartySmarty_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-serverdockerdocker-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

image-20220117180038864

隨後訪問http://192.168.91.142:8080即可。如果訪問不到,清理快取,然後多試幾次,有延遲。

image-20220117180547806

3、設定docker容器開機自啟動

因為當搭好服務之後,關機再看容器就exit了,那麼只能再次docker start containerID了。

當我們建立起來了一個容器服務後,輸入這條命令docker update --restart=always,下次再開機就好了,不用我們費事再start

image-20220121140729351

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然後再訪問,即可安裝

image-20220120121316139

image-20220120121225518

3、之後這個郵箱可以忽略

image-20220120121421549

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

image-20220120121632966

5、隨後安裝個什麼資料庫引擎。Mysql資料庫最重要的底層機制就是儲存引擎。主要有四種,詳情參見:https://www.jianshu.com/p/4bb9f78b4f6d

這個tikiwiki cms支援兩種吧可能,也可以能是我Mysql 5.6只支援的資料庫引擎。這裡隨便選了一個。

image-20220120134810087

6、隨後安裝完成

image-20220120135306007

image-20220120135316319

7、後面兩部需要填寫一些使用者的郵箱之類的資訊,不用管。到下面截圖這一步就是最後一步,點選推薦的那個。

image-20220120135432333

8、設定管理員密碼

使用者名稱:admin

密碼:ZKebpy*uahcL

image-20220120135540531

9、隨後點選這個直接進入即可

image-20220120135705301

10、成功進入,至此完成搭建成功。

image-20220120135738472

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變數訪問例項,由於使用者可以任意訪問smartyparent屬性,從而可以訪問Smarty例項,沒有相應的身份驗證,導致攻擊者可以構造任意惡意程式碼進行攻擊。

image-20220121150432919

0x06 漏洞復現

這裡注意一下,我用的是docker安裝的tiki,因為原始碼cms安裝網站我使用POC無效。

1、從這裡https://srcincite.io/pocs/cve-2021-26119.py.txt複製下來POCPOC.py。這個POC通殺這兩個BUG

image-20220117181617002

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

image-20220117193732802

3、有一個很離譜的事情,就是我在想著怎麼利用,可是使用bash反彈命令,怎麼也反不回來。

image-20220117185940401

4、使用CS的CrossC2生成一句話,居然讓它上線了!這一點屬實把我驚到了,可能是說這個python指令碼出了某種問題。

image-20220117190029324

5、最後收集一下這個原始檔,將docker images打包成tar包,以下命令需要在docker啟動靶機後使用

docker save -o tiki-21.tar vulhub/tikiwiki

相關文章