PHP序列化漏洞

PHP序列化漏洞

这个东西废了我三天时间我去
我们在了解这哥漏洞前要先明白什么是反序列化漏洞:
1.
PHP反序列化漏洞也叫PHP对象注入,是一个非常常见的漏洞,这种类型的漏洞虽然有些难以利用,但一旦利用成功就会造成非常危险的后果。漏洞的形成的根本原因是程序没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被恶意控制,进而造成代码执行、getshell等一系列不可控的后果。
2.
实现这个漏洞需要一种魔法方法
例如:

_construct
_destruct
_sleep
_wakeup
_toString

_construct和__destruct会在对象创建或者销毁时自动调用,__sleep方法在一个对象被序列化的时候调用,__wakeup方法在一个对象被反序列化的时候调用。
_toString当一个对象被当作一个字符串被调用。
我们来看一个例子(借用大佬图片)
在这里插入图片描述这里的最终结果为:
在这里插入图片描述
使用此漏洞:
其核心思想是在整个进程空间内现存的函数中寻找适合代码片断(gadget),并通过精心设计返回代码把各个gadget拼接起来,从而达到恶意攻击的目的。构造ROP攻击的难点在于,我们需要在整个进程空间中搜索我们需要的gadgets,这需要花费相当长的时间。但一旦完成了“搜索”和“拼接”,这样的攻击是无法抵挡的,因为它用到的都是程序中合法的的代码,普通的防护手段难以检测。
反序列化漏洞需要满足两个条件:

1、程序中存在序列化字符串的输入点
2、程序中存在可以利用的magic函数

我们通过一道我不会的ctf题解释一下
在这里插入图片描述解释一下:
我们是通过构造payload将我们想让脚本执行的代码输入进去让脚本执行
我们构造:
O:6:”Shield”:1:{s:4:”file”;s:8:”pctf.php”;}
就可一回显出我们想要的pctf.php中的内容了
2.
其实我们可以通过题目给出的代码来自己写一下脚本自动生成序列化的代码:

<?php
	//flag is in pctf.php
	class Shield {
		public $file;
		function __construct($filename = '') {
			$this -> file = $filename;
		}
	}
	$x = new Shield('pctf.php');
	echo serialize($x);
?>


在网页上打开后得到
O:6:“Shield”:1:{s:4:“file”;s:8:“pctf.php”;}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值