当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-074074

漏洞标题:YiDacms 最新版重置任意用户账户二及其他越权操作

相关厂商:yidacms.com

漏洞作者: xfkxfk

提交时间:2014-08-27 17:07

修复时间:2014-11-25 17:08

公开时间:2014-11-25 17:08

漏洞类型:非授权访问/权限绕过

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-08-27: 细节已通知厂商并且等待厂商处理中
2014-08-27: 厂商已经确认,细节仅向厂商公开
2014-08-30: 细节向第三方安全合作伙伴开放
2014-10-21: 细节向核心白帽子及相关领域专家公开
2014-10-31: 细节向普通白帽子公开
2014-11-10: 细节向实习白帽子公开
2014-11-25: 细节向公众公开

简要描述:

YiDacms 最新版重置任意用户账户,及其他越权操作

详细说明:

易达CMS 企业建站系统
当前最新版本是:YidaCms X3.2(20140718)版
之前发过一次重置任意用户密码的漏洞,但是只能修改成固定的密码,要是修改成任意密码的话,比较麻烦,需要md5明文密码后取10位作为信息密码,较麻烦。
这里我们直接输入任意明文密码,即可修改
来看看源代码:
文件/Yidacms/user/user.asp

if request("yidacms")="password" Then
set rs=server.createobject("adodb.recordset")
user_id1 = cint(request("id"))
sql="select * from shuaiweb_user WHERE id= "&user_id1&""
rs.open sql,dbok,1,1
if Request.Form("shuaiweb_userpass")="" then
response.write "<script language=javascript> alert('密码不能为空!');history.go(-1);</script>"
response.end
end if
if Request.Form("shuaiweb_userpass")<>Request.Form("shuaiweb_userpass2") then
response.write "<script language=javascript> alert('两次输入的密码不一样!');history.go(-1);</script>"
response.end
end if
set rs=server.createobject("adodb.recordset")
user_id2 = cint(request("id"))
sql="select * from shuaiweb_user WHERE id= "&user_id2&""
rs.open sql,dbok,1,3
rs("shuaiweb_useremail")=filter_Str(trim(request.form("shuaiweb_useremail")))
rs("shuaiweb_userpass")=filter_Str(left(MD5(trim(request.form("shuaiweb_userpass"))),10))
rs("shuaiweb_username")=filter_Str(trim(request.form("shuaiweb_username")))
rs("shuaiweb_usertel")=filter_Str(trim(request.form("shuaiweb_usertel")))
rs("shuaiweb_userqq")=filter_Str(trim(request.form("shuaiweb_userqq")))
rs("shuaiweb_usermsn")=filter_Str(trim(request.form("shuaiweb_usermsn")))
rs("shuaiweb_useraddress")=filter_Str(trim(request.form("shuaiweb_useraddress")))
rs("shuaiweb_userportrait")=filter_Str(trim(request.form("shuaiweb_userportrait")))
rs("shuaiweb_usernote")=filter_Str(trim(request.form("shuaiweb_usernote")))
rs("shuaiweb_usernumber")=filter_Str(trim(request.form("shuaiweb_usernumber")))
rs.update
rs.close
set rs=nothing
session("shuaiweb_useremail")=request.Form("shuaiweb_useremail")
response.write "<script language=javascript> alert('修改成功!');location.replace('user_pass.asp');</script>"
End If


这里按照获取的id,直接update,更新用户信息了
信息的密码直接获取,也没有判断旧密码,直接修改对应id的密码以及其他信息。
这里同样,遍历一遍id,即可修改全部用户密码。
其他越权操作:

if request("yidacms")="buydel" Then
set rs=server.createobject("adodb.recordset")
user_id3 = cint(request("id"))
sql="select * from shuaiweb_buy WHERE id= "&user_id3&""
rs.open sql,dbok,1,1
if rs("shuaiweb_reading") = 1 then
response.write "<script language=javascript> alert('已发货的订单不可以删除!');history.go(-1);</script>"
response.end
else
if(cint(request("id")) <> "") then id = cint(request("id"))
set rs = server.createobject("adodb.recordset")
user_id4 = cint(request("id"))
sql="DELETE * FROM shuaiweb_buy WHERE id= "&user_id4&""
rs.open sql,dbok,3,2
rs.update
rs.close
set rs=nothing
response.write "<script language=javascript> alert('成功删除!');location.replace('user_buy.asp');</script>"
End If
end if


这列也是直接获取id,然后删除id对应的订单
导致越权删除任意用户订单信息了。

漏洞证明:

先来看看用户id=5的初始信息,登陆密码为222222

777.png


然后登陆攻击者账户,修改id=5的用户的信息及密码:

888.png


最后登陆id=5的用户时,用户名和密码已经被修改了

999.png


另一处修改订单同样,只要发送删除订单请求,修改id即可删除此id的订单了。

修复方案:

修改删除用户信息是,判断用户属性

版权声明:转载请注明来源 xfkxfk@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2014-08-27 17:47

厂商回复:

以经在新版本中修复

最新状态:

暂无