您好,欢迎访问一九零五行业门户网

PHPCMS 2008 最新漏洞demo测试详解_PHP教程

本文章来给大家介绍phpcms 2008 最新漏洞图文测试详解,有需要了解的同学可进入参考参考。
phpcms2008 是一款基于 php+mysql 架构的网站内容管理系统,也是一个开源的 php 开发平台。phpcms 采用模块化方式开发,功能易用便于扩展,可面向大中型站点提供重量级网站建设解决方案。3年来,凭借 phpcms 团队长期积累的丰富的web开发及数据库经验和勇于创新追求完美的设计理念,使得 phpcms 得到了近10万网站的认可,并且越来越多地被应用到大中型商业网站。
0x02 写在前面的话
phpcms 2008 这是我看第二次代码了,之前已经发现了一些问题,只是没放出来,这次稍微仔细看了看,又发现了一些问题
这次就放2个吧,其中啥啥的getshell暂时就不会放了,比起v9来说,2008的安全性能确实差很多,模块化以及代码严谨程度也没有v9强
这次还没把代码看完,只看完几个页面,就先放2个有问题的地方,如果有更好的方式,到时候一起讨论0x03 路径? ? ?
在include/common.inc.php中 ,这是phpcms的全局要加载的配置文件 $dbclass = 'db_'.db_database;require $dbclass.'.class.php';           $db = new $dbclass;$db->connect(db_host, db_user, db_pw, db_name, db_pconnect, db_charset);           require 'session_'.session_storage.'.class.php';$session = new session();session_set_cookie_params(0, cookie_path, cookie_domain);           if($_request){    if(magic_quotes_gpc)    {        $_request = new_stripslashes($_request);        if($_cookie) $_cookie = new_stripslashes($_cookie);        extract($db->escape($_request), extr_skip);    }    else    {        $_post = $db->escape($_post);        $_get = $db->escape($_get);        $_cookie = $db->escape($_cookie);        @extract($_post,extr_skip);        @extract($_get,extr_skip);        @extract($_cookie,extr_skip);    }    if(!defined('in_admin')) $_request = filter_xss($_request, allowed_htmltags);    if($_cookie) $db->escape($_cookie);}//echo query_string;if(query_string && strpos(query_string, '=') === false && preg_match(/^(.*).(htm|html|shtm|shtml)$/, query_string, $urlvar)){    //var_dump($urlvar[1]);    //echo 'test';    parse_str(str_replace(array('/', '-', ' '), array('&', '=', ''), $urlvar[1]));               }
这里的话首先实例化了这个数据库,产生了一个$db资源句柄,他是用来操作数据库的
然后就是将我们传进来的参数进行变量化
这里有一些小过滤,自己可以看,所以这里传进来的参数就作为了变量
但是接下来这行呢? if(query_string && strpos(query_string, '=') === false && preg_match(/^(.*).(htm|html|shtm|shtml)$/, query_string, $urlvar)){ //var_dump($urlvar[1]); //echo 'test'; parse_str(str_replace(array('/', '-', ' '), array('&', '=', ''), $urlvar[1])); }
看看这里?
这里的query_string来自前面 define('http_referer', isset($_server['http_referer']) ? $_server['http_referer'] : '');define('script_name', isset($_server['script_name']) ? $_server['script_name'] : preg_replace(/(.*).php(.*)/i, \1.php, $_server['php_self']));define('query_string', safe_replace($_server['query_string']));
这里有个过滤,但是不影响
如果我们在这里进行覆盖这个db变量呢
因为这里 parse_str(str_replace(array('/', '-', ' '), array('&', '=', ''), $urlvar[1]));
可以将我们传进去的/ - 进行替换
所以我们如果提交如下字符http://localhost/phpcms/index.php?db-5/gid-xd.html他由于这个db被覆盖就会出错,所以物理路径就爆出来了0x04 sql注入!!!
在c.php中 $db->query(update .db_pre.ads set `clicks`=clicks+1 where adsid=.$ads['adsid']);$info['username'] = $_username;$info['clicktime'] = time();$info['ip'] = ip;$info['adsid'] = $id;$info['referer'] = http_referer;$year = date('ym',time);$table = db_pre.'ads_'.$year;$table_status = $db->table_status($table);//echo 'test';if(!$table_status) { include mod_root.'include/create.table.php';}$db->insert($table, $info);
注意这里的http_referer这个常量
这里的常量是通过前面的common.inc.php定义好的
define('http_referer', isset($_server['http_referer']) ? $_server['http_referer'] : '');
没有经过任何过滤操作,所以你懂的,我估计很多同学已经发现了,只是没去公布了,所以俺就替你们xxoo了,哈哈...别骂我
然后
$db->insert($table, $info);
我们来看一下它这里的操作 function insert($tablename, $array){ $this->check_fields($tablename, $array); return $this->query(insert into `$tablename`(`.implode('`,`', array_keys($array)).`) values('.implode(',', $array).')); //echo insert into `$tablename`(`.implode('`,`', array_keys($array)).`) values('.implode(',', $array).');}
所以你懂的
http://www.bkjia.com/phpjc/629621.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/629621.htmltecharticle本文章来给大家介绍phpcms 2008 最新漏洞图文测试详解,有需要了解的同学可进入参考参考。 phpcms2008 是一款基于 php+mysql 架构的网站内容管理...
其它类似信息

推荐信息