宿迁腾云网络网站建设公司

腾云网络 六年经验专注网站建设
  • 首页
  • 服务项目
    • 网站建设
    • 微信小程序
    • SEO优化
    • APP开发
  • 建站费用
  • 成功案例
    • 网站建设案例
    • 小程序案例
    • APP开发案例
    • SEO优化案例
  • 行业动态
    • 网站建设
    • SEO优化
    • 技术日志
  • 联系我们
    • 关于我们
首页 > 行业动态 > 技术日志 > php代码注入漏洞PHP中的魔法函数反序列化漏洞原理(2)_php注入代码

php代码注入漏洞PHP中的魔法函数反序列化漏洞原理(2)_php注入代码

2022-04-26

序列化和反序列化简介

() 将对象转换为字符串, () 将字符串恢复为对象。在PHP应用中,序列化和反序列化一般用于缓存,比如缓存等。简单来说,序列化就是将一个对象转换成可以传输的字符串,而反序列化就是用一个对象替换原来的字符。

简单示例

php
class test{
public $suifeng="shuai";
}
$a=new test(); //实例化一个对象
$b=serialize($a); //进行序列化
echo $b; //输出序列化后的字符串
echo '
'; echo "我是分割线"; $c=unserialize($b); //把序列化后的字符串反序列化 echo '
'; echo $c->suifeng; ?>

下面我们来看看反序列化后输出字符的含义

第一个输出是

O:4:"test":1:{s:7:"";s:5:"";}

O->object
4->object的长度
test->object的名称
1->object中变量个数
s->变量名数据类型
7->变量名长度
suifeng->变量名
S->变量值数据类型
5->变量值长度
shuai->变量的值

PHP 其他数据类型

a - array
b - boolean
d - double
i - integer
o - common object
r - reference
s - string
C - custom object
O - class
N - null
R - pointer reference
U - unicode string

PHP 常用魔法函数

() //创建对象时调用

() //在对象被销毁之前调用

() //调用类中不存在的方法时执行

() //调用类中不存在的静态方法方法时执行。

() //反序列化后会立即调用

() //在对象序列化之前调用

() //对象作为字符串时调用

() //用于从不可访问的属性中读取数据

() //用于将数据写入不可访问的属性

() //调用函数的方式,调用对象时的响应方式

() // 在不可访问的属性上调用 () 或 () 来触发

() // 当 () 用于不可访问的属性时触发

,, 序列化对象的区别

php v7.x在反序列化时对访问类型不敏感

变量

直接变量名反序列化

变量

\x00 + * + \x00 + 变量名

您可以使用 S:5:"\00*\00op" 代替 s:5:"?*?op"

变量

\x00 + 类名 + \x00 + 变量名

反序列化漏洞的条件

1、函数的参数可控

2、后台使用PHP中对应的魔术函数

反序列化漏洞原理

让我们先运行下面的代码

';
}
function __destruct(){
echo '调用了析构函数
'; } function __wakeup(){ echo '调用了苏醒函数
'; } } echo '创建对象a
'; $a=new ABC; echo '序列化
'; $a_ser=serialize($a); echo '反序列化
'; $a_unser=unserialize($a_ser); echo '对象快死了!'; ?>

PHP语言本身的漏洞

还有一个反序列化漏洞是由于PHP语言本身的一个漏洞遇到了某些特征而导致的

示例:导致失败 (CVE-2016-7124)

php版本

在序列化字符串中,如果代表对象属性个数的值大于实际属性个数,则跳过()的执行

序列化问题

当 () 被调用或 .在php.ini中为1,PHP内部调用会话管理器,将访问用户序列化后存放在指定目录下(默认为/tmp)。

PHP中共有三种序列化处理器,如下:

处理器

对应的存储格式

php

键名+竖线+()函数反序列化的值

键名长度+键名+()函数反序列化的值对应的字符

(php>=5.5.4)

()函数反序列化处理的数组

配置文件php.ini包含这些与存储配置相关的配置项:

.="" -- 设置的存储路径,默认为/tmp

。 --指定会话模块是否在请求开始时启动会话网站开发,默认为0不启动

。 --定义用于序列化/反序列化的处理程序的名称。默认使用php

.="" --设置用户自定义存储函数,如果要使用PHP内置的存储机制php代码注入漏洞,可以使用这个函数(数据库等),比如存储为文件默认情况下

并且PHP中默认使用PHP引擎。如果我们要修改到另一个引擎,我们需要添加代码('.', 'The to be set'),例如:

;

:即元数据、压缩文件的属性等信息,以序列化方式存储

:压缩文件的内容

:签名,放在文件末尾

这里有两个关键点,一个是文件标识符,必须以();?>结尾,但是对前面的内容没有限制,也就是说我们可以很容易的伪造一个图片文件或者其他文件来绕过一些上传限制;二是反序列化。存储在phar中的元数据信息是以序列化的方式存储的。当文件操作函数通过phar://伪协议解析phar文件时,数据会被反序列化,这样的文件操作函数有很多

先决条件

Phar.=Off 在 php.ini 中设置

php >=5.3.0

演示测试

根据文件结构,我们自己构建一个phar文件。 PHP 有一个内置的 Phar 类来处理相关操作

startBuffering();
$phar->setStub(""); //设置stub
$o = new TestObject();
$phar->setMetadata($o); //将自定义的meta-data存入manifest
$phar->addFromString("test.txt", "test"); //添加要压缩的文件
//签名自动计算
$phar->stopBuffering();
?>  

很明显是以序列化的形式存储的

php sql注入代码_php注入代码_php代码注入漏洞

如果我们现在通过 phar:// 包装器对现有的 Phar 文件执行文件操作,它的序列化元数据将被反序列化。这意味着我们在元数据中注入的对象被加载到应用程序的范围内。如果这个应用程序有一个命名类并且定义了魔法方法() 或 has(),这些方法将被自动调用。这意味着我们可以在我们的代码库中触发任何析构函数或唤醒方法。更糟糕的是,如果这些方法对我们注入的数据进行操作,这可能会导致更多漏洞。

以下是受影响的功能列表

此时可以使用phar://协议

使用条件

可以上传phar文件

文件操作函数的参数可控,不过滤:,/phar等特殊字符

有一些魔术方法可用作“跳板”

反序列化字符转义

当 PHP 反序列化时,底层代码使用 ;作为字段分隔符,}作为结尾(字符串除外),根据长度判断内容。同时,反序列化过程必须严格按照序列化过程进行。成功实现反序列化的规则。

我们来分析一段代码

';
echo $c->suifeng;
?>

发现序列化为O:4:"test":1:{s:7:"";s:5:"";},反序列化也正常进行。当我们修改序列化结果为 O:4:"test":1:{s:7:"";s:5:"";}i:1;s:4:"test";正常解析。

但是如果我们修改它的长度,就会报错,比如O:4:"test":1:{s:7:"";s:4:"";}

知道了这个特性,下面我们来分析一下代码

可以看到反序列化为a:2:{i:0;s:5:"";i:1;s:4:"1234";},当我们修改参数为 进程首先反序列化$user,然后执行函数中的函数,用它替换test,导致长度不一致,最终导致反序列化失败。

a:2:{i:0;s:9:"";i:1;s:4:"1234";}

a:2:{i:0;s:9:"";i:1;s:4:"1234";}

假设这个代码流是创建账户的代码流,此时$可以被用户控制,那么我们可以通过控制可控参数使反序列化字符转义。它的本质其实和sql注入一样,双引号和大括号的闭合,但是反序列化字符的转义需要满足其特性的一些条件。接下来我们构建它。

因为它是用 ; 严格分隔的作为字段并以 } 结尾(字符串除外),我们可以这样关闭它。

可以看到我们构造了$=";i:1;s:6:"";},它被序列化为a:2:{i:0;s:29:"";i: 1; s:6:"";}";i:1;s:4:"1234";},经过这个序列化后,我们会反序列化它,红色部分不会进入反序列化。但是可以看到替换后反序列化还是没有成功,我们来分析一下。

替换后我们得到

a:2:{i:0;s:29:"";i:1;s:6:"";}";i:1;s:4:"1234";},红色部分is 反序列化时会被忽略,要反序列化的字段是

a:2:{i:0;s:29:"";i:1;s:6:"";}

可以看到这里的 s:29:"" 显然是错误的,所以我们的反序列化会失败,那么我们如何保持正确呢?这是我们在反序列化字符转义特征时需要考虑的。东西。

在 ('test','',$) 代码中,test 被替换为比前一个 test 多一个字符,所以只要我们添加足够多的 test 来替换它相同的长度,这将允许我们的反序列化正常进行。

我们构建

";i:1;s:6:"";}

这样php代码注入漏洞网站开发,我们修改了零钱业务的密码

Tag: php test 序列化
网站制作公众号

宿迁腾云网络网站建设公司 | 网站开发 | 网站制作 | 网站优化

咨询电话:13160355545

上一篇

返回栏目

下一篇

热推

  • php网站源码加密首发好看的响应式高端网站模板源码(可运营)武汉婚嫁网源码|婚庆网站源码(php+mysql)
  • Java的微信开发中使用XML格式和JSON格式数据的详解及实例
  • 没有哪一个CMS是不存在漏洞的,需要耐心的审计才能突破屏障
  • PHP是宇宙第一编程语言,这些数据到底准不准确?
  • 腾云网络教你如何处理 PHP 代码中的枚举类型 Enum 的
  • YiiPHP开源框架是一套基于组件用于大规模web应用开发
  • 网站后台管理系统php如何从零开始下手做网站,购买一个好域名网站的实施步骤网站后台模板 php
  • php b2b网站系统一下网站建设的目的是什么?科技为您解答b2b网站系统哪个好
  • 要学习以下方面必备知识电工原理和电机原理一定要懂
  • php中7个常用框架

相关

php版本PHP语言基于.x+Vue+等框架精心打造的前后端

站群系统开源 php腾讯云开源业界首个云原生标准的一站式微服

站群系统开源 php腾讯云开源业界首个云原生标准的一站式微服

php 开源轻博客系统学习的原因百度百科优缺点介绍下载5.4

php 开源轻博客系统学习的原因百度百科优缺点介绍下载5.4

php 开源轻博客系统腾讯云轻量服务器应用镜像,一键部署所需

php 开源轻博客系统腾讯云轻量服务器应用镜像,一键部署所需

免费php开源企业网站PHP开发技术具备成熟开源代码及模板W

php web和android开发入门与实践谷歌产品经理发布

如何用php开发网站推荐PHP初学者选择第一个框架,学习资料

免费php开源企业网站2.参考教程:宝塔面板安装和搭建个人网

免费php开源企业网站通常一个建站公司帮助客户建站的这些公司

免费php开源企业网站通常一个建站公司帮助客户建站的这些公司

简单php论坛开发免费采集插件怎么安装?站长必备采集工具(组

标签

seo(600) 市场营销(349) 网站(260) 搜索引擎(251) 网站建设(231) 编程语言(206) 网站制作(201) PHP(183) 建站(125) 关键词排名优化(120) 优化(104) 网站建设公司(96) seo排名(86) 软件(81) 科技(80) 外链(76) 域名(65) 网站关键词(58) 搜索引擎优化(54) 电子商务(53) 网站排名优化(51) 网站排名(49) 域名服务器(47) 网站优化(43) 开发(39) seo培训(39) 时政(39) 引擎(39) 关键(38) 搜索引擎收录(38) 网站设计(38) 移动互联网(37) 百度(37) 框架(36) 排名优化(35) 开发框架(35) 网站建设方案(34) 网站分析(32) 源码(31) 开放源代码(30) 前端开发(27) 应用(26) 政府(25) 百度优化(25) 流量(24) 网站服务器(24) 网站权重(24) 联网(23) 域名结构(23) 网站建设知识(23)
宿迁腾云网络网站建设公司
网站建设
  • 私人定制
  • 标准模板建站
  • 经济模板建站
精品模板

宿迁腾云网络网站建设公司

联系电话:13160355545

公司地址:江苏省宿迁市丽景湾华庭北门都市花园公寓9楼907

联系邮箱:admin@tyweb.net

全国分站
  • 北京
  • 广东
  • 东莞 广州 中山 深圳 惠州 江门 珠海 汕头 佛山 湛江 河源 肇庆 潮州 清远 韶关 揭阳 阳江 云浮 茂名 梅州 汕尾
  • 山东
  • 济南 青岛 临沂 济宁 菏泽 烟台 泰安 淄博 潍坊 日照 威海 滨州 东营 聊城 德州 莱芜 枣庄
  • 江苏
  • 苏州 徐州 盐城 无锡 南京 南通 连云港 常州 扬州 镇江 淮安 泰州 宿迁
  • 河南
  • 郑州 南阳 新乡 安阳 洛阳 信阳 平顶山 周口 商丘 开封 焦作 驻马店 濮阳 三门峡 漯河 许昌 鹤壁 济源
  • 上海
  • 河北
  • 石家庄 唐山 保定 邯郸 邢台 沧州 秦皇岛 张家口 衡水 廊坊 承德
  • 浙江
  • 温州 宁波 杭州 台州 嘉兴 金华 湖州 绍兴 舟山 丽水 衢州
  • 陕西
  • 西安 咸阳 宝鸡 汉中 渭南 安康 榆林 商洛 延安 铜川
  • 湖南
  • 长沙 邵阳 常德 衡阳 株洲 湘潭 永州 岳阳 怀化 郴州 娄底 益阳 张家界 湘西
  • 重庆
  • 福建
  • 漳州 泉州 厦门 福州 莆田 宁德 三明 南平 龙岩
  • 天津
  • 云南
  • 昆明 红河 大理 文山 德宏 曲靖 昭通 楚雄 保山 玉溪 丽江 临沧 思茅 西双版纳 怒江 迪庆
  • 四川
  • 成都 绵阳 广元 达州 南充 德阳 广安 阿坝 巴中 遂宁 内江 凉山 攀枝花 乐山 自贡 泸州 雅安 宜宾 资阳 眉山 甘孜
  • 广西
  • 贵港 玉林 北海 南宁 柳州 桂林 梧州 钦州 来宾 河池 百色 贺州 崇左 防城港
  • 安徽
  • 芜湖 合肥 六安 宿州 阜阳 安庆 马鞍山 蚌埠 淮北 淮南 宣城 黄山 铜陵 亳州 池州 巢湖 滁州
  • 海南
  • 三亚 海口 琼海 文昌 东方
  • 江西
  • 南昌 赣州 上饶 吉安 九江 新余 抚州 宜春 景德镇 萍乡 鹰潭
  • 湖北
  • 武汉 宜昌 襄樊 荆州 恩施 孝感 黄冈 十堰 咸宁 黄石 仙桃 随州 天门 荆门 潜江 鄂州 神农架
  • 山西
  • 太原 大同 运城 长治 晋城 忻州 临汾 吕梁 晋中 阳泉 朔州
  • 辽宁
  • 大连 沈阳 丹东 辽阳 葫芦岛 锦州 朝阳 营口 鞍山 抚顺 阜新 本溪 盘锦 铁岭
  • 黑龙江
  • 齐齐哈尔 哈尔滨 大庆 佳木斯 双鸭山 牡丹江 鸡西 黑河 绥化 鹤岗 伊春 大兴安岭 七台河
  • 内蒙古
  • 赤峰 包头 通辽 呼和浩特 乌海 鄂尔多斯 呼伦贝尔
  • 贵州
  • 贵阳 黔东 黔南 遵义 黔西 毕节 铜仁 安顺 六盘水
  • 甘肃
  • 兰州 天水 庆阳 武威 酒泉 张掖 陇南 白银 定西 平凉 嘉峪关 临夏 金昌 甘南
  • 青海
  • 西宁 海西 海东 海北 果洛 玉树 黄南
  • 新疆
  • 乌鲁木齐 伊犁 昌吉 石河子 哈密
  • 西藏
  • 拉萨 山南 林芝 日喀则
  • 吉林
  • 长春 白山 白城 延边 松原 辽源 通化 四平
  • 宁夏
  • 银川 吴忠 中卫 石嘴山 固原
SiteMap
网站地图
TAG标签
Copyright © 2017-2022 TYWEB.NET 宿迁腾云网络科技有限公司 ALL RIGHTS RESERVED.   苏ICP备17033535号-1
  • 客服

    在线客服

  • 电话

    13160355545

  • 微信

精品模板
建站费用
成功案例
联系我们