来源:自学PHP网 时间:2015-04-17 13:03 作者: 阅读:次
[导读] 文:西毒研究一套cms 3天了,自己没挖到什么可以直接利用的漏洞,都是一些比较鸡肋的,可能是自己的水平太菜了。不过我把整个挖洞过程中记录下来,供大家参考。如果有什么不对的...
研究一套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 默认包含的是include\controller 下的 这里的一些文件是实例化一些类 然后,妈妈的,大家看 这里的一个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鸡鸡啊.............................. 哈哈.。。。。各位尽量还是给出点意见吧,大家一起学习 文 :西毒 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com