CVE-2018-18760 代碼審計

CVE-2018-18760 代碼審計

Rhino logo标志模板#71054

作者 : Noth

前言:

筆者打算趁剩下半年受訓的期間,定期分析CVE漏洞!加強自己 Code Review 的能力,另一方面做個紀錄,培養自己挖掘漏洞思路。

RhinOS是一個使用最新功能開發網站的框架,可以為Web門戶提供最快的訪問和管理。RhinOSCMS對於網站管理功能十分強勁,內置允許使用資料庫進程和解析器模塊快速訪問資料庫,xml和其他資源,購物車,標籤和參數化文件,配置參數,Intranet訪問,資料庫會話,電子郵件發送,驗證碼安全系統,快速過濾,列表和詳細信息的模塊,功能可謂是非常之多了。RhinOSCMS的download.php文件存在任意文件下載漏洞,通過漏洞能夠下載任意的文件。

原文網址:https://kknews.cc/code/abvy68j.html,功能可謂是非常之多了。RhinOSCMS的download.php文件存在任意文件下載漏洞,通過突破能夠下載任意的文件。
RhinOS是一個使用最新功能開發網站的框架,可以為Web門戶提供最快的訪問和管理。RhinOSCMS對於網站管理功能十分強勁,內置允許使用資料庫進程和解析器模塊快速訪問資料庫,xml和其他資源,購物車,標籤和參數化文件,配置參數,Intranet訪問,資料庫會話,電子郵件發送,驗證碼安全系統,快速過濾,列表和詳細信息的模塊,功能可謂是非常之多了。RhinOSCMS的download.php文件存在任意文件下載漏洞,通過漏洞能夠下載任意的文件

原文網址:https://kknews.cc/code/abvy68j.html
RhinOS是一個使用最新功能開發網站的框架,可以為Web門戶提供最快的訪問和管理。RhinOSCMS對於網站管理功能十分強勁,內置允許使用資料庫進程和解析器模塊快速訪問資料庫,xml和其他資源,購物車,標籤和參數化文件,配置參數,Intranet訪問,資料庫會話,電子郵件發送,驗證碼安全系統,快速過濾,列表和詳細信息的模塊,功能可謂是非常之多了。RhinOSCMS的download.php文件存在任意文件下載漏洞,通過漏洞能夠下載任意的文件

原文網址:https://kknews.cc/code/abvy68j.html
RhinOS是一個使用最新功能開發網站的框架,可以為Web門戶提供最快的訪問和管理。RhinOSCMS對於網站管理功能十分強勁,內置允許使用資料庫進程和解析器模塊快速訪問資料庫,xml和其他資源,購物車,標籤和參數化文件,配置參數,Intranet訪問,資料庫會話,電子郵件發送,驗證碼安全系統,快速過濾,列表和詳細信息的模塊,功能可謂是非常之多了。RhinOSCMS的download.php文件存在任意文件下載漏洞,通過漏洞能夠下載任意的文件

原文網址:https://kknews.cc/code/abvy68j.html
RhinOS是一個使用最新功能開發網站的框架,可以為Web門戶提供最快的訪問和管理。RhinOSCMS對於網站管理功能十分強勁,內置允許使用資料庫進程和解析器模塊快速訪問資料庫,xml和其他資源,購物車,標籤和參數化文件,配置參數,Intranet訪問,資料庫會話,電子郵件發送,驗證碼安全系統,快速過濾,列表和詳細信息的模塊,功能可謂是非常之多了。RhinOSCMS的download.php文件存在任意文件下載漏洞,通過漏洞能夠下載任意的文件

原文網址:https://kknews.cc/code/abvy68j.html
RhinOS是一個使用最新功能開發網站的框架,可以為Web門戶提供最快的訪問和管理。RhinOSCMS對於網站管理功能十分強勁,內置允許使用資料庫進程和解析器模塊快速訪問資料庫,xml和其他資源,購物車,標籤和參數化文件,配置參數,Intranet訪問,資料庫會話,電子郵件發送,驗證碼安全系統,快速過濾,列表和詳細信息的模塊,功能可謂是非常之多了。RhinOSCMS的download.php文件存在任意文件下載漏洞,通過漏洞能夠下載任意的文件

原文網址:https://kknews.cc/code/abvy68j.html
RhinOS是一個使用最新功能開發網站的框架,可以為Web門戶提供最快的訪問和管理。RhinOSCMS對於網站管理功能十分強勁,內置允許使用資料庫進程和解析器模塊快速訪問資料庫,xml和其他資源,購物車,標籤和參數化文件,配置參數,Intranet訪問,資料庫會話,電子郵件發送,驗證碼安全系統,快速過濾,列表和詳細信息的模塊,功能可謂是非常之多了。RhinOSCMS的download.php文件存在任意文件下載漏洞,通過漏洞能夠下載任意的文件

原文網址:https://kknews.cc/code/abvy68j.html
RhinOS是一個使用最新功能開發網站的框架,可以為Web門戶提供最快的訪問和管理。RhinOSCMS對於網站管理功能十分強勁,內置允許使用資料庫進程和解析器模塊快速訪問資料庫,xml和其他資源,購物車,標籤和參數化文件,配置參數,Intranet訪問,資料庫會話,電子郵件發送,驗證碼安全系統,快速過濾,列表和詳細信息的模塊,功能可謂是非常之多了。RhinOSCMS的download.php文件存在任意文件下載漏洞,通過漏洞能夠下載任意的文件

原文網址:https://kknews.cc/code/abvy68j.html
RhinOS是一個使用最新功能開發網站的框架,可以為Web門戶提供最快的訪問和管理。RhinOSCMS對於網站管理功能十分強勁,內置允許使用資料庫進程和解析器模塊快速訪問資料庫,xml和其他資源,購物車,標籤和參數化文件,配置參數,Intranet訪問,資料庫會話,電子郵件發送,驗證碼安全系統,快速過濾,列表和詳細信息的模塊,功能可謂是非常之多了。RhinOSCMS的download.php文件存在任意文件下載漏洞,通過漏洞能夠下載任意的文件。

原文網址:https://kknews.cc/code/abvy68j.html
RhinOS是一個使用最新功能開發網站的框架,可以為Web門戶提供最快的訪問和管理。RhinOSCMS對於網站管理功能十分強勁,內置允許使用資料庫進程和解析器模塊快速訪問資料庫,xml和其他資源,購物車,標籤和參數化文件,配置參數,Intranet訪問,資料庫會話,電子郵件發送,驗證碼安全系統,快速過濾,列表和詳細信息的模塊,功能可謂是非常之多了。RhinOSCMS的download.php文件存在任意文件下載漏洞,通過漏洞能夠下載任意的文件。

原文網址:https://kknews.cc/code/abvy68j.html
RhinOS是一個使用最新功能開發網站的框架,可以為Web門戶提供最快的訪問和管理。RhinOSCMS對於網站管理功能十分強勁,內置允許使用資料庫進程和解析器模塊快速訪問資料庫,xml和其他資源,購物車,標籤和參數化文件,配置參數,Intranet訪問,資料庫會話,電子郵件發送,驗證碼安全系統,快速過濾,列表和詳細信息的模塊,功能可謂是非常之多了。RhinOSCMS的download.php文件存在任意文件下載漏洞,通過漏洞能夠下載任意的文件。

原文網址:https://kknews.cc/code/abvy68j.html

內文:

download.php 文件中,存在任意檔案下載漏洞,能下載敏感資訊,首先跟進去 download.php 文件,27 行引入inicio.php文件,28 行判斷使用者是否登入,第 30 行存在漏洞點,$file變數被賦予值,能夠看到文件讀取路徑拼接,在 41 行fopen函式打開文件,如果file參數可控代表能造成任意檔案下載或任意檔案讀取。

能夠看到文件讀取的路徑拼接操作

因為不知道 getParam 函式功能,繼續追蹤 getParam 函式,存在於 connect.php 文件中。 

 

第88行,getParam函式定義了兩個參數 $index$default="",上面的 $index 參數就是我們在 download.php 所傳入的 file 參數,88、89 行先以isset函式檢查由 POST 或 GET 方式傳遞的 $index 變數是否存在,最後返回結果,但如果不是 GET 或 POST 方式傳遞,則會返回 $default (等於空字串)。但這時候也不知道 getString 函式功能,於是繼續追蹤 getString 函式從到第82行至86行。首先他先定義了 $string 參數,利用 trim 函式將字串前後空白刪除,接下來判斷magic_quotes_gpc 是否是開啟(等於1時為開啟,避免SQL Injection),如果沒有開啟,則使用 addslashes 函式將字串轉義(將預定字符加上反斜線),並返回 $string。我們可以知道 getString 函式功能就是將字串進行轉義並刪除前後空白部分。接下來在復現漏洞之前必須要知道哪裡可以調用 download.php ,在文件inicio.php 可以進行include。

我們繼續追進去 inicio.php 查看相關程式碼。


27 行先以isset函式判斷由 GET 或 POST傳遞的 include 變數是否存在(只要有其中一個成立即為True,則繼續執行下列程式),28 行由 GET傳遞的 include 變數是否存在,29 行$include變數被賦予值為include變數所傳入的值,30 行接著使用 unset 函式銷毀指定變數。32至35行POST方式判別邏輯一樣,36 行以substr 函式取得從 $include 變數中返回字串,不為 "php/" 時則結束程式。37 行先以 substr 函式取得返回字串後再以 strpos 函式尋找 "."第一次出現的位置。38 行邏輯亦同(改為尋找 "/" 第一次出現的位置),39行再以 substr 函式取得從 $include 變數中返回字串,不為 ".php" 時則結束程式,最後40行在引入 $include,然後結束。


我們可以發現 include 值必須為 “php/” 開頭,結尾必須要 ".php",兩大條件。

 

最終的 PoC :

http://127.0.0.1:8080/admin/inicio.php?include=php/download.php&name=efe.php&file=../config.php


成功下載 efe.php 檔案:

打開 efe.php 檔案 :

 

結論 :

通過這一次的代碼分析, $file="files/".getParam("file");  是這一段程式碼出現問題,file參數可控,導致任意下載漏洞,從防禦的角度來看,可以去過濾 ../ 禁止回溯上層目錄,以及限制Web Server存取權限,或使用絕對路徑進行下載檔案,避免攻擊者透過參數回溯上層目錄。

 

Refererce: 

https://kknews.cc/zh-tw/code/6qeyg2q.html

https://cloud.tencent.com/developer/news/374238

留言

熱門文章