MAMP整合環境套件中的SQLiteManager漏洞
MAMP這幾個首字母代表蘋果的OSX系統上的Macintosh、Apache、MySQL和PHP,顧名思義,你應該知道MAMP的強大功能啦!MAMP內含Apache伺服器、PHP安裝套件以及MySQL安裝套件。另外,它附帶有幾個漏洞的SQLiteManager。
本文就描述了當MAMP的使用者訪問惡意網站時,攻擊者如何利用這些漏洞執行程式碼。
MAMP
MAMP是可以安裝在Mac OS X上的網路堆疊,Web開發人員通常使用它來測試他們正在使用的Web應用程式。由於它安裝了Apache Web服務器,它預設在埠8888上執行。還包括一些資料庫管理程式,如phpMyAdmin和SQLiteManager。
SQLiteManager
SQLiteManager是一個像phpMyAdmin for SQLite資料庫的工具,它可以建立新的資料庫,將表新增到資料庫並在其上執行SQL查詢。它自2013年釋出以來還沒有更新過,並且包含一些已知的漏洞。
目錄遍歷
SQLiteManager可以建立新的資料庫,SQLite資料庫包含在單個檔案中,建立資料庫時可以提供新資料庫的檔名。然後在directory /Applications/MAMP/db/sqlite中建立該檔案。但是,通過將 ../新增到檔名,我們可以將資料庫的一個目錄放在更高的位置。我們也可以使用它來獲取包含PHP程式碼的檔案,通過提供像以下這樣的檔名,我們可以在web根目錄下放置一個script.php檔案。
然後,使用SQLiteManager,我們建立一個表,並新增一行包含我們的PHP程式碼。檔案script.php將是一個有效的SQLite資料庫檔案,其中包含訪問該檔案時執行的PHP程式碼。
雖然在localhost上執行的SQLiteManager無法被攻擊者直接訪問,但是,如果攻擊者可以在瀏覽器中執行Javascript,則可以偽造請求。如果你訪問了惡意網站,則攻擊者可以在瀏覽器中執行與安裝MAMP相同的計算機上的請求。這些請求可以訪問在localhost上執行的SQLiteManager。這種通過受害者瀏覽器彈出請求的方法稱為跨站點請求偽造或稱為CSRF。
SQLiteManager沒有任何CSRF保護,因此上述目錄遍歷也可以使用CSRF執行。我們可以使用Javascript釋出POST請求來建立資料庫並向其中新增資料,然後向生成的檔案發出請求。這樣可以在受害者訪問惡意站點時,在已安裝和啟用MAMP的受害者裝置上執行程式碼。
例如,以下Javascript會發出建立資料庫的請求:
dbsel號碼是我們剛剛建立的資料庫對應的號碼,雖然我們不知道具體的號碼,但可以嘗試0到50之間的所有數字。
當我們觸發對檔案的請求時,執行osascript命令將顯示彈出視窗:
總結
如果受害者只是訪問具有惡意Javascript的網站,通過組合CSRF和目錄遍歷,就可以觸發遠端程式碼執行。
通過禁用SQLiteManager可以立即解決這個問題, MAMP使用者可以通過編輯/Applications/MAMP/conf/apache/httpd.conf來實現。除非有人專門負責SQLiteManager的維護,否則這些漏洞不太可能得到修復。 MAMP已經有了SQLite的替代管理員-phpLiteAdmin。
最通用的解決方案就是禁止向私有的RFC1918 IP地址傳送公共網路的請求,我們的建議是,預設拒絕這樣的請求,並建立一個新的CORS頭以明確允許請求。