• 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直接调用即可。

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

  • 相关阅读:
    vue-fullcalendar插件
    iframe 父框架调用子框架的函数
    关于调试的一点感想
    hdfs 删除和新增节点
    hadoop yarn 实战错误汇总
    Ganglia 安装 No package 'ck' found
    storm on yarn(CDH5) 部署笔记
    spark on yarn 安装笔记
    storm on yarn安装时 提交到yarn失败 failed
    yarn storm spark
  • 原文地址:https://www.cnblogs.com/b1gstar/p/12319609.html
Copyright © 2020-2023  润新知