session反序列化
php的session机制
PHP中的session中的内容并不是放在内存中的,而是以文件的方式来存储的,存储方式就是由配置项 session.save_handler
来进行确定的,默认是以文件的方式存储
存储的文件是以sess_[sessionid]
来进行命名的
在php 5.5.4以前默认选择的是php,5.5.4之后就是php_serialize
选择器 | 存储格式 | 样例 $_SESSION [‘name’]=’ocean’ |
---|---|---|
php_serialize | 经过 serialize () 函数序列化数组 | a:1:{s:4:“name”;s:5:“ocean”;} |
php (默认) | 键名 竖线 经过 serialize () 函数处理的值 | name|s:5:“ocean”; |
php_binary | 键名的长度对应的 ascii 字符佳宁 serialize () 函数序列化的值 | name s:6:“spoock”; |
反序列化方式
有$_SESSION变量赋值
1 |
|
比如这里我get进去一个值为shy,查看一下各个存储格式:
1 | php : lemon|s:3:"shy"; |
因此在数组存储session
方式,即php_serialize
下,可以插入|造成反序列化
最后由下一次session_start触发
没有$_SESSION变量赋值
当在php.ini
中设置session.upload_progress.enabled = On
的时候,可以设置上传一个名字为恶意序列化字符串的文件同时写入一个与PHP_SESSION_UPLOAD_PROGRESS
同名文件,这时序列化字符串文件名会以键的形式储存在session中等待下次触发
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 anz!