CVE 2016 7124php反序列化漏洞復現

2022-05-16 20:05:13 字數 2090 閱讀 8006

cve-2016-7124php反序列化漏洞復現

0x00漏洞原因

如果存在__wakeup方法,呼叫 unserilize() 方法前則先呼叫__wakeup方法,但是序列化字串中表示物件屬性個數的值大於 真實的屬性個數時會跳過__wakeup的執行

0x01漏洞影響版本

php5 < 5.6.25

php7 < 7.0.10

0x02漏洞詳情

php(php:hypertextpreprocessor,php:超文字預處理器)是phpgroup和開放源**社群共同維護的一種開源的通用計算機指令碼語言。該語言主要用於web開發,支援多種資料庫及作業系統。php5.6.25之前版本和7.0.10之前的7.x版本中的ext/standard/var_unserializer.c檔案存在安全漏洞,該漏洞源於程式沒有正確處理無效的物件。遠端攻擊者可借助特製的序列化資料利用該漏洞造成拒絕服務。

0x03漏洞復現環境搭建

使用windows10作業系統,搭建phpstudy一鍵整合環境搭建web服務。

這裡需要將php版本設定為有漏洞的版本。

我這裡使用的是php5.4.45+apache+mysql一鍵整合環境

0x04漏洞復現

搭建好後,我們首先需要編寫測試指令碼

測試指令碼如下:

<?php 

class

test

public

function __destruct()

}$str = $_get["s"

];@$un_str =unserialize($str);

echo $un_str->name."";

?>

指令碼上標明接收s引數,對其反序列化後輸出name屬性的值。

編寫poc訪問該指令碼:

poc為"test":1:

訪問結果如下圖所示:

根據訪問結果可以看到反序列化之前先呼叫了__wakeup 方法,再呼叫_destruct 方法。

將傳入的序列化資料的物件變數個數由1更改為2,頁面只執行了__destruct方法,而且沒有輸出name,是由於反序列化資料時失敗無法建立物件。

修改測試指令碼如下:

<?php 

class

test

}public

function __destruct()

}$str = $_get["s"

];@$un_str =unserialize($str);

echo $un_str->name."";

?>

構造poc進行寫入一句話木馬操作。

poc為:"test":1:

執行後結果如下圖所示:

在對應的資料夾找到剛剛寫入的檔案,發現檔案中內容為空,沒有一句話木馬,說明寫入失敗。

失敗原因為:__destruct方法在呼叫時將name引數寫入wcute.php檔案但是由於__wakeup方法清除了物件屬性,所以在呼叫__destruct時已經沒有了name屬性,因此檔案將會寫入失敗。

將poc中物件屬性個數改為2繼續嘗試

poc為:"test":2:

執行後如下圖所示:

在對應的資料夾找到該檔案發現檔案中被寫入了一句話木馬。

如圖所示:

使用菜刀連線發現連線成功,如下圖所示

php反ajax PHP實現反ajax推送

這次給大家帶來php實現反ajax推送,php實現反ajax推送的注意事項有哪些,下面就是實戰案例,一起來看一下。入口檔案index.html 反ajax推送 send require content box 訊息框傳送 連線 function else,url ajaxpush.php type ...

PHP正則反斜槓的講究

今天看了一篇文章說下自己的理解 先看一段 看起來很正常,但是實際上這段 會報錯!if preg match i cmd,match 它會報錯,報錯的資訊是 結束分隔符 不存在,這裡指的 結束分隔符 實際上在php正則中就是 定界符 再看這段,只是前後換了下位置 發現就不會報錯了!if preg ma...

php 訊息實時推送(反ajax推送)

入口檔案index.html 反ajax推送title send require content box style src script head class content box id content box title style border none 訊息框div class conte...