php反序列化注入,有趣的php反序列化總結

2021-10-25 21:47:07 字數 2418 閱讀 7116

前言

漏洞種類

一是將傳來的序列化資料直接unserilize,造成魔幻函式的執行。這種情況在一般的應用中依然屢見不鮮。

二是php session 序列化及反序列化處理器設定使用不當會帶來的安全隱患。

ryat牛講得很明白了。php 內建了多種處理器用於訪問 $_session 資料時會對資料進行序列化和反序列化。

default

處理器 對應的儲存格式

php 鍵名 + 豎線 + 經過 serialize() 函式反序列處理的值

php_binary 鍵名的長度對應的 ascii 字元 + 鍵名 + 經過 serialize() 函式反序列處理的值

php_serialize (php>=5.5.4) 經過 serialize() 函式反序列處理的陣列

處理器對應的儲存格式

php鍵名+豎線+經過serialize()函式反序列處理的值

php_binary鍵名的長度對應的ascii字元+鍵名+經過serialize()函式反序列處理的值

php_serialize(php>=5.5.4)經過serialize()函式反序列處理的陣列

關鍵點在於,如果指令碼中設定的序列化處理器與php.ini設定的不同,或者兩個指令碼註冊session使用的序列化處理器不同,那麼就會出現安全問題。

原因是未正確處理\\』|\\』,如果以php_serilize方式存入,比如我們構造出」|」 偽造的序列化值存入,但之後解析又是用的php處理器的話,那麼將會反序列化偽造的資料(\\』|\\』之前當作鍵名,\\』|\\』之後當作鍵值)。

(l.n.: php5.6.13版本以前是第乙個變數解析錯誤登出第乙個變數,然後解析第二個變數,但是5.6.13以後如果第乙個變數錯誤,直接銷毀整個session)。

那麼我們通過什麼方式將資料注入到session中呢?

一方面,開發者本身將使用者可控的資料傳進了session,比如joomla等;

另一方面,可通過配置不當可造成session被控。當session.upload_progress.enabled開啟時,php會記錄上傳檔案的進度,在上傳時會將其資訊儲存在$_session中。詳情見

難點在於構造出pop鏈達到自己想要的結果。跟rop鏈相同,現在已經有人在研究如何自動化構造出pop鏈,並取得了一些成效。

例項default

ini_set('session.serialize_handler', 'php');

require("./class.php");

session_start();

$obj = new foo1();

$obj->varr = "phpinfo.php";

ini_set('session.serialize_handler','php');

require("./class.php");

session_start();

$obj=newfoo1();

$obj->varr="phpinfo.php";

跟phpinfo中顯示出的配置檔案(php_serialize)相比,對session序列化處理器是不一樣的。

由於session.auto_start是開啟的,所以它會先以php_serilize序列化方式存入,但在讀取時卻是以php序列化的方式,我們可以注入\\』|\\』,來使得後面任意偽造的序列化字串,以此來利用反序列化漏洞。

default

highlight_string(file_get_contents(basename($_server['php_self'])));

//show_source(__file__);

class foo1}}

|o:4:"foo1":1:}}

其它還有種情況就是單純地偽造資料,不利用魔幻函式,而是利用之後對序列化資料的處理來達到惡意效果。比如0ctf的唯一**審計題。

懶得去找原始碼,就憑印象簡單說下思路,裡面有三個考點:

1. 用陣列繞過正則;

2. 可控一部分反序列化資料,導致後面執行的指定檔案讀取變為了任意檔案讀取;

3. 由於可控部分還需考慮後面的單位,相當於偽造兩個值,但之前的計算長度會增大。所以跟蹤控制流,發現可巧妙利用過濾函式來增加長度。

我們這裡只重點說第二部分,對於可控的一些反序列化資料能幹嘛?

除了根據反序列化的性質外,更通用的是觀察後面對此資料的敏感操作,如果有檔案讀取,刪除等敏感操作,那麼我們可以偽造從而達到任意操縱檔案的效果。 可也會出現上面的情況,長度已定,後面還需不需要偽造資料,如果要,則跟蹤控制流能否來解決長度等問題。當然,對於json或其它的訪問格式也是這個道 理,而不是僅僅侷限於反序列化的特性了。

結語在實際**審計中,這類漏洞是較為常見的。但是利用起來往往比較複雜。一是要跟蹤到達漏洞點去,提供滿足前期必要條件;二是將包含的類如何進行 有效利用。而一些大型的利用,pop鏈往往能達到5個以上,國外的不少應用早些年也爆出了危害相當高的漏洞,但在國內一直是不溫不火的。

php反序列化注入,php關於反序列化物件注入漏洞

php物件注入是乙個非常常見的漏洞,這個型別的漏洞雖然有些難以利用,但仍舊非常危險。本文主要和大家分享php關於反序列化物件注入漏洞詳解,希望能幫助到大家。分析php基礎 serialize 把乙個物件轉成字串形式,可以用於儲存 unserialize 把serialize序列化後的字串變成乙個物件...

PHP反序列化

php反序列化漏洞 一 序列化定義 序列化 serialization 在電腦科學的資料處理中,是指將資料結構或物件狀態轉換成可取用格式 例如存成檔案,存於緩衝,或經由網路中傳送 以留待後續在相同或另一台計算機環境中,能恢復原先狀態的過程。概念很容易理解,其實就是將資料轉化成一種可逆的資料結構,自然...

php反序列化

php序列化 將物件或變數轉換成字串。php反序列化 是將字串轉換成原來的變數。serialize serialize 函式用於序列化物件或陣列,並返回乙個字串。serialize 函式序列化物件後,可以很方便的將它傳遞給其他需要它的地方,且其型別和結構不會改變。sites array google...