加入收藏 | 设为首页 | 会员中心 | 我要投稿 鹰潭站长网 (https://www.0701zz.cn/)- 图像处理、低代码、云通信、数据工具、物联设备!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php反序列化实例详解之字符串逃逸

发布时间:2022-08-10 11:31:43 所属栏目:PHP教程 来源:互联网
导读:php反序列化字符串逃逸 PHP反序列化的字符串逃逸,一共分有两种情况,情况一:过滤后字符串变多,情况二:过滤后字符变少(本篇文章默认已有反序列化相关知识基础) 过滤后字符串变多 以ctfshow-web262为例讲解: error_reporting(0);class message{ public $f
  php反序列化–字符串逃逸
  PHP反序列化的字符串逃逸,一共分有两种情况,情况一:过滤后字符串变多,情况二:过滤后字符变少(本篇文章默认已有反序列化相关知识基础)
 
  过滤后字符串变多
  以ctfshow-web262为例讲解:
 
 
 
  error_reporting(0);class message{
 
      public $from;
 
      public $msg;
 
      public $to;
 
      public $token='user';
 
      public function __construct($f,$m,$t){
 
          $this->from = $f;
 
          $this->msg = $m;
 
          $this->to = $t;
 
      }}$f = $_GET['f'];$m = $_GET['m'];$t = $_GET['t'];if(isset($f) && isset($m) && isset($t)){
 
      $msg = new message($f,$m,$t);
 
      $umsg = str_replace('fuck', 'loveU', serialize($msg));
 
      setcookie('msg',base64_encode($umsg));
 
      echo 'Your message has been sent';}highlight_file(__FILE__);
 
  这段代码,首先要get传入3个参数,然后序列化传入的包含有这三个参数的msg函数,之后将里面包含的fuck字符串替换成为loveU,重新赋值给umsg变量,并将该变量base64编码,设置为cookie
 
  根据题中注释提示,得到message.php内容,为
 
 
 
 
  highlight_file(__FILE__);include('flag.php');class message{
 
      public $from;
 
      public $msg;
 
      public $to;
 
      public $token='user';
 
      public function __construct($f,$m,$t){
 
          $this->from = $f;
 
          $this->msg = $m;
 
          $this->to = $t;
 
      }}if(isset($_COOKIE['msg'])){
 
      $msg = unserialize(base64_decode($_COOKIE['msg']));
 
      if($msg->token=='admin'){
 
          echo $flag;
 
      }}
 
  如果设置了cookie且msg中的token为admin,即可输出flag
 
  由index.php内容可知,进行了一步replace,导致每输入一个fuck,就会多生成一位,故我们可以利用这个特点进行字符串逃逸,首先本地尝试一下
 
  由题可知,我们需要修改原class类中的token值为admin,然后一起传入三个参数,f,m,t,我们可以利用其中一个参数,这里利用的参数是m,为了避免需要逃逸的字符串太多,我们可以先写f t参数,本地随便传入值,输出序列化结果
 
  下图中";s:2:"to";s:1:"1";s:5:"token";s:5:"admin";}即为我们要逃逸的部分,一共44个字符,故我们需要m输入44个fuck来逃逸
  在这里插入图片描述
 
  在这里插入图片描述
 
  逃逸成功,上下两个字符串均为正常的序列化字符串,复制payload前往执行
  在这里插入图片描述
 
  字符串变多原理详解
  这道题就用到了php反序列化中字符串逃逸的知识
 
  首先看本地实验的正常返回结果
 
  在这里插入图片描述
 
  当传入x时,定义的替换函数,将一个x替换为两个x后得到的 o l d 的 值 为 ‘ a : 2 : i : 0 ; s : 4 : " h a n x x " ; i : 1 ; s : 7 : " I a m 11 " ; ‘ , 长 度 不 匹 配 , 会 出 现 报 错 , 进 而 导 致 old的值为`a:2:{i:0;s:4:"hanxx";i:1;s:7:"I am 11";}`,长度不匹配,会出现报错,进而导致 old的值为‘a:2:i:0;s:4:"hanxx";i:1;s:7:"Iam11";‘,长度不匹配,会出现报错,进而导致old的进一步反序列化失败

(编辑:鹰潭站长网)

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

    热点阅读