PHP phar:協議物件注入技術介紹
前言
在之前的BlackHat 2018大會上公佈了一款針對PHP應用程式的全新攻擊技術。我們將透過這篇文章簡單介紹下。
來自Secarma的安全研究員Sam Thomas發現了一種新的開發技術,它可以導致 ——而無需使用PHPunserialize()函式。這項新技術是在BlackHat 2018大會上公佈的,利用 升實現遠端程式碼執行。我們在RIPS程式碼分析引擎中新增了對這種新型攻擊的檢測。
常見樣式
大多數PHP檔案操作允許在訪問檔案路徑時使用各種url樣式,如data://、zlib://或php://。這些操作通常用於遠端檔案,攻擊者可以在其中控制檔案包含完整的檔案路徑。
遠端檔案包含漏洞利用:
include($_GET['file']) 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()定義,則會自動呼叫這些方法。這意味著我們可以在程式碼庫中觸發任何解構函式或wakeup方法。更糟糕的是,如果這些方法對我們注入的資料進行操作,那麼這可能會導致進一步的漏洞。
class AnyClass { function __destruct() { echo $this->data; } } // output: rips include('phar://test.phar');
利用
首先,攻擊者必須能夠在目標Web伺服器上植入一個Phar檔案。Sam Thomas發現了一個如何將Phar檔案隱藏到JPG檔案中的 ,因此只要常見的圖片上傳功能就足夠。但這並不重要,因為如果攻擊者可以在ìnclude(),fopen(),file_get_contents(),file()等操作中控制完整的檔案路徑,那麼將會造成嚴重的安全漏洞。因此,通常會在使用者輸入中驗證這些功能。但是現在攻擊者可以透過phar://注入並獲得程式碼執行。
到目前為止看起來無害的程式碼示例:
file_exists($_GET['file']); md5_file($_GET['file']); filemtime($_GET['file']); filesize($_GET['file']);
總結
透過RIPS的分析,我們可以自動檢測使用者輸入是否在PHP檔案操作中未經驗證。
這樣,我們檢測是否存在檔案刪除、檔案洩露、檔案寫入,檔案操作,檔案建立、檔案包含(等等)漏洞。
此外,RIPS對敏感字串分析使我們能夠精確評估檔案路徑是完全還是由攻擊者控制,以及是否可以phar://注入。最後,我們在RIPS程式碼分析器中新增了一個名為Phar Deserialization的新漏洞型別,以檢測這種新型別的程式碼風險。
本文轉載自“ FreeBuf.COM ”,原文由 周大濤編譯
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31510736/viewspace-2213374/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- WiFi協議的調製技術介紹WiFi協議
- 利用PHAR協議進行PHP反序列化攻擊協議PHP
- 基於隱私保護技術的DNS通訊協議介紹DNS協議
- 06、HSMS協議介紹協議
- 19_MQTT協議介紹MQQT協議
- WebSocket協議入門介紹Web協議
- NFT借貸協議質押模式系統開發詳情技術介紹協議模式
- 理解php物件注入PHP物件
- 技術分享 | 一種針對PHP物件注入漏洞的新型利用方法PHP物件
- ARP協議介紹與ARP協議的攻擊手法協議
- 檔案傳輸協議介紹協議
- 前端基礎之HTTP協議介紹前端HTTP協議
- 伺服器傳輸協議介紹伺服器協議
- PHP 核心技術 --物件導向PHP物件
- WordPress < 3.6.1 PHP 物件注入漏洞PHP物件
- 開源軟體許可協議介紹協議
- 10.redis cluster介紹與gossip協議RedisGo協議
- Python教程之udp和tcp協議介紹PythonUDPTCP協議
- AIGC底層技術介紹AIGC
- 容器技術和Docker介紹Docker
- WiFi協議技術詳解概述WiFi協議
- php介紹PHP
- 液晶顯示技術TCON介紹
- Docker容器技術與Docker介紹Docker
- 開源≠免費 常見開源協議介紹協議
- 【譯】WebSocket協議第一章——介紹(Introduction)Web協議
- 《PHP7 開發寶典(第4版)》之“PHP介紹和PHP 使用物件”PHP物件
- 負載均衡技術(一)———負載均衡技術介紹負載
- 從入門到掉坑:Go 記憶體池/物件池技術介紹Go記憶體物件
- 人工智慧文生圖技術介紹人工智慧
- 技術分享 | MySQL InnoDB Cluster Set 介紹MySql
- MySQL入門--複製技術介紹MySql
- 前端技術演進(二):前端與協議前端協議
- JavaScript常用物件介紹JavaScript物件
- 物件導向介紹物件
- cdp協議簡介協議
- Http協議簡介HTTP協議
- HTTP 協議簡介HTTP協議