- A+
显示不全请点击全屏阅读
研究一套cms 3天了,自己没挖到什么可以直接利用的漏洞,都是一些比较鸡肋的,可能是自己的水平太菜了。不过我把整个挖洞过程中记录下来,供大家参考。如果有什么不对的,或者是有什么好的建议的,请加QQ群62512676 一起来讨论学习
0x1
这套cms我是从站长网,随便下的,所以下下来就搭建起来看代码了,
这是最新版本的,我也不知道有没有前辈挖过,所以就开始动工了。
首先开始从首页开始读代码,
将其中的几个包含文件打开,依次打开包含文件里面另外包含的地方
首先他定义的是一些常量,所以这些不用管 ,接下来就是包含了, 第一个包含了 common.inc.php
我们看看common.inc.php吧
其他不重要的代码我就略过了,我就分析一下重点的代码位置
d
看到这里的foreach循环没? 这里就存在一个变量覆盖的问题,变量覆盖的话,如果能利用的话,是很有用的,说不定就直接getshell呢?
所以这里的代码等得仔细研究研究。。。
接下来还是一些文件
/引入配置文件
require_once(WEB_INC.’/config.inc.php’);
//引入数据库类
require_once(WEB_INC.’/db.class.php’);
//常用函数
require_once(WEB_INC.’/function.inc.php’);
//基础model函数
require_once(WEB_INC.’/model.class.php’);
/*Session保存路径
$sessionPath = WEB_ROOT.”/data/session”;
if(is_writeable($sessionPath) && is_readable($sessionPath))
{
session_save_path($sessionPath);
}
*/
//session language
session_start();
header(“Content-type: text/html; charset=utf-8″);
//确认正确安装然后连接数据库
$install_check = ”;
/*
echo $db_type.'<br/>’;
echo $host.'<br/>’;
echo $name.'<br/>’;
echo $pass.'<br/>’;
echo $table.'<br/>’;
echo $ut.'<br/>’;
*/
if(file_exists(WEB_DATA.’install.lock’)) {
$db=new DB($db_type,$host,$name,$pass,$table,$ut);
} else {
$install_check = ‘Not installed’;
if(WEB_APP != ‘install’){
echo $install_check;
exit;
}
包含了一些数据库的配置文件,以及一些类,以及功能函数
所以这里是略过了,没有什么安全隐患
接下来就是第二个主页的包含文件了
Forbiddenip.inc.php了
这里是一个禁止IP的
也没问题
接下来是include(WEB_INC.’close.inc.php’);
这个文件是控制这个网站的开启和关闭的
这里
看到没?这里存在安全隐患,我想大家一定会说,这里哪里有安全隐患呢???
大家请仔细想一想,如果这里的$sys[‘isclose’]=1之后,他是打印出$sys[‘closeinfo’]这个数组变量吧! 如果这里的数组变量可控的话,我们就有机会了
我就举实例吧
这里的$sys再这个文件中下
这里的$sys[‘closeinfo’] 是由后台控制的,如果我们对其修改,然后我就可以拿到webshell了
然后sys.inc.php就变成了
所以大家看到了,这里他是悲剧了,所以只要进后台了。。。这个站就直接取webshell了。这是漏洞一了
0x2
接下来就是最后一个首页包含文件了
include(WEB_INC.’rootstart.inc.php’);
我就详细分析下吧
这里的变量 a 和 c的话,如果不存在就直接用之前定义好的赋值 ,
这里也存在个包含的漏洞的
所以这里的$a 和 $c 都是可控的
接下来是in_array()这个函数了,他是从数组里面对其进行比较
这里的$controllerName 就是$c 了,而 $config[‘modtype’]的是之前被定义好的,所以这里的$c也就被控制死在这个$config[‘modtype’]里面了,
所以$a
如果存在$filepath这个文件,就包含它,这里的$filepath的$action 是可以控制的,可以由用户控制
所以这里我们可以构造成这样子包含
也截断了,这种情况是gpc关的,不过也可以再开的时候才用./来突破来包含,win下256,
*nix下4000多吧,具体我也忘记了。
所以这也算是一个安全隐患吧!
0x3
接下来包含的是
默认包含的是includecontroller 下的
这里的一些文件是实例化一些类
然后,妈妈的,大家看
这里的一个intval函数就把我们堵死了,所以如果想通过这2个参数去注入是不可能了。。。。
接下来的是对$a 进行switch判断
首先默认的是list
这里的进入数据库查询的有
$where
我们跟进一下这个$db-execute()看看先
这个在db.class.php这个数据库类当中
大家看他写的方法
接下来这个safesql就是处理我们sql语句了,妈的,我觉得他这里处理的有点类似于dedecms的
这个功能方法很强大,可以对付很多黑客的…. (嘿嘿)
大家可以仔细研究研究,我刚刚也试了试,还是可以的….如果以后大家的站,也可以加上以上的一些方法来搞了
不过他这里还是有一定的问题的,例如末尾
他将一些错误信息写进去,由于这里是不能进行报错处理(哎,我也说不清了,自己看看代码这里你就清楚了),
所以我们可以直接构造一个$log_file的变量为php,然后将一些错误信息进行触发该漏洞,将我们的恶意代码写进去
这就是触发之后的文件….所以同样可以。。。。
但是前提是能进行变量覆盖。。。。。
接下来是show 了
这里的关键变量也是做了处理的,所以你想注入的话,哥,不太现实了。。。。
中间我就省略很多过程不去分析了,所以前台我就分析道这了
接下来就是后台分析了
0x4
后台差不多。。。
我就讲一下变量覆盖吧
这是后台的
这里我想了想,这里的变量如果代码只要稍微改改,我们就可以绕过网站数据库登陆后台的,
其实说的也就是变量覆盖了,这里只要这里将common.inc.php中的一个
提到最顶上,我们就可以进行变量覆盖了
这个漏洞呢,大家百度吧,我只演示过程
将这里的变量覆盖就ok了
这里需要的是我们重新搭建个数据库。。。然后我们就可以利用了
现在直接登录后台
这样子就完了,所以。。。。。
整体而已,我研究这套cms3天了,自己技术很菜….发现不了什么比较大的0day,但是也发现一些小问题,从该套cms看的出来,他们程序员对注入这块还是下了功夫的,呵呵
我发出来只是一个学习的过程,文中难免有一些不足的地方,希望大牛能指点,让我们小菜更加努力学习。。。。
如果有兴趣研究0day的,可以加我们的群 62512676 一起发现0day,一起公布0day,要学习的一起来
现在是凌晨3点多了,各位,如果看了该文,不在论坛回复的,m鸡鸡啊 (嘿嘿)m鸡鸡啊m鸡鸡啊m鸡鸡啊m鸡鸡啊m鸡鸡啊m鸡鸡啊…………………………
哈哈.。。。。各位尽量还是给出点意见吧,大家一起学习
文 :西毒
Tags:
挖洞分析,
如果您喜欢我的博客,欢迎点击图片定订阅到邮箱 也可以点击链接【订阅到鲜果】
如果我的想法或工具帮助到了你,也可微信扫下方二维码打赏本人一杯咖啡