php新的漏洞利用技術 phar 解析

2021-12-30 06:26:19 字數 2035 閱讀 2317

概要來自secarma的安全研究員sam thomas發現了一種新的漏洞利用方式,可以在不使用php函式unserialize()的前提下,引起嚴重的php物件注入漏洞。這個新的攻擊方式被他公開在了美國的blackhat會議演講上,演講主題為:」不為人所知的php反序列化漏洞」。它可以使攻擊者將相關漏洞的嚴重程度公升級為遠端**執行。我們在rips**分析引擎中新增了對這種新型攻擊的檢測。

流包裝大多數php檔案操作允許使用各種url協議去訪問檔案路徑:如data://,zlib://或php://。其中一些通常用於利用遠端檔案包含漏洞,攻擊者可以利用它們控制檔案包含的完整路徑。例如,用於**源**的讀取或者是用於**執行:

include('php://filter/convert.base64-encode/resource=index.php');

include('data://text/plain;base64,cghwaw5mbygpcg==');

phar元資料

但到目前為止,沒有人關注phar://。phar(php archive)檔案的有趣之處在於它包含序列化格式的元資料。讓我們建立乙個phar檔案,並新增乙個包含一些資料的物件作為元資料:

// create new phar

$phar = new phar('test.phar');

$phar->startbuffering();

$phar->addfromstring('test.txt', 'text');

$phar->setstub('');

// add object of any class as meta data

class anyclass {}

$object = new anyclass;

$object->data = 'rips';

$phar->setmetadata($object);

$phar->stopbuffering();

我們新建立的test.phar檔案現在具有以下內容。我們可以看到我們的物件儲存為序列化字串。

php物件注入

如果現在通過phar://對我們現有的phar檔案進行檔案操作,則其序列化元資料將被反序列化。這意味著我們在元資料中注入的物件將被載入到應用程式中。如果此應用程式具有已命名的類anyclass,並且具有魔術函式__destruct()或__wakeup(),則會自動呼叫這些方法。這意味著我們可以在**庫中觸發任何析構函式或喚醒方法。更糟糕的是,如果這些魔法函式對我們注入的資料進行操作,那麼這可能會導致進一步的漏洞:

class anyclass

}// output: rips

include('phar:');

漏洞利用

首先,攻擊者必須能夠在目標web伺服器上植入精心製作的phar檔案。而sam thomas發現了一些關於如何將phar檔案隱藏到jpg中的好技巧,因此常見的影象上傳功能已足夠。

到目前為止,攻擊者如果可以控制諸如include(),fopen(),file_get_contents(),file()等檔案操作的函式,則可以造成嚴重的漏洞。因此,通常需要在這些函式使用前驗證使用者的輸入。

但是,phar://在任何檔案操作中都會觸發反序列化。例如用file_exists()簡單地檢查檔案的存在。這些函式一直被認為不太可能引起安全問題,所以一直被保護的不夠好。

使用rips進行自動檢測

通過rips的汙點分析,我們可以在php檔案操作中自動檢測使用者輸入的未經過濾或驗證的資訊。這樣,我們即可檢測檔案刪除、洩露、寫入、建立、包含(等等)漏洞。

此外,rips的上下文敏感字串分析使我們能夠精確評估檔案路徑是完全還是僅部分能被攻擊者控制,以及是否可以注入phar://。最後,rips能夠掃瞄可能導致物件注入漏洞的較短的攻擊鏈。我們在rips**分析器中新增了乙個名為phar deserialization的新漏洞型別,以檢測這種新型別的**風險。

核心漏洞利用技術

有漏洞的驅動exploitme.sys 在ring3可以通過裝置名稱 exploitme 開啟裝置,得到裝置控制代碼,進而使用deviceiocontrol函式呼叫驅動的派遣例程,與驅動進行互動。輸入 輸出位址都是由ring3程式指定,讀寫是在ring0中完成。因此ring3可以將輸出緩衝區位址指定...

PHP的學習 使用phar打包

前段時間寫了幾個php的指令碼,但是因為指令碼的專案是基於composer安裝的,給別人使用的時候不太方便,就希望能夠打包成乙個能直接使用的檔案。搜尋了一下,發現可以使用phar打包。假設我們有如下乙個專案 入口檔案是index.php,打包前的命令如下 php index.php再新增打包指令碼之...

WEB安全 PHP漏洞利用 PHP拼接

a phpinfo a 相當於phpinfo a呼叫函式,傳參 type file type a imagecreatefrom 假如pic的型別為png,則拼接後的函式名為imagecreatefrompng a pic 動態呼叫函式 可以在檔案上傳的場景當中應用,根據檔案型別呼叫相應的函式,也可...