洛阳新闻

帮人买usdt赚手续费(www.payusdt.vip):记一次详细的代码审计

来源:洛阳新闻网 发布时间:2021-04-16 浏览次数:

USDT跑分平台

U交所(www.payusdt.vip)是使用TRC-20协议的Usdt官方交易所,开放USDT帐号注册、usdt小额交易、usdt线下现金交易、usdt实名不实名交易、usdt场外担保交易的平台。免费提供场外usdt承兑、低价usdt渠道、Usdt提币免手续费、Usdt交易免手续费。U交所开放usdt otc API接口、支付回调等接口。

前言

本篇是对极致CMSv1.7破绽的一些新的发现,先从MVC最先到破绽的挖掘行使

MVC篇

首先,先打开index.php

<?php

//  ----------------------------------------------------------------------
// | FrPHP { a friendly PHP Framework } 
//  ----------------------------------------------------------------------
// | Copyright (c) 2018-2099 http://frphp.jizhicms.com All rights reserved.
//  ----------------------------------------------------------------------
// | Author: 依恋风 <[email protected]>
//  ----------------------------------------------------------------------
// | Date:2018/02
//  ----------------------------------------------------------------------



// 应用目录为当前目录
define('APP_PATH', __DIR__ . '/');

// 开启调试模式
//define('APP_DEBUG', true);

//界说项目目录
define('APP_HOME','Home');

//界说项目模板文件目录
define('HOME_VIEW','template');

//界说项目模板公共文件目录
define('Tpl_common','');

//界说项目控制器文件目录
define('HOME_CONTROLLER','c');

//界说项目模子文件目录
define('HOME_MODEL','m');


//界说项目默认方式
define('DefaultAction','jizhi');

//作废log
define('StopLog',false);

//界说静态文件路径
define('Tpl_style','/static/');

// 加载框架文件
require(APP_PATH . 'FrPHP/Fr.php');

// 就这么简朴~

先是define界说,然后加载框架,以是直接去加载的框架看看,是再FrPHP/Fr.php,打开后,拖到最后,发现

先加载了设置文件,由于设置文件里是用单引号包裹,就没什么悦目的。然后再见触发FrPHP的eun方式,跟进查看

前三个很简朴,是设置数据库,和对传入的数据的简朴处置,需要注重的是route()路由处置,对它举行跟进

在141行吸收url传入的参数,然后在206行对控制器和方式名举行define赋值

然后在212行对传入的url举行处置,把输入的url前面传入的index.php先舍去

然后在231行最先,会对传入的url拆分,变为数组,如我url输入:index.php/Home/ce,会被拆分为Homece然后在243行赋值给控制器名和方式名

然则在257行会先判断插件中是否存在该控制器,然则该目录默以为空,以是会先进入if判断中,然后再进入263行,判断在默认文件中是否存在该控制器,即在Homec中是否存在,若是不存在则会把控制器名默以为Home,由于这个默认设置,以是后面会存在一个SQL注入

然后再挪用我们指定的类的方式

破绽篇

SQL注入

HomecHomeController.php中的jizhi

看到在101行存在把$url变为数组,然后取出举行sql注入。而$url则是由这里:

$url只是对url栏输入的举行吸收,以是我们先来看下吸收的方式:

看出只是对吸收index.php后面的。回到第101行,看到会先以/来举行支解,然后取出数组的第一个进入find中,执行sql语句,以是我们思量怎么对其举行攻击行使,然则我们不能替换/Home/否则会无法执行jizhi,然则我们回到MVC篇中看到的,在第264行中,我们可以看到若是我们输入的不存在,会默认controllerName为Home

,

USDT场外交易网

U交所(www.payusdt.vip)是使用TRC-20协议的Usdt官方交易所,开放USDT帐号注册、usdt小额交易、usdt线下现金交易、usdt实名不实名交易、usdt场外担保交易的平台。免费提供场外usdt承兑、低价usdt渠道、Usdt提币免手续费、Usdt交易免手续费。U交所开放usdt otc API接口、支付回调等接口。

,

以是这就意味着我们可以随意的写入,都市最终默认转换为Home,以是直接举行SQL注入:

然后由于没有过滤,就是正常的sql注入了,HomeController.php中的jizhi_details中另有一处sql注入,是通过传值来举行sql注入的,难度不打,有兴趣的可以自行去看看

XSS

1

破绽在HomecUserController.phprelease中,主要行使代码如下:

if($_POST){
    $data = $this->frparam();

    ...

    $w = get_fields_data($data,$w['molds']);    

    switch($w['molds']){
                case 'article':
                    if(!$data['body']){

                        if($this->frparam('ajax')){
                            JsonReturn(['code'=>1,'msg'=>'内容不能为空!']);
                        }else{
                            Error('内容不能为空!');
                        }
                    }
                    if(!$data['title']){
                        if($this->frparam('ajax')){
                            JsonReturn(['code'=>1,'msg'=>'题目不能为空!']);
                        }else{
                            Error('题目不能为空!');
                        }
                    }
                    $data['body'] = $this->frparam('body',4);
                    $w['title'] = $this->frparam('title',1);
                    $w['seo_title'] = $w['title'];
                    $w['keywords'] = $this->frparam('keywords',1);
                    $w['litpic'] = $this->frparam('litpic',1);
                    $w['body'] = $data['body'];
                    $w['description'] = newstr(strip_tags($data['body']),200);


                break;
            ...
    }
    ...

    if($this->frparam('id')){
                $a = M($w['molds'])->update(['id'=>$this->frparam('id')],$w);
                if(!$a){ 
                    if($this->frparam('ajax')){
                        JsonReturn(['code'=>1,'msg'=>'未修改内容,不能提交!']);
                    }else{
                        Error('未修改内容,不能提交!');
                    }
                }
                if($this->frparam('ajax')){
                    JsonReturn(['code'=>0,'msg'=>'修改乐成!','url'=>U('user/posts',['molds'=>$w['molds']])]);
                }else{
                    Success('修改乐成!',U('user/posts',['molds'=>$w['molds']]));
                }

            }else{
                $a = M($w['molds'])->add($w);
                if(!$a){
                    if($this->frparam('ajax')){
                        JsonReturn(['code'=>1,'msg'=>'宣布失败,请重试!']);
                    }else{
                        Error('宣布失败,请重试!');
                    }
                }
                if($this->frparam('ajax')){
                    JsonReturn(['code'=>0,'msg'=>'宣布乐成!','url'=>U('user/posts',['molds'=>$w['molds']])]);
                }else{
                    Success('宣布乐成!',U('user/posts',['molds'=>$w['molds']]));
                }

            }
}

很简朴,就是先赋值给$data,然后$data会经由get_fields_data函数,该函数代码如下:

function get_fields_data($data,$molds,$isadmin=1){
     if($isadmin){
         $fields = M('fields')->findAll(['molds'=>$molds,'isadmin'=>1],'orders desc,id asc');
     }else{
         //前台需要判断是否前台显示
         $fields = M('fields')->findAll(['molds'=>$molds,'isshow'=>1],'orders desc,id asc');
     }
     foreach($fields as $v){
         if(array_key_exists($v['field'],$data)){
             switch($v['fieldtype']){
                 case 1:
                 case 2:
                 case 5:
                 case 7:
                 case 9:
                 case 12:
                 $data[$v['field']] = format_param($data[$v['field']],1);
                 break;
                 case 11:
                 $data[$v['field']] = strtotime(format_param($data[$v['field']],1));
                 break;
                 case 3:
                 $data[$v['field']] = format_param($data[$v['field']],4);
                 break;
                 case 4:
                 case 13:
                 $data[$v['field']] = format_param($data[$v['field']]);
                 break;
                 case 14:
                 $data[$v['field']] = format_param($data[$v['field']],3);
                 break;
                 case 8:
                 $r = implode(',',format_param($data[$v['field']],2));
                 if($r!=''){
                     $r = ','.$r.',';
                 } 

                 $data[$v['field']] = $r;
                 break;

             }
         }else if(array_key_exists($v['field'].'_urls',$data)){
             switch($v['fieldtype']){
                 case 6:
                 case 10:
                 $data[$v['field']] = implode('||',format_param($data[$v['field'].'_urls'],2));
                 break;
             }
         }else{

            $data[$v['field']] = '';      

         }

     }
     return $data;

 }

由于是先经由sql执行,以是可以组织$fields为空,以是可以直接把$data的值赋值给$w

然后看到源代码的这一句$data['body'] = $this->frparam('body',4);,我们可以知道4是没有对html实体话的,以是可以对body举行XSS的注入,以是组织payload:

tid=2&article=asd&body=<script>alert(1)</script>&id=4&molds=article&title=qwe&sad=qwe

2

破绽在HomecErrorController.php

很简朴,直接输入

?msg=<script>alert(1)</script>

随便文件删除

破绽在AcSysController.php中的deletePicAll处:

首先,frparam函数功效是可以通过在浏览器传值举行对$data传值,该函数有一定过滤,在该处主要是对单引号何双引号过滤,然后后面会把$data数组中litpic检测是否为文件名,然后再删除文件。

首先,我们先来一段测试代码:

function ce(){
        $data = $this->frparam('data',1);
        if($data!='') {
            $pictures = M('pictures')->findAll('id in(' . $data . ')');
            var_dump($pictures);
            $isall = true;

            foreach($pictures as $v){
                if(strpos($v['litpic'],'http')===false){
                    var_dump('.'.$v['litpic']);
                }else{
                    $isall = false;
                }
            }
        }
    }

然后先随意输入:

看到拼接后执行的语句,然后再来举行组织,由于过滤了单引号和双引号,以是用16进制,组织payload:

这样就能先实现随便文件删除

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片