中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

針對PHP對象注入漏洞的新型利用方法是什么

發布時間:2021-10-19 18:31:12 來源:億速云 閱讀:389 作者:柒染 欄目:網絡安全

本篇文章為大家展示了針對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對象注入漏洞的新型利用方法是什么

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文件的操作)進行自動化檢測。這樣一來,我們就可以檢測文件刪除、文件披露、文件寫入、文件篡改、文件創建和文件包含漏洞。

針對PHP對象注入漏洞的新型利用方法是什么

除此之外,RIPS的上下文敏感字符串分析功能也可以幫助我們精準判斷文件路徑是否可以被攻擊者部分或完全控制,以及是否可以注入phar://封裝器。更加重要的是,RIPS甚至還可以檢測到潛在的對象注入漏洞利用鏈。

RIPS的研究人員已將這種類型的PHP對象注入攻擊標記為了Phar Deserialization,RIPS代碼分析器目前已支持檢測這種類型的代碼風險。

上述內容就是針對PHP對象注入漏洞的新型利用方法是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

柯坪县| 临汾市| 安远县| 新干县| 抚州市| 昆山市| 西和县| 松江区| 道孚县| 徐水县| 金阳县| 类乌齐县| 吴江市| 南岸区| 错那县| 定兴县| 额济纳旗| 乐安县| 新丰县| 新化县| 韩城市| 金堂县| 驻马店市| 云梦县| 广宁县| 垫江县| 广南县| 大冶市| 鹿泉市| 益阳市| 深水埗区| 潢川县| 灵川县| 郓城县| 洪泽县| 虹口区| 唐海县| 吉林省| 印江| 垣曲县| 四平市|