Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[求助] Discuz! UC_KEY泄露后,头像功能有可能被用于上传任意文件

[复制链接]
1314学习网 发表于 2017-7-27 17:51:07 | 显示全部楼层 |阅读模式
本帖最后由 1314学习网 于 2017-8-7 11:46 编辑

UC_KEY泄露后,头像功能有可能被用于上传任意文件
uc_server/model/base.php
找到
  1. function input($k) {
复制代码

下边加
  1. if($k == 'uid'){
  2.         if(is_array($this->input[$k])){
  3.                 foreach($this->input[$k] as $value){
  4.                         if(!preg_match("/^[0-9]+$/", $value)){
  5.                                 return NULL;
  6.                         }
  7.                 }
  8.         }elseif(!preg_match("/^[0-9]+$/", $this->input[$k])){
  9.                 return NULL;
  10.         }
  11. }
复制代码

uc_server/model/pm.php
找到
  1. if($uid == $value || !$value) {
复制代码

修改为
  1. if($uid == $value || !$value || !preg_match("/^[0-9]+$/", $value)) {
复制代码



jiangchuankyo 发表于 2017-7-27 18:04:15 | 显示全部楼层
preg_match("/^[0-9]+$/"应该改成:
  1. preg_match('#^[1-9][0-9]*$#'
复制代码
回复

使用道具 举报

jiangchuankyo 发表于 2017-7-27 18:08:12 | 显示全部楼层
还有这句语法也错了k == 'uid'
判断等于字符串必须用全等:
  1. $k === 'uid'
复制代码


因为如果$k等于-1、1、2、true这些的话用两等号就出大问题了它也是返回真的
回复

使用道具 举报

 楼主| 1314学习网 发表于 2017-7-28 13:58:21 | 显示全部楼层
jiangchuankyo 发表于 2017-7-27 18:08
还有这句语法也错了k == 'uid'
判断等于字符串必须用全等:

正则的改不改都一样,这里只要验证是数字就安全了
恒等的问题,你可以严谨点用恒等,不过UC这里不会出现你说那些 $k 的情况
回复

使用道具 举报

yuming123 发表于 2017-7-28 14:04:43 | 显示全部楼层
这个算漏洞吗?如果key没泄露需要修改吗  谢谢
回复

使用道具 举报

jiangchuankyo 发表于 2017-8-6 22:12:14 | 显示全部楼层
靠,垃圾,代码坑人BUG,数据库被弄混乱了,删用户只删了一半后面的被强制不执行了:
if($k == 'uid' && !preg_match("/^[0-9]+$/", $this->input[$k])){    return NULL;}
同时删除多个用户时传入的 $this->input[$k] 是uid数组,你这个给我判断BUG返回NULL;

楼主发代码太不负责任了,大家千万别用,小心数据库被破坏!
要用也要加数组判断代码:
  1. if(is_array($this->input[$k])) {
  2. foreach($this->input[$k] as $kyokey => $kyoval) {
  3. if(!preg_match('#^[0-9]+$#', $kyoval)) return NULL;
  4. }
  5. }else{
  6. return NULL;
  7. }
复制代码
回复

使用道具 举报

luogang2009 发表于 2017-8-6 22:56:20 | 显示全部楼层
看不懂?这是干啥的?
回复

使用道具 举报

 楼主| 1314学习网 发表于 2017-8-7 12:04:09 | 显示全部楼层
jiangchuankyo 发表于 2017-8-6 22:12
靠,垃圾,代码坑人BUG,数据库被弄混乱了,删用户只删了一半后面的被强制不执行了:
if($k == 'uid' && !preg_ ...

你是傻逼吗,有问题说问题就好了,动不动就垃圾,UC又不是我写的,我哪知道UC除了使用uids传数组,还直接uid混传,你牛逼你咋没早点出来修复漏洞呢
回复

使用道具 举报

格东站长网插件 发表于 2017-8-7 12:19:59 | 显示全部楼层
先把$value整数化吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-2-5 18:53 , Processed in 0.026409 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表