• PHPCMS V9 视频分享模块SQL注射漏洞分析


    其实这个0day前几天就发现了,只是今天放出来是因为我最重要的人。。

    废话不多说了,直接上代码分析

             \phpcms\modules\video.php(78行代码)

    /**
         * 
         * 视频添加方法
         */
    public function add() {
    if ($_POST['dosubmit']) {
                //首先处理,提交过来的数据
                 $data['vid'] = $_POST['vid'];  // 很明显VID没有过滤
    if (!$data['vid']) showmessage(L('failed_you_video_uploading'), 'index.php?m=video&c=video&a=add');
                $data['title'] = isset($_POST['title']) && trim($_POST['title']) ? trim($_POST['title']) : showmessage(L('video_title_not_empty'),
    'index.php?m=video&c=video&a=add&meunid='.$_GET['meunid']);
                $data['description'] = trim($_POST['description']);
                $data['keywords'] = trim(strip_tags($_POST['keywords']));
                //其次向vms post数据,并取得返回值
                $get_data = $this->ku6api->vms_add($data);
                if (!$get_data) {
                    showmessage($this->ku6api->error_msg);
                }
                $data['vid'] = $get_data['vid'];
                $data['addtime'] = SYS_TIME;
                $data['userupload'] = intval($_POST['userupload']); //这才是重点..
                $videoid = $this->v->add($data); // 进数据库了,亲..
                if ($videoid) {
                    showmessage(L('operation_success'), 'index.php?m=video&c=video&a=init&meunid='.$_GET['meunid']);
                } else {
                    showmessage(L('operation_failure'), 'index.php?m=video&c=video&a=add&meunid='.$_GET['meunid']);
                }
            } else {
                if(!$this->ku6api->testapi()) {
                    showmessage(L('vms_sn_skey_error'),'?m=video&c=video&a=setting&menuid='.$_GET['menuid']);
                }
                $flash_info = $this->ku6api->flashuploadparam();
                $show_validator = true;
                include $this->admin_tpl('video_add');
            }
        }

    好,下面我们继续分析进数据库的那一刹那。。

    */
        public function add($data = array()) {
            if (is_array($data) && !empty($data)) {
                $data['status'] = 1;
                $data['userid'] = defined('IN_ADMIN') ? 0 : param::get_cookie('_userid'); //想玩cookie注入吗?
                 //虽然这里没有提到$_data[‘vid’],但是已经在我歌声里了。。
    $vid = $this->db->insert($data, true); //插入了,亲!!
                return $vid ? $vid : false; 
            } else {
                return false;

    但是,利用漏洞有2个前提..

    利用这个漏洞提前:

    1. 允许注册用户
    2. 允许视频上传

    利用漏洞: 由于vid是取决于html提交过来的,所以我们只要修改vid的值成“SQL语”就可以了。。

  • 相关阅读:
    python第三十一课--递归(1.简单递归函数的定义和使用)
    python第三十课--异常(with as操作)
    python第三十课--异常(异常对象传递过程)
    python第三十课--异常(raise关键字)
    python第三十课--异常(else讲解)
    python第三十课--异常(finally讲解)
    python第三十课--异常(异常处理定义格式和常见类型)
    python第二十九课——文件读写(复制文件)
    python第二十九课——文件读写(写数据的操作)
    16 nginx实现负载均衡
  • 原文地址:https://www.cnblogs.com/y0umer/p/2833240.html
Copyright © 2020-2023  润新知