eSafe白帽駭客資安網-網絡安全背後的巨人,提供駭客,網站入侵測試,網站被駭,網站漏洞,駭客入侵,資訊安全,入侵,ecshop,wordpress,漏洞修復,木馬清除,資安服務

PHP網站的安全測試—反序列化漏洞

 
 
        前段時間eSafe白帽資安網對某一大客戶的網站進行安全測試服務,客戶網站的架構是PHP+MYsql
 
數據庫,在對其詳細的網站安全檢測以及滲透測試後發現網站存在反序列化漏洞,具體的網站漏

洞發現,以及如何利用,下面記錄一下,出於對客戶的隱私保密,這裡不在做介紹。
 
 
網站安全測試了7天,也想告訴大家的是,只有徹徹底底的理解了網站整體的架構與設計邏輯
 
,才能挖掘出最底層的漏洞。也需要對PHP反序列化機制的理解很深,不然就像我的第一反應
 
一樣,根本無從下手,也不知道這個機制是怎樣去運行的。下面看下出現漏洞的PHP代碼:esafe

安全公司是一家專注於:主機安全、網站安全、網站安全檢測、網站漏洞修復,滲透測試,安全

服務於一體的網絡安全服務提供商。
 
<?php
//A webshell is wait for you
ini_set('session.serialize_handler', 'php');
session_start();
class OowoO
{
    public $mdzz;
    function __construct()
    {
        $this->mdzz = 'phpinfo();';
    }
    
    function __destruct()
    {
        eval($this->mdzz);
    }
}
if(isset($_GET['phpinfo']))
{
    $m = new OowoO();
}
else
{
    highlight_string(file_get_contents('index.php'));
}
?>
 
這個網站漏洞的關鍵點在於:
 
ini_set('session.serialize_handler', 'php');
 
PHP內置了多種處理器,用於存取$_SESSION的時候對數據進行序列化和反序列化,這個的意
 
思是在於設置序列化解釋格式,我的理解是和字符集相似,按照某種格式構造和解析序列化
 
的字段。漏洞產生在php_serialize和php解析方式上,如果我們通過php_serialize的方式構
 
造序列化語句,然後通過php的方式解析序列化語句,就會出現安全問題。原因是在使用
 
php_serialize構造過程中,可以在字符串變量中儲存 | 符號,但是如果按照php的方式解析
 
的話,會把 | 之前的語句當做數組的鍵,之後的語句當做值,這時我們就可以按照這個特性
 
來構造執行對象的命令。
 
 
通過php_serialize語句來構造的:
 
a:1:{s:4:"ryat";s:20:"|O:8:"stdClass":0:{}";}
 
以php代碼的方式解析也會變為:
 
array(1) {  ["a:1:{s:4:"ryat";s:20:""]=>  object(stdClass)#1 (0) {  }} 成功執行了變量。
 
這時就有一個問題,在題目代碼中,沒有某個值是用來接受我們傳入的數據,並儲存到
 
$_SESSION中的。其實我們是有辦法傳入$_SESSION數據的。eSafe白帽資安網公司是一家專

注於:主機安全、網站安全、網站安全檢測、網站漏洞修復,滲透測試,安全服務於一

體的網絡安全服務提供商。

 


 
我們查看phpinfo頁面,可以發現,session.upload_progress.enabled是被打開了的,而當
 
這個選項被打開時,php會自動記錄上傳文件的進度,在上傳時會將其信息保存在$_SESSION
 
中。這時,我們可以在本地構造一個指向目標頁面的表單。上傳之後,用burp修改filename
 
,就可以將我們想要傳入的序列化字段儲存進去。傳入什麼呢?因為在php大於5.5.4的版本
 
中默認使用php_serialize規則,所以我們可以在本地構造語句來執行。
分享: