av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

PHP session反序列化漏洞超詳細(xì)講解

瀏覽:255日期:2022-06-06 16:50:53
目錄
  • session請(qǐng)求過(guò)程
  • session_start的作用
  • session存儲(chǔ)機(jī)制
  • session反序列化漏洞

session請(qǐng)求過(guò)程

當(dāng)?shù)谝淮卧L問(wèn)網(wǎng)站時(shí),Seesion_start()函數(shù)就會(huì)創(chuàng)建一個(gè)唯一的Session ID,并自動(dòng)通過(guò)HTTP的響應(yīng)頭,將這個(gè)Session ID保存到客戶端Cookie中。同時(shí),也在服務(wù)器端創(chuàng)建一個(gè)以Session ID命名的文件,用于保存這個(gè)用戶的會(huì)話信息。當(dāng)同一個(gè)用戶再次訪問(wèn)這個(gè)網(wǎng)站時(shí),也會(huì)自動(dòng)通過(guò)HTTP的請(qǐng)求頭將Cookie中保存的Seesion ID再攜帶過(guò)來(lái),這時(shí)Session_start()函數(shù)就不會(huì)再去分配一個(gè)新的Session ID,而是在服務(wù)器的硬盤中去尋找和這個(gè)Session ID同名的Session文件,將這之前為這個(gè)用戶保存的會(huì)話信息讀出,在當(dāng)前腳本中應(yīng)用,達(dá)到跟蹤這個(gè)用戶的目的。

session_start的作用

當(dāng)會(huì)話自動(dòng)開(kāi)始或者通過(guò)session_start()手動(dòng)開(kāi)始的時(shí)候, PHP 內(nèi)部會(huì)依據(jù)客戶端傳來(lái)的PHPSESSID來(lái)獲取現(xiàn)有的對(duì)應(yīng)的會(huì)話數(shù)據(jù)(即session文件), PHP 會(huì)自動(dòng)反序列化session文件的內(nèi)容,并將之填充到 $_SESSION 超級(jí)全局變量中。如果不存在對(duì)應(yīng)的會(huì)話數(shù)據(jù),則創(chuàng)建名為sess_PHPSESSID(客戶端傳來(lái)的)的文件。如果客戶端未發(fā)送PHPSESSID,則創(chuàng)建一個(gè)由32個(gè)字母組成的PHPSESSID,并返回set-cookie。

session存儲(chǔ)機(jī)制

PHP中的Session中的內(nèi)容并不是放在內(nèi)存中的,而是以文件的方式來(lái)存儲(chǔ)的,存儲(chǔ)方式就是由配置項(xiàng)session.save_handler來(lái)進(jìn)行確定的,默認(rèn)是以文件的方式存儲(chǔ)。存儲(chǔ)的文件是以sess_sessionid來(lái)進(jìn)行命名的,文件的內(nèi)容就是Session值的序列化之后的內(nèi)容。

了解一下PHP Session在php.ini中主要存在以下配置項(xiàng):

在PHP中Session有三種序列化的方式,分別是php,php_serialize,php_binary,不同的引擎所對(duì)應(yīng)的Session的存儲(chǔ)的方式不同

php處理器:

php_binary處理器:

php_serialize處理器:

session反序列化漏洞

PHP在session存儲(chǔ)和讀取時(shí),都會(huì)有一個(gè)序列化和反序列化的過(guò)程,PHP內(nèi)置了多種處理器用于存取 $_SESSION 數(shù)據(jù),都會(huì)對(duì)數(shù)據(jù)進(jìn)行序列化和反序列化,PHP中的Session的實(shí)現(xiàn)是沒(méi)有的問(wèn)題的,漏洞主要是由于使用不同的引擎來(lái)處理session文件造成的。

存在$_session變量賦值

使用php_serialize引擎來(lái)存儲(chǔ)session

session.php

<?phperror_reporting(0);ini_set("session.serialize_handler","php_serialize");session_start();$_SESSION["username"] = $_GET["user"];echo "<pre>";var_dump($_SESSION);echo "</pre>";?>

session2.php

<?phperror_reporting(0);ini_set("session.serialize_handler","php");session_start();class user{    var $name;    var $age;    function __wakeup(){echo "hello ".$this->name." !";    }}?>

分析:

在session.php中存儲(chǔ),這里要注意,因?yàn)閟ession.php存儲(chǔ)器使用了php.serialize,而session.php使用的是php,因此漏洞的主要原因在于不同的引擎對(duì)于豎杠'| '的解析產(chǎn)生歧義。

對(duì)于php_serialize引擎來(lái)說(shuō)'| '可能只是一個(gè)正常的字符;但對(duì)于php引擎來(lái)說(shuō)'| '就是分隔符,前面是$_SESSION['username']的鍵名,后面是GET參數(shù)經(jīng)過(guò)serialize序列化后的值。從而在解析的時(shí)候造成了歧義,導(dǎo)致其在解析Session文件時(shí)直接對(duì)' | '后的值進(jìn)行反序列化處理。

payload.php

<?phpclass user {    var $name;    var $age;}$a = new user();$a ->age="888";$a ->name="cc";echo serialize($a);?>

漏洞復(fù)現(xiàn):

|O:4:"user":2:{s:4:"name";s:2:"cc";s:3:"age";s:3:"888";}

然后使用session2.php讀取:直接讀文件就可以

到此這篇關(guān)于PHP session反序列化漏洞超詳細(xì)講解的文章就介紹到這了,更多相關(guān)PHP session反序列化漏洞內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 亚洲精品高清视频在线观看 | 日韩一级免费观看 | 亚洲精品视频在线播放 | 中文字幕 在线观看 | 久久精品欧美电影 | 午夜免费视频 | 免费a级毛片在线播放 | 国产有码 | 欧美精品在线一区 | 一级大片免费 | 欧美色人 | 日韩av一区二区在线观看 | 91视频在线 | av大片在线| 中文字幕国产 | 国产午夜精品视频 | 国产成人精品区一区二区不卡 | 91久久久久久久久久久久久 | 日本精品一区二区三区视频 | 精品国产91亚洲一区二区三区www | 日本免费一区二区三区四区 | 成人欧美一区二区三区白人 | 91久久国产精品 | caoporn地址 | 欧美成人免费在线视频 | 欧美激情在线播放 | 久热精品在线 | 国产精品av久久久久久久久久 | 岛国在线免费观看 | 中文字幕亚洲欧美 | 人人鲁人人莫人人爱精品 | 中文字幕一区二区三区精彩视频 | 久久美女视频 | 夜夜爽99久久国产综合精品女不卡 | 国产精品高潮呻吟久久久久 | 性国产xxxx乳高跟 | 亚洲一区导航 | 色综合天天天天做夜夜夜夜做 | 天天插天天操 | 久久天天躁狠狠躁夜夜躁2014 | 日日夜夜天天 |