About Session

總結(jié)一下Session


眾所周知,HTTP是一種無(wú)狀態(tài)的協(xié)議,所以就需要一種機(jī)制來(lái)保存客戶端的一些信息,這個(gè)時(shí)候session就派上用場(chǎng)了

session可以做到的事情有很多,比如最常見(jiàn)的記錄登錄狀態(tài),也可以當(dāng)作客戶個(gè)人數(shù)據(jù)庫(kù)來(lái)使用

但是某些特定情況下,session也會(huì)導(dǎo)致一些安全問(wèn)題


PHP

php session儲(chǔ)存在服務(wù)端

php一般與nginx、apache一起使用,這種時(shí)候日志文件一般是root用戶/adm(或者其他)用戶組,www-data權(quán)限無(wú)法包含的,但是session卻是www-data用戶,也就沒(méi)有權(quán)限上的問(wèn)題

php session一般保存在/var/lib/php/sessions目錄下,以sess_跟sessionid拼接的方式命名,可以通過(guò)php.ini配置文件或者phpinfo進(jìn)行查看

session包含

如果網(wǎng)站存在可利用的文件包含點(diǎn),且同時(shí)session中的內(nèi)容可控(比如登陸之后的用戶名),攻擊者就可以通過(guò)包含session的方式來(lái)get shell

session upload

例題:http://web.jarvisoj.com:32784/

在php的默認(rèn)配置下(這里我自行關(guān)掉了cleanup,為了方便查看上傳session upload的結(jié)果)

upload_progress.enabled是打開(kāi)的(哪怕在php.ini中是用;注釋掉的,想要關(guān)掉就要修改php.ini,去掉注釋,并將On改成Off)

在這種情況下,就算網(wǎng)站中session不可控,攻擊者可以通過(guò)上傳session的方式來(lái)控制session

PS:不用session_start也行

參考資料:https://secure.php.net/manual/en/session.upload-progress.php

如果cleanup為On,那就需要使用條件競(jìng)爭(zhēng)了


Python - Flask

Flask web框架的session儲(chǔ)存在客戶端

當(dāng)然是經(jīng)過(guò)加密的,加密的密鑰的是Flask app運(yùn)行的時(shí)候使用的secret_key,所以如果我們能獲取到這個(gè)密鑰,就能任意偽造session

腳本如下,從cookie中可以取得偽造的session

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容