### 简要描述:
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
[<img src="https://images.seebug.org/upload/201408/271616142143e214ce3d7a552e11a3236ad15274.png" alt="777.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201408/271616142143e214ce3d7a552e11a3236ad15274.png)
然后登陆攻击者账户,修改id=5的用户的信息及密码:
[<img src="https://images.seebug.org/upload/201408/271616469f73cd0fffaac182d8922b30a8931d0c.png" alt="888.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201408/271616469f73cd0fffaac182d8922b30a8931d0c.png)
最后登陆id=5的用户时,用户名和密码已经被修改了
[<img src="https://images.seebug.org/upload/201408/271617169f38a0990fb9fb7b148b67f4a9f5ec99.png" alt="999.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201408/271617169f38a0990fb9fb7b148b67f4a9f5ec99.png)
另一处修改订单同样,只要发送删除订单请求,修改id即可删除此id的订单了。
暂无评论