位置: 编程技术 - 正文

深入浅析PHP的session反序列化漏洞问题(php sid)

发布时间:2024-01-12

推荐整理分享深入浅析PHP的session反序列化漏洞问题(php sid),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php-s,php-s,phpsh,phpsh,phpseclib,php-s,phpseclib,php-s,内容如对您有帮助,希望把文章链接给更多的朋友!

在php.ini中存在三项配置项:

以上的选项就是与PHP中的Session存储和序列话存储有关的选项。

在使用xampp组件安装中,上述的配置项的设置如下:

在上述的配置中,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_serialize 引擎下,session文件中存储的数据为:

php 引擎下文件内容为:

php_binary 引擎下文件内容为:

由于name的长度是4,4在ASCII表中对应的就是EOT。根据php_binary的存储规则,最后就是names:6:"spoock";。(突然发现ASCII的值为4的字符无法在网页上面显示,这个大家自行去查ASCII表吧)

PHP Session中的序列化危害

PHP中的Session的实现是没有的问题,危害主要是由于程序员的Session使用不当而引起的。

如果在PHP在反序列化存储的$_SESSION数据时使用的引擎和序列化使用的引擎不一样,会导致数据无法正确第反序列化。通过精心构造的数据包,就可以绕过程序的验证或者是执行一些系统的方法。例如:

php文件如:

深入浅析PHP的session反序列化漏洞问题(php sid)

访问后得到session文件中的内容如下:

但此时模拟在其他页面使用不同的php引擎来读取时的内容如下:(默认使用php引擎读取session文件)

访问该页面输出xx

这是因为当使用php引擎的时候,php引擎会以|作为作为key和value的分隔符,那么就会将 a:1:{s:4:"ryat";s::" 作为SESSION的key,将 O:1:"A":1:{s:1:"a";s:2:"xx";} 作为value,然后进行反序列化,最后就会得到A这个类。

这种由于序列话化和反序列化所使用的不一样的引擎就是造成PHP Session序列话漏洞的原因。漏洞在加载使用php引擎的页面时session去读session中的内容并反序列化导致漏洞触发,不需要任何输出

GCTF上的一道session反序列化漏洞分析:

index.php中内容为:

在php中,经常会使用序列化操作来存取数据,但是在序列化的过程中如果处理不当会带来一些安全隐患。

query.php 中的内容为:

思路如下:

这题中我们构造一个TOPC,在析构的时候则会调用echo $this->attr;;

将attr赋值为TOPB对象,在echo TOPB的时候会自动调用__tostring魔术方法

在__tostring中会调用unserialize($this->attr),因为后面用到token和ticket,所以显然时TOPA对象。后面判断需要$this->obj->token === $this->obj->ticket,所以在序列化的时候进行指针引用使$a->ticket = &$a->token;,即可绕过判断。

至于为什么(string)$this->obj会输出flag,后台写的login可能是__tostring吧。

其中反序列化字符串中会有一个__wakeup()函数清空里面的参数,我问可以通过一个cve来绕过:CVE--。将Object中表示数量的字段改成比实际字段大的值即可绕过wakeup函数。

最后的代码为:

最终payload为:

以上所述是小编给大家介绍的PHP的session反序列化漏洞,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对积木网网站的支持!

PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面) 首先来看一下我已经实现的效果图:消费者页面:(本篇随笔)(1)会显示店主的头像(2)当前用户发送信息显示在右侧,接受的信息,显示在左侧店

详解Yii2 之 生成 URL 的方法 前言在项目中,推荐使用Yii2内置的URL工具类生成链接,这样可以非常便捷的管理整站的URL行为:比如通过修改配置改变整站的URL格式等。URL更多高级的

详解Yii2.0使用AR联表查询实例 Yii2.0中使用联表查询有两种办法,第一种是查询构建器(QueryBuilder),第二种使用活动记录(ActiveRecord),中文网对查询构建器讲的很详细,AR则说的很

标签: php sid

本文链接地址:https://www.jiuchutong.com/biancheng/293238.html 转载请保留说明!

上一篇:iis 7下安装laravel 5.4环境的方法教程

下一篇:PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)

  • 缴纳汇算清缴所得税怎么做账
  • 不动产租赁需要预缴增值税吗
  • 每个月发工资扣个税扣的肉疼
  • 印花税可以申报以前年度吗
  • 融资租赁可以确认为资产吗
  • 购买生产原料分录
  • 发票只能全部冲开吗
  • 开发票第一行
  • 如何分清进口农产品增值税抵扣率
  • 实收资本未到位情况说明
  • 大型机械进退场费属于机械台班单价组成部分
  • 收到进项专用发票怎么做
  • 库存现金余额过大的定性
  • 会务费发票要附上照片吗
  • 补偿贸易具体方式
  • 电话费补贴属于免税收入吗
  • 出纳备用金收支登记表怎么做
  • 应交增值税为负数代表什么
  • 出口视同内销补缴增值税会计分录?
  • 财务会计制度备案操作流程
  • 电子商务如何做账
  • 航天税控服务费
  • 出租商品计入什么科目
  • 发票开出后对方不付款
  • PHP:pg_options()的用法_PostgreSQL函数
  • 取得普通发票与专票区别
  • 货物运输业的增值税税率
  • 浠字的意思和含义是什么
  • php strlen函数
  • 非合理损耗计入入账成本吗
  • 企业合并发生的交易费用
  • 来料加工 增值税
  • php读取文件内容
  • php ffi
  • 股东分红放到哪个会计科目
  • 应交税费未交增值税
  • java 导出excel
  • 供货单位与开票单位不一致
  • 收到的发票税收怎么处理
  • python elasticsearch timeout
  • 电子产品报废清理是否缴纳教育附加税
  • 企业出租无形资产使用权取得的收入应计入
  • 取得虚开普票如何处置
  • 企业转移地点剩余房产
  • 管理费用结转到哪个科目
  • 低值易耗品如何评估
  • 专利补贴收入计入什么科目
  • 个人独资企业个体工商户的区别
  • 咨询服务业成本比例
  • 房租已支付未收到发票可以做费用吗
  • 开发成本贷方负数表示什么
  • 明细分类账怎么打印
  • 现金日记账的对账工作有哪些
  • 固定资产公司
  • 删除mysql数据库中表的内容命令
  • Win Server 2008 r2 开启 Aero 桌面主题的方法
  • centos叫什么
  • 如何用win7
  • xp系统电脑开机密码忘记了
  • linux如何替换
  • win10的ghost
  • dns_config_service_win
  • Mac系统中使用QuickTime Player实现屏幕录像图文教程
  • win xp 内存
  • windows mobile10
  • win10应用商店更新比蜗牛还慢
  • cocos2dx加libevent库
  • ubuntu系统怎么安装
  • node.js cookie-parser之parser.js
  • ztree拖动
  • unity如何得到输入框的输入
  • 利用jQuery及AJAX技术定时更新GridView的某一列数据
  • 各类扩展名
  • unity 加载界面
  • 安卓大作业小游戏五子棋
  • BootStrap glyphicon图标无法显示的解决方法
  • js function的this指向
  • android怎么学
  • 金税盘注销后怎么开发票
  • 股权转让税务备案时间
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号