php序列化后换服务器不能解析,利用php序列化和反序列化的语法差异绕过防护_网站服务器运行维护...
win10电脑桌面没有我的电脑图标_网站服务器运行维护
win10电脑桌面没有我的电脑图标的解决方法是:1、首先右键点击桌面,选择【个性化】选项;2、然后选择【主题】选项,接着选择【桌面图标设置】选项;3、最后勾选【计算机】图标即可。
介绍
官方文档中介绍PHP序列化和反序列化如下:
所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示。unserialize()函数能够重新把字符串变回php原来的值。 序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。 为了能够unserialize()一个对象,这个对象的类必须已经定义过。如果序列化类A的一个对象,将会返回一个跟类A相关,而且包含了对象所有变量值的字符串。
简单说序列化是对象转化字符串的过程,反序列化是字符串还原对象的过程。
环境
文章中所述内容使用环境如下:
PHP7.3.1、SDKVSCodeC++和C
在网上公开参数反序列化执行流程已经非常详细,但是对于一些细节地方有一些不足,其中就包括序列化和反序列化之间的语法差异问题。
差异问题
1、序列化
我们通过编译PHP内核源码分析,发现PHP序列化在默认情况下在对象转换中加入:{和}用来拼接成字符串。win10如何更改管理员账户名_网站服务器运行维护
win10更改管理员账户名的方法是:1、首先打开运行窗口,输入【gpedit.msc】,打开组策略;2、然后依次打开【计算机配置】、【windows设置】、【安全设置】、【本地策略】、【安全选项】;3、最后双击【重命名系统管理员账户】即可。
[var.c]
Line:882
static void php_var_serialize_intern()
Line:896
if (ce->serialize(struc, &serialized_data, &serialized_length, (zend_serialize_data *)var_hash) == SUCCESS) {
smart_str_appendl(buf, "C:", 2);
smart_str_append_unsigned(buf, ZSTR_LEN(Z_OBJCE_P(struc)->name));
smart_str_appendl(buf, ":\"", 2);
smart_str_append(buf, Z_OBJCE_P(struc)->name);
smart_str_appendl(buf, "\":", 2);
smart_str_append_unsigned(buf, serialized_length);
smart_str_appendl(buf, ":{", 2);
smart_str_appendl(buf, (char *) serialized_data, serialized_length);
smart_str_appendc(buf, '}');
}
Line:952
smart_str_appendl(buf, ":{", 2);
Line:995
smart_str_appendc(buf, '}');
咱们来看上面这段代码,PHP会使用smart_str_appendl为序列化字符串前后拼接:{和},从var.c的第882行开始进入序列化逻辑。在第896行进行序列化字符串拼接,第952行和第995行,对于内嵌方法进行拼接。
2、反序列化
反序列化是将序列化的字符串,按照一定语法规则进行转化还原。
[var_unserialize.c]
Line:655
static int php_var_unserialize_internal()
Line:674{
YYCTYPE yych;
static const unsigned char yybm[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
};
if ((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
yych = *YYCURSOR;
switch (yych) {
case 'C':
case 'O': goto yy4;
case 'N': goto yy5;
case 'R': goto yy6;
case 'S': goto yy7;
case 'a': goto yy8;
case 'b': goto yy9;
case 'd': goto yy10;
case 'i': goto yy11;
case 'o': goto yy12;
case 'r': goto yy13;
case 's': goto yy14;
case '}': goto yy15;
default: goto yy2;
}
Line:776
yy15:
++YYCURSOR;
{ /* this is the case where we have less data than planned */
php_error_docref(NULL, E_NOTICE, "Unexpected end of serialized data");
return 0; /* not sure if it should be 0 or 1 here? */
}
通过内核代码能够看到第655行进入反序列化,反序列化是利用词法扫描,判断各项符号转换对应对象。能够看到反序列化中对于}进行了处理,处理中只是对计数器加一并没有其他操作。
实际作用
反序列化语法的差异,对于安全防护设备判断反序列化产生很大的影响。在Snort中,有段规则如下:
alert tcp any any -> any [80,8080,443] (uricontent:".php"; pcre:"/\{\w:.+?\}/"; sid:1;
msg:php_serialize;)
在攻击载荷中可以使用大多数字符代替{},从而导致规则失效。
总结
在红队攻击中可以利用PHP序列化和反序列化语法差异,从而达到绕过防护的目的。
在蓝队防御中建议考虑定义中所述不会保存对象的方法,只会保存类的名字。,拦截保存类的名字,以及语法中相同的字符比如冒号进行防御。
相关文章教程分享:网站安全教程
php序列化后换服务器不能解析,利用php序列化和反序列化的语法差异绕过防护_网站服务器运行维护...相关推荐
- 服务器运维浏览器,本机浏览器如何访问docker容器的内容_网站服务器运行维护,浏览器,docker...
docker无法下载镜像怎么办_网站服务器运行维护 docker无法下载镜像的解决方法是:1.运行命令[systemctl stop firewalld]关闭防火墙:2.运行命令[date -s xx ...
- 服务器开机显示 efi,win10误删efi启动项无法开机怎么办?_网站服务器运行维护,windows,efi...
win10虚拟网卡安装失败怎么办?_网站服务器运行维护 win10虚拟网卡安装失败的解决办法:首先依次点击[计算机的属性-设备管理器-网络适配器],查看是否有[虚拟网卡]:然后依次点击[操作-添加过时 ...
- 服务器桌面图标显示在哪里打开,电脑桌面图标消失了怎么解决_网站服务器运行维护,电脑,图标...
电脑繁体字怎么转换成简体字_网站服务器运行维护 电脑繁体字转换成简体字的方法是:1.点击开始按钮,打开控制面板:2.进入个性化选项,点击[窗口颜色],将字体设置为[简体],点击[确定]:3.重启电脑即 ...
- 服务器显示屏出现白屏,win10开机白屏不显示桌面怎么办_网站服务器运行维护,win10,白屏,桌面...
win7如何使用自带录制视频软件?_网站服务器运行维护 win7使用自带录制视频软件的方法:首先打开运行窗口输入cmd:然后管理员界面中输入[psr.exe]或者psr回车确定打开,并在工具上点击开始 ...
- 服务器开机显示其他用户,win10系统开机显示其他用户怎么解决_网站服务器运行维护...
win10如何打开恢复选项_网站服务器运行维护 win10打开恢复选项的方法是:1.首先打开设置界面:2.然后依次打开[更新和安全].[开发者选项]:3.接着勾选[开发人员模式],点击[显示设置],打 ...
- windows10服务器维护,win10自动开机设置方法_网站服务器运行维护,win10
centos系统重启网络失败怎么办_网站服务器运行维护 centos系统重启网络失败的解决方法是:1.首先,执行命令[ip addr]查找HWADDR:2.然后,进入network-scripts目录 ...
- win10关机后cpu风扇还在转_win10电脑关机后cpu风扇还在转动_网站服务器运行维护...
linux之父是谁_网站服务器运行维护 linux之父是"林纳斯·本纳第克特·托瓦兹",1991年正在赫尔辛基大学读书的"Linus Torvalds"也就是 ...
- 服务器里的文件删了在回收站吗,回收站的功能是什么?什么样的文件删除后不能恢复?_网站服务器运行维护,回收站,文件...
两分钟彻底关闭Windows的更新_网站服务器运行维护 小伙伴们一定遇到过这样的情况,打开电脑就会跳出Windows更新,如果不安装,会每次都跳出,如何彻底关闭Windows更新呢?下面就让我们一起看 ...
- 服务器防火墙开启后打不开网站,防火墙开启后windows电脑上不了网怎么办_网站服务器运行维护...
windows xp是什么操作系统_网站服务器运行维护 windows xp是microsoft推出的供个人电脑使用的操作系统,包括商用及家用的台式电脑等.windows xp是微软首个面向消费者且使 ...
- 重启服务器导致网站系统错误,win10怎么总是莫名其妙重启?_网站服务器运行维护...
win10如何恢复输入法语言栏?_网站服务器运行维护 win10恢复输入法语言栏的方法:1.先打开设置,然后进入"时间和语言":2.点击"区域和语言",接着找到 ...
最新文章
- 八皇后时间复杂度_回溯算法 | 追忆那些年曾难倒我们的八皇后问题
- 拓扑排序 - 项目管理
- 关于大数据你应该了解的五件事儿
- Android多线程任务优化1:探讨AsyncTask的缺陷
- Vue实现简单图表~满满的干货
- html风格的滚动条
- SQL Server安装教程
- Setting up a EDK II build environment on Windows and Linux:搭建Windows和Linux开发环境[2.2]
- 19年6月英语六级第二套听力单词
- 七年级上册数学用计算机进行计算,数学北师大版七年级上册用计算器进行运算.doc...
- 【安全知识分享】重磅|消防控制室培训.ppt(附下载)
- 大数据BI工具Tableau学习【第三期】:数据类型,功能区和卡参考,文件类型(连接方式)
- GEE——2018 年南非国家土地覆盖( 20 米分辨率多季节 Sentinel 2 卫星图像生成的)
- 室内定位——如何在微信小程序中获取Beacon的RSSI值
- 【原创】软件测试工程师-面试感悟-面试经验-面试官思维 分享
- 2019年暑期集训总结
- 青海湖鸟岛上神气的蛋
- 什么是Moodle?
- 【机器学习】Scikit-Learn数据预处理文档翻译+笔记记录 - 1
- 故障分析 | Greenplum Segment 故障处理