html标识符转化成安全漏洞Perl中的魔力表达式反格式化安全漏洞基本原理(2)_html转化成标识符
php标识符转化成安全漏洞PHP中的魔力表达式反格式化安全漏洞基本原理(2)_php转化成标识符
2022-04-2664
格式化和反格式化概要
() 将第一类切换为数组, () 将数组恢复正常为第一类。在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 类来处理相关操作
;
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标识符转化成安全漏洞网站开发,我们修改了零钱业务的密码