zoukankan      html  css  js  c++  java
  • PHP-CMS代码审计(4)

    这次找了个发卡平台,url:  https://files.cnblogs.com/files/b1gstar/kamiphp.zip

     从52破解上下载的 :

     先把网站搭建起来。

    网站没有采用mvc框架。

    首页的getkm.php ,放眼望去就是个sql注入。

    if(!empty($_POST['tqm'])){
        $tqm = $_POST['tqm'];
        $sql = "select * from ayangw_km
        where out_trade_no ='{$tqm}' or trade_no = '{$tqm}' or rel = '{$tqm}'
        ORDER BY endTime desc
        limit 1";
        
        $res = $DB->query($sql);
        echo $res;

    看了下包含的通用文件,其中有:

    if(is_file(SYSTEM_ROOT.'360safe/360webscan.php')){//360网站卫士
        require_once(SYSTEM_ROOT.'360safe/360webscan.php');
    }

    作者原意是采用360webscan来防护,我下载的包中没有。

    即使定义了通用的转义函数,但是此处也没有引用。

    function daddslashes($string, $force = 0, $strip = FALSE) {
        !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
        if(!MAGIC_QUOTES_GPC || $force) {
            if(is_array($string)) {
                foreach($string as $key => $val) {
                    $string[$key] = daddslashes($val, $force, $strip);
                }
            } else {
                $string = addslashes($strip ? stripslashes($string) : $string);
            }
        }
        return $string;
    }

    继续往下读,根目录的ajax.php,又是一个很low的sql注入:

    if(empty($_GET['act'])){
        exit("非法访问!");
    }else{
        $act=$_GET['act'];
    }
    
    switch ($act){
        //异步获取商品
        case 'selgo': 
           $select = "<option>请选择商品</option>";
            $tpID = $_POST['tyid'];
            $sql = "select * from ayangw_goods where  state =1 and tpId = ".$tpID;
            $res = $DB->query($sql);
           $i=1;

    至此,我就不在关注sql注入漏洞了。

    前台主要功能就是购买商品了。这里用的是一个叫彩虹易支付接口,有签名校验,也有判断前台是否修改价格的代码,由于支付平台需要花钱注册和认证商户,我就跳过去了。

    我们来看后台:

    发现可以直接伪造cookie登录。后台index.php:

     <script type="text/javascript">
        if($.cookie("user") == null || $.cookie("user") == "" || $.cookie("loginInfo") != $.md5($.cookie("pass"))){
            window.location.href='./login.php';
        }else{
            if (typeof c == 'undefined')    window.close();    
        }

    通过postman伪造:

     

     后台文件文件都包含了head.php head又包含了common.php,这个common又包含了member.php,其中有:

    if(isset($_COOKIE["admin_token"]))
    {
        $token=authcode(daddslashes($_COOKIE['admin_token']), 'DECODE', SYS_KEY);
        list($user, $sid) = explode("	", $token);
        $session=md5($conf['admin'].$conf['pwd'].$password_hash);
        
        if($session==$sid) {
            $islogin=1;
        }
    }

    但是这里只是用来验证cookie中token是否正确,并没有验证登录。

    看了下后台几个php文件,都是sql的增减删改功能,通篇注入。ajax.php直接调用即可。

    审计结束。就算是了解一下发卡平台吧。。。。。。。。。。。

  • 相关阅读:
    [bug] ERROR: Can't get master address from ZooKeeper; znode data == null
    [面试] 大数据
    [项目] 智慧出行
    [Linux] grep -v
    [Linux] > /dev/null 2>&1 &
    [bug] CDH报错:cloudera-scm-server dead but pid file exists
    [bug] CM / CDH 主机运行状态不良情况
    [bug] org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 2
    [其他] 记忆的奥秘(一)
    处理数字的类 —— Math类 、 Random类 、 BigDecimal类 与 BigInteger类
  • 原文地址:https://www.cnblogs.com/b1gstar/p/12319609.html
Copyright © 2011-2022 走看看