C4r1st 发表于 2014-5-17 12:39:10

phpcms最新版本sql注射一枚

注:经测试需register_globals=on

首先我是官网选择的utf-8版本的然后下载的,(ps:应该是最新的吧...)下载之后搭建好之后要进

我下载的是官网的utf-8版本(ps:应该是最新了吧...)

本地搭建好之后要去后台点击生成首页测试...废话不多说了

bug存在文件/phpcms/modules/content/classes/content_tag.class.php 232行
$siteid = $GLOBALS['siteid'] ? $GLOBALS['siteid'] : 1;

      $catid = (empty($data['catid']) || $data['catid'] == 0) ? '' : intval($data['catid']);

      if($catid) {

            $siteids = getcache('category_content','commons');

            if(!$siteids[$catid]) return false;

            $siteid = $siteids[$catid];

            $this->category = getcache('category_content_'.$siteid,'commons');

      }

      if($catid && $this->category[$catid]['child']) {

            $catids_str = $this->category[$catid]['arrchildid'];

            $pos = strpos($catids_str,',')+1;

            $catids_str = substr($catids_str, $pos);

            $sql = "`catid` IN ($catids_str) AND ";

      }elseif($catid && !$this->category[$catid]['child']) {

                $sql = "`catid` = '$catid' AND ";

      }

      if($thumb) $sql .= "`thumb` = '1' AND ";

      if(isset($data['where'])) $sql .= $data['where'].' AND ';

      if(isset($data['expiration']) && $data['expiration']==1) $sql .= '(`expiration` >= \''.SYS_TIME.'\' OR `expiration` = \'0\' ) AND ';

      $sql .= "`posid` = '$posid' AND `siteid` = '".$siteid."'";
通过全局接受了siteid变量

所以才要开启全局变量才能注射

本地测试

开启mysql监控,然后burp抓包加入'可以看到'被带入查询了。

然后附上本地证明一张,利用显错读取信息。

nextdoor 发表于 2014-5-17 12:53:26

顶一个,难道乌云的那个是你

C4r1st 发表于 2014-5-17 12:55:25

nextdoor 发表于 2014-5-17 12:53
顶一个,难道乌云的那个是你

我不是瘦子。只是看到分享一下、

esaaset 发表于 2014-5-17 13:06:26

默默的顶一个,谢谢分享

王珂 发表于 2014-5-17 16:08:12

我擦,又见神牛

C4r1st 发表于 2014-5-17 17:13:20

王珂 发表于 2014-5-17 16:08
我擦,又见神牛

我擦,神牛~~~

蓝色_ 发表于 2014-5-18 21:11:52

同看妹子

54pany 发表于 2014-5-19 12:05:45

感谢分享~

csadsl 发表于 2014-5-19 15:27:18

楼主你好

石头 发表于 2014-5-21 11:48:27

:lol   我以为是dedecms 刚好今天试了一个
页: [1] 2
查看完整版本: phpcms最新版本sql注射一枚