PHP 中Session 還原序列化機制的三種方法

來源:互聯網
上載者:User

標籤:his   ;;   sla   customize   handler   網頁   過程   soc   creat   

?php.ini中存在三項配置項:

session.save_path="" --設定session的儲存路徑

session.save_handler=""--設定使用者自訂儲存函數,如果想使用PHP內建會話儲存機制之外的可以使用本函數(資料庫等方式)

session.auto_start boolen--指定會話模組是否在請求開始時啟動一個會話預設為0不啟動

session.serialize_handler string--定義用來序列化/還原序列化的處理器名字。預設使用php

以上的選項就是與PHP中的Session儲存和序列話儲存有關的選項。

在使用xampp組件安裝中,上述的配置項的設定如下:

session.save_path="D:\xampp\tmp"表明所有的session檔案都是儲存在xampp/tmp下

session.save_handler=files 表明session是以檔案的方式來進行儲存的

session.auto_start=0表明預設不啟動session

session.serialize_handler=php 表明session的預設序列話引擎使用的是php序列話引擎

在上述的配置中,session.serialize_handler是用來設定session的序列話引擎的,除了預設的PHP引擎之外,還存在其他引擎,不同的引擎所對應的session的儲存方式不相同。

php_binary:儲存方式是,鍵名的長度對應的ASCII字元+鍵名+經過serialize函數序列化處理的值

php:儲存方式是,鍵名+豎線+經過serialize函數序列處理的值

php_serialize(php>5.5.4):儲存方式是,經過serialize函數序列化處理的值

在PHP中預設使用的是PHP引擎,如果要修改為其他的引擎,只需要添加代碼ini_set('session.serialize_handler', '需要設定的引擎');。範例程式碼如下:

<?php

ini_set(&apos;session.serialize_handler&apos;&apos;php_serialize&apos;);

session_start;

// do something

儲存機制

php中的session中的內容並不是放在記憶體中的,而是以檔案的方式來儲存的,儲存方式就是由配置項session.save_handler來進行確定的,預設是以檔案的方式儲存。

儲存的檔案是以sess_sessionid來進行命名的,檔案的內容就是session值的序列話之後的內容。

假設我們的環境是xampp,那麼預設配置如上所述。

在預設配置情況下:

<?php

session_start

$_SESSION[&apos;name&apos;]=&apos;spoock&apos;;

var_dump;

?>

最後的session的儲存和顯示如下:

可以看到PHPSESSID的值是jo86ud4jfvu81mbg28sl2s56c2,而在xampp/tmp下儲存的檔案名稱是sess_jo86ud4jfvu81mbg28sl2s56c2,檔案的內容是name|s:6:"spoock";。name是索引值,s:6:"spoock";是serialize("spoock")的結果。

在php_serialize引擎下:

<?php

ini_set(&apos;session.serialize_handler&apos;&apos;php_serialize&apos;);

session_start;

$_SESSION[&apos;name&apos;]=&apos;spoock&apos;;

var_dump;

?>

SESSION檔案的內容是a:1:{s:4:"name";s:6:"spoock";}。a:1是使用php_serialize進行序列話都會加上。同時使用php_serialize會將session中的key和value都會進行序列化。

在php_binary引擎下:

<?php

ini_set(&apos;session.serialize_handler&apos;&apos;php_binary&apos;);

session_start;

$_SESSION[&apos;name&apos;]=&apos;spoock&apos;;

var_dump;

?>

SESSION檔案的內容是names:6:"spoock";。由於name的長度是4,4在ASCII表中對應的就是EOT。根據php_binary的儲存規則,最後就是names:6:"spoock";。(突然發現ASCII的值為4的字元無法在網頁上面顯示,這個大家自行去查ASCII表吧)

序列化簡單利用

test.php

<?php

classsyclover{

var$func="";

function__construct{

$this->func="phpinfo";

}

function__wakeup{

eval($this->func);

}

}

unserialize($_GET[&apos;a&apos;]);

?>

在11行對傳入的參數進行了序列化。我們可以通過傳入一個特定的字串,還原序列化為syclover的一個樣本,那麼就可以執行eval方法。我們訪問localhost/test.php?a=O:8:"syclover":1:{s:4:"func";s:14:"echo "spoock";";}。那麼還原序列化得到的內容是:

object(syclover)[1]

public&apos;func&apos;=>string&apos;echo "spoock";&apos;(length=14)

最後頁面輸出的就是spoock,說明最後執行了我們定義的echo "spoock";方法。

這就是一個簡單的序列化的漏洞的示範

PHP Session中的序列化危害

PHP中的Session的實現是沒有的問題,危害主要是由於程式員的Session使用不當而引起的。

如果在PHP在還原序列化儲存的$_SESSION資料時使用的引擎和序列化使用的引擎不一樣,會導致資料無法正確第還原序列化。通過精心構造的資料包,就可以繞過程式的驗證或者是執行一些系統的方法。例如:

$_SESSION[&apos;ryat&apos;]=&apos;|O:11:"PeopleClass":0:{}&apos;;

上述的$_SESSION的資料使用php_serialize,那麼最後的儲存的內容就是a:1:{s:6:"spoock";s:24:"|O:11:"PeopleClass":0:{}";}。

但是我們在進行讀取的時候,選擇的是php,那麼最後讀取的內容是:

array(size=1)

&apos;a:1:{s:6:"spoock";s:24:"&apos;=>

object(__PHP_Incomplete_Class)[1]

There are multiple header layouts available that allow you to utilize background images, office locations and hours and social media links. Multi-lingual sites even have the ability to add a language drop down menu. On a related note, Consulting WP comes with seven language files, is compatible with WPML and is translation-ready.

WordPress Customizer

Consulting WP is compatible with the WordPress Customizer, which you can use to preview changes to the theme’s options in real-time.

Create Your Own Layouts

With the included Visual Composer page builder plugin, you can create your own complex page layouts without having to touch code.

Features that Work for Business 

PHP 中Session 還原序列化機制的三種方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.