技術分享 | 一種針對PHP物件注入漏洞的新型利用方法
前言
就在前段時間的BlackHat駭客大會上,來自Secarma的安全研究專家Sam Thomas介紹了一種可導致嚴重PHP物件注入漏洞出現的新型漏洞利用技術,這種技術不需要使用到unserialize()這個PHP函式,雖然這是一種PHP反序列化漏洞,但它並不像大家所知道的那樣。在這種技術的幫助下,攻擊者將能夠提升相關漏洞的檔案嚴重性,並最終實現遠端程式碼執行。
不過大家不用擔心,RIPS已經將這種新型的攻擊型別增加到RIPS程式碼分析引擎之中了,感興趣的同學可以點選【 】檢視RIPS程式碼分析Demo。
流封裝器
在訪問一條檔案路徑時,大多數PHP檔案操作都允許使用各種URL風格的封裝器,例如data://、zlib://或php://。其中的某些封裝器通常都會被攻擊者用來利用某些潛在的遠端檔案包含漏洞,一旦利用成功,攻擊者將能夠控制目標檔案的完整檔案路徑。比如說,封裝器可以注入某些資源路徑,或注入需要直接執行的惡意PHP程式碼:
include($_GET['file']) include('php://filter/convert.base64-encode/resource=index.php'); include('data://text/plain;base64,cGhwaW5mbygpCg==');
Phar後設資料
但是目前為止,還沒有人關注過phar://封裝器。之所以我們注意到了Phar檔案(一種PHP文件),是因為這種檔案所包含的後設資料採用的是一種序列化格式。接下來,我們一起建立一個Phar檔案,並向其中新增一個包含資料的物件來作為後設資料:
//create new Phar $phar= new Phar('test.phar'); $phar->startBuffering(); $phar->addFromString('test.txt','text'); $phar->setStub('<?php__HALT_COMPILER(); ? >'); //add object of any class as meta data classAnyClass {} $object= new AnyClass; $object->data= 'rips'; $phar->setMetadata($object); $phar->stopBuffering();
我們新建立的這個test.phar檔案現在擁有如下所示的內容,我們可以看見我們新新增的物件會以序列化字串的形式進行儲存:
PHP物件注入
如果一個檔案操作是透過phar://封裝器來對我們的Phar檔案進行的話,檔案所包含的序列化後設資料將會被反序列化。這也就意味著,我們在後設資料中注入的物件將會被載入到應用程式上下文中,如果目標應用程式有一個名叫AnyClass的類,並且定義了類似__destruct()或__wakeup()這樣的方法,那麼這些方法將會自動被呼叫。因此,我們將能夠觸發程式碼中任意的銷燬方法或喚醒方法。更嚴重的是,如果這些方法能夠直接對我們注入的資料物件進行操作的話,將導致更嚴重的漏洞出現。
class AnyClass { function __destruct() { echo $this->data; } } // output:rips include('phar://test.phar');
漏洞利用
首先,攻擊者必須要製作一個Phar檔案,並將其儲存在目標Web伺服器中。但是Sam Thomas發現原來可以將Phar檔案隱藏在一個JPG檔案之中,所以這一步可以直接利用常見的圖片上傳功能來實現。
目前來說,還不足以造成嚴重的影響,因為如果攻擊者可以在類似include()、fopen()、file_get_contents()和file()這樣的操作中控制完整的檔案路徑,那麼這已經暴露了一個嚴重的安全漏洞了。因此,這些函式在處理使用者輸入資料時肯定會進行各種驗證。
不過,phar://封裝器在進行任意檔案操作時都會觸發反序列化行為,因此類似file_exists()這樣的檔案操作雖然只會檢查檔案是否存在,這樣的實現不僅沒有考慮安全風險之類的問題,而且也沒有采取任何的保護措施。因此,攻擊者將能夠注入phar://封裝器並獲取到程式碼執行許可權。
下面給出的是目前看似無害的程式碼段:
file_exists($_GET['file']); md5_file($_GET['file']); filemtime($_GET['file']); filesize($_GET['file']);
RIPS的自動檢測機制
在RIPS的幫助下,我們將能夠對未經過濾或驗證的使用者輸入資料(針對PHP檔案的操作)進行自動化檢測。這樣一來,我們就可以檢測檔案刪除、檔案披露、檔案寫入、檔案篡改、檔案建立和檔案包含漏洞。
除此之外,RIPS的上下文敏感字串分析功能也可以幫助我們精準判斷檔案路徑是否可以被攻擊者部分或完全控制,以及是否可以注入phar://封裝器。更加重要的是,RIPS甚至還可以檢測到潛在的物件注入漏洞利用鏈。
RIPS的研究人員已將這種型別的PHP物件注入攻擊標記為了Phar Deserialization,RIPS程式碼分析器目前已支援檢測這種型別的程式碼風險。
本文轉載自“ FreeBuf.COM ”,原文由 FB小編Alpha_h4ck編譯
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31510736/viewspace-2213372/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 針對新型程式注入技術Ctrl-Inject原理分析
- WordPress < 3.6.1 PHP 物件注入漏洞PHP物件
- PHP phar:協議物件注入技術介紹PHP協議物件
- 另類PHP安全漏洞:利用弱型別和物件注入進行SQLiPHP型別物件SQL
- Codeigniter 利用加密Key(金鑰)的物件注入漏洞加密物件
- 技術分享 | DLL注入之遠執行緒注入執行緒
- 理解php物件注入PHP物件
- Java agent技術的注入利用與避坑點Java
- PHP 執行注入分享PHP
- Joomla 物件注入漏洞分析報告OOM物件
- 個人理解的Windows漏洞利用技術發展史Windows
- 技術分享 | Linux 環境下針對程式維度的監控實現Linux
- 【Java技術專題】「效能優化系列」針對Java物件壓縮及序列化技術的探索之路Java優化物件
- PHP 核心技術 --物件導向PHP物件
- php 物件導向中的魔術方法PHP物件
- 深入理解PHP物件注入PHP物件
- 專門針對SQL Server的注入手段SQLServer
- 技術分享 | dbslower 工具學習之探針使用
- 黑客利用漏洞,為Youtube網紅技術打Call黑客
- 卡巴斯基披露針對蘋果的史上最複雜漏洞利用鏈,iPhone一個此前未知的硬體功能被利用蘋果iPhone
- 技術分享 | Fastjson-RCE漏洞復現ASTJSON
- PHP 物件導向 (六)魔術方法PHP物件
- 技術分享| 快對講,全球對講
- 遍歷物件鍵值對的兩種方法物件
- Python技術分享:ndarray物件的常用屬性Python物件
- 看完就能掌握的PHP核心技術 - 物件導向PHP物件
- 基於 GDI 物件的 Windows 核心漏洞利用物件Windows
- PHP技術分享-提取字串中的數字PHP字串
- phpMyAdminsetup.php指令碼的任意PHP程式碼注入漏洞PHP指令碼
- 程式碼注入的三種方法
- WIFI探針技術WiFi
- Android Binder漏洞挖掘技術與案例分享(下)Android
- Android Binder漏洞挖掘技術與案例分享(上)Android
- Linux下的堆偽造漏洞利用技術(new unlink)Linux
- [轉] 細數Javascript技術棧中的四種依賴注入JavaScript依賴注入
- 技術分享| 快對講如何降噪
- PHP 技術卡片 - 字串連線的幾種方式PHP字串
- php漏洞對策 (轉)PHP