[代码审计]某cms前台Referer-sql注入

admin 2023年10月16日19:19:50评论9 views字数 3398阅读11分19秒阅读模式
前言

代码审计---证书申请系类


前言


mvc框架的,白盒和黑盒测试。




构成分析


存在index.php文件中,
前面包含了3个php文件,并且定义了四个常量。我们重点关注 ./skymvc/skymvc.php 这个MVC的php文件。



[代码审计]某cms前台Referer-sql注入


由于代码过长我只截取关键部分。



$_GET['m']=$m=isset($_GET['m'])?htmlspecialchars($_GET['m']):"index";$m=str_replace(array("/","\",".."),"",$m);$mfile= CONTROL_DIR."/$m.ctrl.php";$mafile="";$apiVersion=get("apiVersion","h");if($apiVersion){if(!preg_match("/W/",$apiVersion)){    $mafile= CONTROL_DIR."/$m.ctrl.".$apiVersion.".php";  }}if($mafile!="" && file_exists($mafile) ){include($mafile);}elseif(!file_exists($mfile)){  error404();
}else{include($mfile);}


$classname = $m.'Control';
$control = new $classname();$a=get_post('a',"h");if(empty($a)){ $_GET['a']='default';}
$method=method_exists($control,'on'.$_GET['a'])? 'on'.$_GET['a']:"onDefault";if(function_exists("userinit")){if(!defined("SKYINIT")){ userinit(); }}if(method_exists($control,'onInit')){ $control->onInit();}if(!defined("AUTO_CHECK_BAD_WORD")){ define("AUTO_CHECK_BAD_WORD",0);}if(AUTO_CHECK_BAD_WORD==1){ $control->checkBadWord();}$control->$method();

[代码审计]某cms前台Referer-sql注入


这里通过 $_GET['m']。获取了get提交的m的值是多少,在payload中 m=pv 所以这里$m=pv

$mfile= CONTROL_DIR."/$m.ctrl.php";

CONTROL_DIR 是一个常量值为 source/index

$m 为 pv

拼接完成就为 $mfile = source/index/pv.ctrl.php 。下面就是简单的include进行包含 。

然后看 

$classname = $m.'Control'; //classname = pvControl

$control = new $classname(); // $control = new pvControl();

pv.ctrl.php 文件的类就是pvControl,这里对 pv.ctrl.php 文件进行一个实例化的作用。

看这一行代码。

$method=method_exists($control,'on'.$_GET['a'])?'on'.$_GET['a']:"onDefault";

在 a参数前拼接on ,根据数据包来看 a= stat 最后结果就是 onstat。

看最后一行

$control->$method(); // $control ->onstat(); 

跟进pv.ctrl.php(截取部分片段)文件。(因为刚才调用了 onStat函数,所以直接看onStat函数 )



    <?php    class pvControl extends skymvc{            public function __construct(){        parent::__construct();      }            public function onDefault(){              }            public function onStat(){        M("pv")->stat();        echo "success";      }    ?>

[代码审计]某cms前台Referer-sql注入

看到 M("pv") -> stat(); 这是一个类的函数调用的格式我们去分析 M("pv")是调用了哪个文件的类。直接跟进函数内。


[代码审计]某cms前台Referer-sql注入


if(file_exists( MODEL_DIR."/$model.model.php")){          require_once   MODEL_DIR."/$model.model.php";


MODEL_DIR 常量在 index.php文件内被定义 是 source/model

$model 是我们传入的值 pv

最后拼接 source/model/pv.model.php。跟进这个文件的stat函数

截取部分片段



  public function Stat($url=""){    $ssid=session_id();         $m=get("m","h");    $a=get("a","h");     $createtime=date("Y-m-d H:i:s");    $day=date("Y-m-d");    $createhour=date("H");    $createweek=date("w");        if(empty($url) && !$url=get('url','h')){      $url=$_SERVER['HTTP_REFERER'];      if(empty($url)){        return false;      }      $url=str_replace(array("https://".$_SERVER['HTTP_HOST'],"http://".$_SERVER['HTTP_HOST']),"",$url);    }        $ip=ip();    $user_agent=$_SERVER['HTTP_USER_AGENT'];    $isphone=is_mobile();    $row=M("pv_day")->selectRow("ssid='".$ssid."' AND url='".$url."' AND createtime like '".$day."%' ");     

[代码审计]某cms前台Referer-sql注入



12/34行 $url=$_SERVER['HTTP_REFERER'];获取了ref的值。在第22/44行拼接进了数据库查询语句中,中间没有经过任何过滤。M("pv_day")->selectRow()是mvc架构的数据库查询定义,在skymvc.php中被引入。

[代码审计]某cms前台Referer-sql注入

跟进这个文件可知(cls_mysqli.php)

[代码审计]某cms前台Referer-sql注入

是用来查询数据库信息的并且返回一行数据。selecRow交给 getrow函数执行sql语句

[代码审计]某cms前台Referer-sql注入

交给query执行sql语句

[代码审计]某cms前台Referer-sql注入

$rs->execute(); 这里进行了执行,造成了sql注入。


黑盒


访问index页面会进行301跳转,

根据常量设置301跳转会进入

http://192.168.3.75:555/module.php?m=csc

经抓包发现。会进行多个url访问操作,其中下图存在referer注入。


GET /index.php?m=pv&a=stat&url= HTTP/1.1Host: 192.168.3.75:555Accept: */*User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36X-Requested-With: XMLHttpRequestReferer: http://192.168.3.75:555/module.php?m=cscAccept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Cookie: PHPSESSID=el9p0kdcjr03ulc0eo3ksk2gnoConnection: close


[代码审计]某cms前台Referer-sql注入


[代码审计]某cms前台Referer-sql注入

黑盒测试更简单~
免责声明

本公众号文章以技术分享学习为目的。

由于传播、利用本公众号发布文章而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号及作者不为此承担任何责任。

一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!


[代码审计]某cms前台Referer-sql注入

原文始发于微信公众号(藏剑安全):[代码审计]某cms前台Referer-sql注入

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年10月16日19:19:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   [代码审计]某cms前台Referer-sql注入http://cn-sec.com/archives/2116948.html

发表评论

匿名网友 填写信息