本篇文章為大家展示了針對(duì)PHP對(duì)象注入漏洞的新型利用方法是什么,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

就在前段時(shí)間的BlackHat黑客大會(huì)上,來自Secarma的安全研究專家Sam Thomas介紹了一種可導(dǎo)致嚴(yán)重PHP對(duì)象注入漏洞出現(xiàn)的新型漏洞利用技術(shù),這種技術(shù)不需要使用到unserialize()這個(gè)PHP函數(shù),雖然這是一種PHP反序列化漏洞,但它并不像大家所知道的那樣。在這種技術(shù)的幫助下,攻擊者將能夠提升相關(guān)漏洞的文件嚴(yán)重性,并最終實(shí)現(xiàn)遠(yuǎn)程代碼執(zhí)行。
不過大家不用擔(dān)心,RIPS已經(jīng)將這種新型的攻擊類型增加到RIPS代碼分析引擎之中了,感興趣的同學(xué)可以點(diǎn)擊【 這里 】查看RIPS代碼分析Demo。
在訪問一條文件路徑時(shí),大多數(shù)PHP文件操作都允許使用各種URL風(fēng)格的封裝器,例如data://、zlib://或php://。其中的某些封裝器通常都會(huì)被攻擊者用來利用某些潛在的遠(yuǎn)程文件包含漏洞,一旦利用成功,攻擊者將能夠控制目標(biāo)文件的完整文件路徑。比如說,封裝器可以注入某些資源路徑,或注入需要直接執(zhí)行的惡意PHP代碼:
include($_GET['file'])
include('php://filter/convert.base64-encode/resource=index.php');
include('data://text/plain;base64,cGhwaW5mbygpCg==');但是目前為止,還沒有人關(guān)注過phar://封裝器。之所以我們注意到了Phar文件(一種PHP文檔),是因?yàn)檫@種文件所包含的元數(shù)據(jù)采用的是一種序列化格式。接下來,我們一起創(chuàng)建一個(gè)Phar文件,并向其中添加一個(gè)包含數(shù)據(jù)的對(duì)象來作為元數(shù)據(jù):
//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();我們新創(chuàng)建的這個(gè)test.phar文件現(xiàn)在擁有如下所示的內(nèi)容,我們可以看見我們新添加的對(duì)象會(huì)以序列化字符串的形式進(jìn)行存儲(chǔ):

如果一個(gè)文件操作是通過phar://封裝器來對(duì)我們的Phar文件進(jìn)行的話,文件所包含的序列化元數(shù)據(jù)將會(huì)被反序列化。這也就意味著,我們?cè)谠獢?shù)據(jù)中注入的對(duì)象將會(huì)被加載到應(yīng)用程序上下文中,如果目標(biāo)應(yīng)用程序有一個(gè)名叫AnyClass的類,并且定義了類似__destruct()或__wakeup()這樣的方法,那么這些方法將會(huì)自動(dòng)被調(diào)用。因此,我們將能夠觸發(fā)代碼中任意的銷毀方法或喚醒方法。更嚴(yán)重的是,如果這些方法能夠直接對(duì)我們注入的數(shù)據(jù)對(duì)象進(jìn)行操作的話,將導(dǎo)致更嚴(yán)重的漏洞出現(xiàn)。
class AnyClass {
function __destruct() {
echo $this->data;
}
}
// output:rips
include('phar://test.phar');首先,攻擊者必須要制作一個(gè)Phar文件,并將其存儲(chǔ)在目標(biāo)Web服務(wù)器中。但是Sam Thomas發(fā)現(xiàn)原來可以將Phar文件隱藏在一個(gè)JPG文件之中,所以這一步可以直接利用常見的圖片上傳功能來實(shí)現(xiàn)。
目前來說,還不足以造成嚴(yán)重的影響,因?yàn)槿绻粽呖梢栽陬愃苅nclude()、fopen()、file_get_contents()和file()這樣的操作中控制完整的文件路徑,那么這已經(jīng)暴露了一個(gè)嚴(yán)重的安全漏洞了。因此,這些函數(shù)在處理用戶輸入數(shù)據(jù)時(shí)肯定會(huì)進(jìn)行各種驗(yàn)證。
不過,phar://封裝器在進(jìn)行任意文件操作時(shí)都會(huì)觸發(fā)反序列化行為,因此類似file_exists()這樣的文件操作雖然只會(huì)檢查文件是否存在,這樣的實(shí)現(xiàn)不僅沒有考慮安全風(fēng)險(xiǎn)之類的問題,而且也沒有采取任何的保護(hù)措施。因此,攻擊者將能夠注入phar://封裝器并獲取到代碼執(zhí)行權(quán)限。
下面給出的是目前看似無害的代碼段:
file_exists($_GET['file']); md5_file($_GET['file']); filemtime($_GET['file']); filesize($_GET['file']);
在RIPS的幫助下,我們將能夠?qū)ξ唇?jīng)過濾或驗(yàn)證的用戶輸入數(shù)據(jù)(針對(duì)PHP文件的操作)進(jìn)行自動(dòng)化檢測(cè)。這樣一來,我們就可以檢測(cè)文件刪除、文件披露、文件寫入、文件篡改、文件創(chuàng)建和文件包含漏洞。

除此之外,RIPS的上下文敏感字符串分析功能也可以幫助我們精準(zhǔn)判斷文件路徑是否可以被攻擊者部分或完全控制,以及是否可以注入phar://封裝器。更加重要的是,RIPS甚至還可以檢測(cè)到潛在的對(duì)象注入漏洞利用鏈。
RIPS的研究人員已將這種類型的PHP對(duì)象注入攻擊標(biāo)記為了Phar Deserialization,RIPS代碼分析器目前已支持檢測(cè)這種類型的代碼風(fēng)險(xiǎn)。
上述內(nèi)容就是針對(duì)PHP對(duì)象注入漏洞的新型利用方法是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。
文章標(biāo)題:針對(duì)PHP對(duì)象注入漏洞的新型利用方法是什么-創(chuàng)新互聯(lián)
URL分享:http://www.chinadenli.net/article36/dccpsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、靜態(tài)網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站改版、定制網(wǎng)站、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容