热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Discuz2.2F注册程序过滤不严漏洞

文章标题:Discuz2.2F注册程序过滤不严漏洞。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  
  我知道 Discuz 2.2F 有两个致命漏洞,但是官方也发布了更新版本,不知道这里存在不,不管怎么说,获得 webshell 是最基本的,不然一切都不可能,恰好 Discuz 2.2F 给我们提供了条件,访问 http://172.16.0.125/forumdata/illegallog.php ,返回“ Access Denied ”,漏洞不存在,换一个,这个 2.2F 的早期版本可以注册相同的 ID ,不过对于繁体的论坛的中文名注册会变乱码,我只测试了英文名的,不管,先写一个表单:
  
  
  用户名 :

  密码:

  确认密码:

  E-mail :

  
  
  
  这个漏洞不是我发现的,但是我自己分析过,在我们的内部论坛有我的分析报告,现在公布出来。先说说这个漏洞的利用和存在的理由。
  
  register.php 的代码中有如下代码:
  
  $email = trim($email);
  if(!$doublee && strstr($email, @)) {
  $emailadd = "OR email=$email";
  }
  
  这里是说如果不存在 $doublee 这个变量,并且判断邮件地址格式正确,就指定 $emailadd 这个变量为 "OR email=$email" ,为后面的 SQL 语句做准备。往下有一段代码如下:
  
  $query = $db->query("SELECT COUNT(*) FROM $table_members WHERE username=$username $emailadd ");
  if($db->result($query, 0)) {
  showmessage(profile_account_duplicate);
  }
  
  默认 $emailadd = "OR email=$email" 是满足的,所以上面的 SQL 语句就变成判断用户名和邮箱,有任意一个相同,就提示“该用户名或 Email 地址已经被注册了,请返回重新填写。”
  
  利用的方法是给 $doublee 赋值,然后就可以饶过 $emailadd = "OR email=$email" 这句,然后再自己构造 $emailadd 这个变量,这个就是我在本地表单的 action 构造的原因。
  
  
  
  然后这个语句到了上面的 SQL 语句那里,就变成:
  
  SELECT COUNT(*) FROM $table_members WHERE username=$username and uid=100000
  
  既然是同时用用户名和用户 ID 判断,那么这个肯定是不成立的了,就可以顺利跳过
  
  
  if($db->result($query, 0)) {
  showmessage(profile_account_duplicate);
  }
  
  直接到达这里插入记录:
  
  $db->query("INSERT INTO $table_members (........) VALUES (........)");
  
  也就注册了相同的用户名。然后再看看 memcp.php ,看到更新用户资料的那里, SQL 语句居然是这样。
  
  UPDATE $table_members SET ...... WHERE username=$discuz_user
  
  直接更新所有用户名为 XX 的资料。呵呵,就达到了修改管理员的密码的目的。呵呵, DZ 论坛没有用 id 来判断更新是不严谨的。没有考虑到唯一性……
  
  
推荐阅读
  • 本文探讨了如何在C#应用程序中有效处理来自两个不同数据库的数据,特别是当需要从一个数据库中选择不在另一个大型集合中的ID时遇到的挑战和解决方案。 ... [详细]
  • 解决phpMyAdmin运行错误:mysqli_init(): 属性访问尚未允许
    本文探讨了在使用phpMyAdmin过程中遇到的mysqli_init()函数错误,并提供了有效的解决方案。 ... [详细]
  • 本文探讨了在执行SQL查询时遇到的因字符集不同而导致查询结果差异的问题,特别是涉及中文字符时。文章分析了在不同字符集设置下,SQL查询结果的变化,并提供了详细的解决方案。 ... [详细]
  • 一、数据更新操作DML语法中主要包括两个内容:查询与更新,更新主要包括:增加数据、修改数据、删除数据。其中这些操作是离不开查询的。1、增加数据语法:INSERTINTO表名称[(字 ... [详细]
  • SQL注入实验:SqliLabs第38至45关解析
    本文深入探讨了SqliLabs项目中的第38至45关,重点讲解了堆叠注入(Stacked Queries)的应用技巧及防御策略。通过实际案例分析,帮助读者理解如何利用和防范此类SQL注入攻击。 ... [详细]
  • KKCMS代码审计初探
    本文主要介绍了KKCMS的安装过程及其基本功能,重点分析了该系统中存在的验证码重用、SQL注入及XSS等安全问题。适合初学者作为入门指南。 ... [详细]
  • 解析程序员与软件工程师的角色差异
    本文深入探讨了程序员与软件工程师之间的主要区别,包括它们的职业定位、技能要求以及工作内容等方面的不同,旨在帮助读者更好地理解这两个角色的特点。 ... [详细]
  • 开发笔记:新手DVWACSRF
    开发笔记:新手DVWACSRF ... [详细]
  • 应用程序配置详解
    本文介绍了配置文件的关键特性及其在不同场景下的应用,重点探讨了Machine.Config和Web.Config两种主要配置文件的用途和配置方法。文章还详细解释了如何利用XML格式的配置文件来调整应用程序的行为,包括自定义配置、错误处理、身份验证和授权设置。 ... [详细]
  • 本文详细探讨了在Windows Server 2003环境下遇到MySQL连接失败(错误代码10061)的解决方案,包括通过卸载特定的Windows更新和调整系统注册表设置的方法。 ... [详细]
  • 尝试从 MySQL 转向 SQL Server 2008 时遇到了安装错误,提示“系统配置未能初始化”,错误代码为 0x84B10001。怀疑可能是由于之前的 MySQL 安装残留导致的注册表问题。寻求专家建议。 ... [详细]
  • 使用DataGridViewComboBoxColumn实现数据绑定与操作
    本文详细介绍如何在DataGridView中使用DataGridViewComboBoxColumn来加载、选择和保存数据库中的数据,提供具体的实现步骤和示例代码。 ... [详细]
  • 本文详细介绍了如何在SQL查询中使用SAVEPOINT语句进行事务管理,以及如何通过多列排序增强查询结果的组织性。例如,通过在ORDER BY子句中指定多个列,可以实现更加细致和灵活的数据排序。 ... [详细]
  • Web安全入门:MySQL基础操作与SQL注入防范
    本文详细介绍了MySQL数据库的基础操作命令,包括数据库和表的基本管理,以及数据的增删查改等常用操作。同时,针对Web安全领域常见的SQL注入问题,提供了初步的理解和防范措施。 ... [详细]
  • 本文探讨了如何利用Oracle的REGEXP_SUBSTR函数高效地从复杂字符串中提取括号内的特定值,提供了详细的示例和解决方案。 ... [详细]
author-avatar
lanshan1126141
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有