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("\t", $token);
    $session=md5($conf['admin'].$conf['pwd'].$password_hash);
    
    if($session==$sid) {
        $islogin=1;
    }
}

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

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

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

 

posted @ 2020-02-28 17:01  B1gstar  阅读(842)  评论(0编辑  收藏  举报