typecho截图没显示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了typecho截图没显示相关的知识,希望对你有一定的参考价值。
参考技术A 可以换其它截屏系统试试。操作如下:
1、进入系统,点击右下角通知图标,打开侧边栏,点击“屏幕截图”。
2、打开屏幕截图工具,点击上方第三个图标(全屏剪辑),进行全屏截图。
3、电脑桌面出现粗线边框一闪而过现象就会恢复正常,这就是电脑截图没反应。
4、其实电脑截图已经完成,点击打开“此电脑”-“图片”-“屏幕截图”截屏文件就被存放在该目录中。
5、按Win+PrtScr截屏后没有反应,截屏文件自动保存在“此电脑”-“图片”-“屏幕截图”目录中。
Typecho反序列化漏洞导致前台getshell
最早知道这个漏洞是在一个微信群里,说是install.php
文件里面有个后门,看到别人给的截图一看就知道是个PHP反序列化漏洞,赶紧上服务器看了看自己的博客,发现自己也中招了,相关代码如下:
然后果断在文件第一行加上了die:
<?php die('404 Not Found!'); ?>
今天下午刚好空闲下来,就赶紧拿出来代码看看。
漏洞分析
先从install.php
开始跟,229~235行:
要让代码执行到这里需要满足一些条件:
首先是$_GET['finish']
不为空,其次是referer
需要是本站,比较容易实现。
继续跟反序列化的地方:
$config = unserialize(base64_decode(Typecho_Cookie::get('__typecho_config')));
首先使用Typecho_Cookie
的get
方法获取__typecho_config
,get
方法如下:
可以看到给$value
赋值这一行,如果$_COOKIE
里面没有就从$_POST
里面获取,所以我们测试漏洞的时候直接POST也是可以的,不用每次设置Cookie了。
反序列化漏洞要利用势必离不开魔术方法,我之前收集了一些和PHP反序列化有关的PHP函数:
下面这一行中,如果我们反序列化构造一个数组,其中adapter
设置为一个类,那么就可以触发这个类的__toString()
方法。
然后我们全局搜索__toString()
方法,发现两个有搞头的文件:
/var/Typecho/Feed.php
/var/Typecho/Db/Query.php
我这里跟一下Feed.php
,查看Feed.php
的__toString()
方法,其中第290行:
其中调用了$item['author']->screenName
,$item
是$this->_items
的foreach循环出来的,并且$this->_items
是Typecho_Feed
类的一个private
属性。
我们可以利用这个$item
来调用某个类的__get()
方法,上面说过__get()
方法是用于从不可访问的属性读取数据,实际执行中这里会获取该类的screenName
属性,如果我们给$item['author']
设置的类中没有screenName
就会执行该类的__get()
方法,我们继续来全局搜索一下__get()
方法。
发现/var/Typecho/Request.php
中的__get()
方法如下:
public function __get($key)
{
return $this->get($key);
}
跟进$this->get()
方法如下:
这里没什么问题,但最后一行:
return $this->_applyFilter($value);
跟进一下发现:
这个foreach
里面判断如果$value
是数组就执行array_map
否则调用call_user_func
,这俩函数都是执行代码的关键方法。而这里$filter
和$value
我们几乎都是可以间接控制的,所以就可以利用call_user_func
或者array_map
来执行代码,比如我们设置$filter
为数组,第一个数组键值是assert
,$value
设置php代码,即可执行。
然后我们来完成Exploit如下:
然后运行该php,使用输出的payload访问:
至此该漏洞复现成功。
修复方法
官方今天发布了1.1Beta版本修复了该漏洞,升级该版本,链接:http://typecho.org/archives/133/
也可以删除掉install.php和install目录。
以上是关于typecho截图没显示的主要内容,如果未能解决你的问题,请参考以下文章