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

腾云网络 八年经验专注网站建设
  • 首页
  • 服务项目
    • 网站建设
    • 微信小程序
    • APP开发
    • SEO优化
  • 建站费用
  • 成功案例
    • 网站建设案例
    • 小程序案例
    • 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代码注入漏洞PHP中的魔法函数反序列化漏洞原理(2)_php注入代码(图1)

如果我们现在通过 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 网站 9万个主题中发现一个重要权限升级漏洞(图)php网站源码带后台
  • php高级程序设计 模式 框架与测试 英特尔开源工具加速面向异构架构的跨架构编程(图)php高级程序设计模式,框架与测试
  • php代码翻译成中文微软宣布升级其神经网络,为其再添加10种语言 php代码翻译成中文
  • php开发实战与别的培训不同,慕课网更在意你的学习php mysql开发实战
  • 后盾php视频教程第一部之php博客项目实战开发陈金凌:关于,,自建独立站项目!(组图)lamp兄弟连高洛峰php项目实战视频教程
  • php代码执行漏洞PHP7出现三个高危0-day漏洞可允许攻击者完全控制struts2 远程代码执行漏洞
  • php采集代码前几天做了个小说连载的程序,抓取别人网页内容php采集百度新闻标题
  • PHP跨域方法用Nginx 反向代理
  • 2020年第一季度编程语言排行榜排序算法基本思路
  • SCL语言鄙视链,怎么学习语言?|高级编程

相关

了解常见PHP应用程序安全威胁,掌握6个常见安全性攻击

了解常见PHP应用程序安全威胁,掌握6个常见安全性攻击

如何查看php版本?多种方法助你快速知晓

如何查看php版本?多种方法助你快速知晓

PHP格式化:提升代码质量与协作效率的关键规则

如何查看虚拟主机上的 PHP 版本?这篇文章告诉你

Linux 系统管理员和 web 开发者必知:如何查看 PH

Linux 系统管理员和 web 开发者必知:如何查看 PH

免费开源的轻量级 PHP 开发框架 ThinkPHP,遵循

从零开始开发完整网站:前端、后端与 Web 服务器的关键技术

php框架 Java 与 PHP 之争:为何懂技术的大佬选

BitDefender 发布超级工厂病毒专杀工具,可清除所有

asp语言与php语言的区别 前端和后端的区别,你真的了解吗

标签

seo(1182) 市场营销(661) 网站制作(573) 网站建设(564) 搜索引擎(553) 网站(482) PHP(361) 编程语言(345) 建站(294) 关键词排名优化(267) 网站建设公司(245) 优化(216) seo排名(207) 域名(190) 软件(171) 网站优化(148) 搜索引擎优化(146) 外链(141) 科技(136) 网站关键词(124) 网站排名优化(123) 域名服务器(120) 网站排名(107) 时政(103) 排名优化(95) 搜索引擎收录(93) 网站设计(92) 电子商务(88) 引擎(86) 移动互联网(85) 开发框架(79) 开发(75) 网站服务器(74) 框架(68) 前端开发(68) 网站分析(66) 网站建设方案(65) 关键(64) 流量(63) 源码(62) 百度优化(62) 网站权重(61) 开放源代码(59) seo培训(53) 网页设计(51) 百度(51) php框架(50) 网站建设知识(50) 大数据(50) 谷歌(49)
宿迁腾云网络网站建设公司
网站建设
  • 私人定制
  • 标准模板建站
  • 经济模板建站
精品模板

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

联系电话:13160355545

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

联系邮箱:admin@tyweb.net

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

热门搜索

百度 下载 2025 2024 2026 货源 货货源 虚拟 禅道 报名 金蝶KIS旗舰版
  • 客服

    在线客服

  • 电话

    13160355545

  • 微信

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