Ucenter Home SQL注入漏洞详细分析(需要GPC=OFF)

本文深入探讨了两个SQL注入漏洞实例,详细分析了漏洞所在文件及代码逻辑,并提出了相应的防护措施。通过案例研究,揭示了GPC参数处理的不当之处可能导致的安全风险。

SQL Injection 1:

漏洞在文件\source\cp_profile.php

<?php //  
.......省略.......

                //性别
                $_POST['sex'] = intval($_POST['sex']);
                if($_POST['sex'] && empty($space['sex'])) $setarr['sex'] = $_POST['sex'];
                
                foreach ($profilefields as $field => $value) {
                        if($value['formtype'] == 'select') $value['maxsize'] = 255;
                        $setarr['field_'.$field] = getstr($_POST['field_'.$field], $value['maxsize'], 1, 1);
                        if($value['required'] && empty($setarr['field_'.$field])) {
                                showmessage('field_required', '', 1, array($value['title']));
                        }
                }
                
                updatetable('spacefield', $setarr, array('uid'=>$_SGLOBAL['supe_uid']));
                
                //隐私
                $inserts = array();
                foreach ($_POST['friend'] as $key => $value) {
                        $value = intval($value);
                        $inserts[] = "('base','$key','$space[uid]','$value')"; //这是要干嘛? key没过滤 11年至今未修复
                }
                if($inserts) {
                        $_SGLOBAL['db']->query("DELETE FROM ".tname('spaceinfo')." WHERE uid='$space[uid]' AND type='base'");
                        $_SGLOBAL['db']->query("INSERT INTO ".tname('spaceinfo')." (type,subtype,uid,friend)
                                VALUES ".implode(',', $inserts)); //带入了 不解释...
                }

SQL Injection 2:

通读了一遍, 除了上面那个冷饭以外还有一个地方对KEY也没做处理, 导致注射:

 漏洞文件 \source\cp_privacy.php

<?php //  
.......省略.......

} elseif(submitcheck('privacy2submit')) {

        //类型筛选
        $space['privacy']['filter_icon'] = array();
        foreach ($_POST['privacy']['filter_icon'] as $key => $value) {
                $space['privacy']['filter_icon'][$key] = 1;
        }
        //用户组设置
        $space['privacy']['filter_gid'] = array();
        foreach ($_POST['privacy']['filter_gid'] as $key => $value) {
                $space['privacy']['filter_gid'][$key] = intval($value);
        }
        
        //通知筛选
        $space['privacy']['filter_note'] = array();
        foreach ($_POST['privacy']['filter_note'] as $key => $value) { //此处开始把key转到$space['privacy']['filter_note'][$key]
                $space['privacy']['filter_note'][$key] = 1;
        }
        
        privacy_update();

        //更新好友缓存
        friend_cache($_SGLOBAL['supe_uid']);

        showmessage('do_success', 'cp.php?ac=privacy&op=view');
}

if($_GET['op'] == 'view') {
        //好友组
        
        $groups = getfriendgroup();
        //屏蔽
        $filter_icons = empty($space['privacy']['filter_icon'])?array():$space['privacy']['filter_icon']; //赋值到$filter_icons
        $filter_note = empty($space['privacy']['filter_note'])?array():$space['privacy']['filter_note'];
        $iconnames = $appids = $icons = $uids = $users = array();

.......省略.......
        

foreach ($filter_icons as $key => $value) {

list($icon, $uid) = explode('|', $key); //使用|分割 将key赋值到$uid 并未做任何过滤

$icons[$key] = $icon;

$uids[$key] = $uid; //此处写进$uids也没过滤

if(is_numeric($icon)) {

$appids[$key] = $icon;

}
}

if($uids) {
                $query = $_SGLOBAL['db']->query("SELECT uid, username FROM ".tname('space')." WHERE uid IN (".simplode($uids).")"); //射了射了射了射了射了射了射了射了射了射了射了射了射了射了射了射了
                $_SGLOBAL['db']->fetch_array($query);
while ($value = $_SGLOBAL['db']->fetch_array($query)) {
                        $users[$value['uid']] = $value['username'];
                }
        }
        //获取应用名称
        if($appids) {
                $query = $_SGLOBAL['db']->query("SELECT appid, appname FROM ".tname('myapp')." WHERE appid IN (".simplode($appids).")");
                while ($value = $_SGLOBAL['db']->fetch_array($query)) {
                        $iconnames[$value['appid']] = $value['appname'];
                }
        }
        
        $cat_actives = array('view' => ' class="active"');

}

 看看simplode函数吧~

function simplode($ids) {
        return "'".implode("','", $ids)."'"; //虽然有单引号, 但是程序并没有过滤post过去的KEY值, 所以在GPC=OFF的情况下可射.
}

测试图:

注意必须要先登录并且找到formhash, 登陆后源码里面就能找到

作者:Rices

内容概要:本研究聚焦于绿电直连型电氢氨园区的优化运行,提出一种集成绿色电力直接供给、电解水制氢及氢气合成氨工艺的综合能源系统架构。通过建立包含风光发电、电解槽、氨合成反应器、储氢罐、电网交互及多类型负荷在内的系统模型,综合考虑绿电直供优先、能量梯级利用与多能互补原则,构建以系统综合运行成本最小化为目标的优化调度模型。研究采用Matlab与Python工具进行算法求解和仿真分析,利用实际气象与负荷数据完成案例验证,评估了不同运行策略下系统的经济性、可再生能源消纳能力与碳减排效益,为新型电氢氨一体化园区的规划与运行提供了理论依据和技术支撑。; 适合人群:具备一定电力系统、新能源或化工背景的研究生、科研人员及从事综合能源系统规划与优化工作的工程技术人员。; 使用场景及目标:①用于科研学习,理解电-氢-氨多能转换系统的建模与优化方法;②为工业园区的低碳化、智能化改造提供技术参考与决策支持;③作为开发类似综合能源管理系统的理论基础。; 阅读建议:此资源包含完整的模型代码、数据与论文,使用者应结合代码仔细研读论文中的模型构建部分,重点关注目标函数与约束条件的设计逻辑,并尝试修改参数进行仿真,以深入掌握优化算法在实际系统中的应用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值