首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>漏洞资料>文章内容
HDWiki 5.1 任意用户密码修改漏洞
来源:www.wooyun.org 作者:牛奶坦克 发布时间:2012-04-20  

简要描述:

HDWiki重置密码存在一处逻辑漏洞,导致攻击者可以修改任意用户密码。

详细说明:

 

control/user.php
	function dogetpass(){
        ......
		}elseif(isset($this->post['verifystring'])){
			$uid=$this->post['uid'];
			$encryptstring=$this->post['verifystring'];
			$idstring=

简要描述:

HDWiki重置密码存在一处逻辑漏洞,导致攻击者可以修改任意用户密码。

详细说明:

 

___FCKpd___0

 

漏洞证明:

http://wiki.somesite.com/index.php?user-getpass-用户id

正常情况应该是这样,user-getpass-1-xxx,但是因为逻辑问题,可以绕过去。
这种情况下表单内verifystring变量为空,直接输入两次新密码就重置了。

其实,这里还有个注射的,取验证码的时候。。。

修复方案:

逻辑问题,考虑一下检测码为空,并且数据库内没有该用户重置记录的情况。

临时解决方案:
}elseif(isset($this->post['verifystring'])){
$uid=$this->post['uid'];
$encryptstring=$this->post['verifystring'];
$idstring=$_ENV['user']->get_idstring_by_uid($uid,$this->time);
/* 判断一下空的情况 */
if(empty($encryptstring) || empty($idstring)){
$this->message($error,'BACK',0);
}

ENV['user']->get_idstring_by_uid($uid,$this->time); if($idstring==$encryptstring){ //没考虑到提交为空与查询返回为空的情况,一个逻辑错误 $newpass = $this->post['password']; $renewpass = $this->post['repassword']; $error=

简要描述:

HDWiki重置密码存在一处逻辑漏洞,导致攻击者可以修改任意用户密码。

详细说明:

 

___FCKpd___0

 

漏洞证明:

http://wiki.somesite.com/index.php?user-getpass-用户id

正常情况应该是这样,user-getpass-1-xxx,但是因为逻辑问题,可以绕过去。
这种情况下表单内verifystring变量为空,直接输入两次新密码就重置了。

其实,这里还有个注射的,取验证码的时候。。。

修复方案:

逻辑问题,考虑一下检测码为空,并且数据库内没有该用户重置记录的情况。

临时解决方案:
}elseif(isset($this->post['verifystring'])){
$uid=$this->post['uid'];
$encryptstring=$this->post['verifystring'];
$idstring=$_ENV['user']->get_idstring_by_uid($uid,$this->time);
/* 判断一下空的情况 */
if(empty($encryptstring) || empty($idstring)){
$this->message($error,'BACK',0);
}

ENV['user']->checkpassword($newpass,$renewpass); if($error=='OK'){ //eval($this->plugin["ucenter"]["hooks"]["getpass"]); UC_OPEN && $msg=

简要描述:

HDWiki重置密码存在一处逻辑漏洞,导致攻击者可以修改任意用户密码。

详细说明:

 

___FCKpd___0

 

漏洞证明:

http://wiki.somesite.com/index.php?user-getpass-用户id

正常情况应该是这样,user-getpass-1-xxx,但是因为逻辑问题,可以绕过去。
这种情况下表单内verifystring变量为空,直接输入两次新密码就重置了。

其实,这里还有个注射的,取验证码的时候。。。

修复方案:

逻辑问题,考虑一下检测码为空,并且数据库内没有该用户重置记录的情况。

临时解决方案:
}elseif(isset($this->post['verifystring'])){
$uid=$this->post['uid'];
$encryptstring=$this->post['verifystring'];
$idstring=$_ENV['user']->get_idstring_by_uid($uid,$this->time);
/* 判断一下空的情况 */
if(empty($encryptstring) || empty($idstring)){
$this->message($error,'BACK',0);
}

ENV['ucenter']->getpass($uid,$newpass);

简要描述:

HDWiki重置密码存在一处逻辑漏洞,导致攻击者可以修改任意用户密码。

详细说明:

 

___FCKpd___0

 

漏洞证明:

http://wiki.somesite.com/index.php?user-getpass-用户id

正常情况应该是这样,user-getpass-1-xxx,但是因为逻辑问题,可以绕过去。
这种情况下表单内verifystring变量为空,直接输入两次新密码就重置了。

其实,这里还有个注射的,取验证码的时候。。。

修复方案:

逻辑问题,考虑一下检测码为空,并且数据库内没有该用户重置记录的情况。

临时解决方案:
}elseif(isset($this->post['verifystring'])){
$uid=$this->post['uid'];
$encryptstring=$this->post['verifystring'];
$idstring=$_ENV['user']->get_idstring_by_uid($uid,$this->time);
/* 判断一下空的情况 */
if(empty($encryptstring) || empty($idstring)){
$this->message($error,'BACK',0);
}

ENV['user']->update_field('password',md5($newpass),$uid);

简要描述:

HDWiki重置密码存在一处逻辑漏洞,导致攻击者可以修改任意用户密码。

详细说明:

 

___FCKpd___0

 

漏洞证明:

http://wiki.somesite.com/index.php?user-getpass-用户id

正常情况应该是这样,user-getpass-1-xxx,但是因为逻辑问题,可以绕过去。
这种情况下表单内verifystring变量为空,直接输入两次新密码就重置了。

其实,这里还有个注射的,取验证码的时候。。。

修复方案:

逻辑问题,考虑一下检测码为空,并且数据库内没有该用户重置记录的情况。

临时解决方案:
}elseif(isset($this->post['verifystring'])){
$uid=$this->post['uid'];
$encryptstring=$this->post['verifystring'];
$idstring=$_ENV['user']->get_idstring_by_uid($uid,$this->time);
/* 判断一下空的情况 */
if(empty($encryptstring) || empty($idstring)){
$this->message($error,'BACK',0);
}

ENV['user']->update_getpass($uid); $this->message($this->view->lang['resetPassSucess'],'index.php?user-login',0); }else{ $this->message($error,'BACK',0); } }else{ $this->message($this->view->lang['resetPassMessage'], WIKI_URL ,0); } } function get_idstring_by_uid($uid,$time){ //取验证码 return $this->db->result_first("SELECT code FROM ".DB_TABLEPRE."activation WHERE uid=$uid AND available=1 AND type=1 AND time>($time-3*24*3600) ORDER BY time DESC"); }

 

漏洞证明:

http://wiki.somesite.com/index.php?user-getpass-用户id

正常情况应该是这样,user-getpass-1-xxx,但是因为逻辑问题,可以绕过去。
这种情况下表单内verifystring变量为空,直接输入两次新密码就重置了。

其实,这里还有个注射的,取验证码的时候。。。

修复方案:

逻辑问题,考虑一下检测码为空,并且数据库内没有该用户重置记录的情况。

临时解决方案:
}elseif(isset($this->post['verifystring'])){
$uid=$this->post['uid'];
$encryptstring=$this->post['verifystring'];
$idstring=$_ENV['user']->get_idstring_by_uid($uid,$this->time);
/* 判断一下空的情况 */
if(empty($encryptstring) || empty($idstring)){
$this->message($error,'BACK',0);
}


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·XSOK环境变量本地命令执行漏洞
·N点虚拟主机管理系统 致命漏洞。
·南方数据企业网站管理系统V10.0
·动网(DVBBS)Version 8.2.0 后
·Solaris 10 telnet漏洞及解决
·破解无线路由器密码,常见无线密
·Nginx %00空字节执行php漏洞
·WinWebMail、7I24提权漏洞
·XPCD xpcd-svga本地缓冲区溢出漏
·Struts2多个漏洞简要分析
·ecshop2.72 api.php 文件鸡肋注
·Discuz!后台拿Webshell 0day
  相关文章
·最土团购程序最新sql注入漏洞利
·ThinkPHP framework 任意代码执
·DeDeCMS v5.7最新ajax_membergro
·Spring framework(cve-2010-162
·struts2框架XSLTResult本地文件
·破解无线路由器密码,常见无线密
·PostgreSQL基于错误XML外部实体
·Mysql身份认证漏洞及利用(CVE-20
·各大网站后台地址
·Thinkphp框架动态执行漏洞
·Dedecms 注射漏洞获得管理员密码
·structs2 远程命令执行漏洞分析
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved