漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2011-01513
漏洞标题:5UCMS <= v1.2.2024 SQL注入
相关厂商:无忧网络
漏洞作者: asmc
提交时间:2011-03-06 17:14
修复时间:2011-03-06 19:58
公开时间:2011-03-06 19:58
漏洞类型:SQL注射漏洞
危害等级:高
自评Rank:20
漏洞状态:未联系到厂商或者厂商积极忽略
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2011-03-06: 积极联系厂商并且等待厂商认领中,细节不对外公开
2011-03-06: 厂商已经主动忽略漏洞,细节向公众公开
简要描述:
5UCMS<=v1.2.2024 注入
详细说明:
最近在测试一个网站时,提交/admin/,浏览器闪现了"无忧网络管理系统",GOOGLE搜索下载了一份最新版的源代码,发现问题如下:
文件..\plus\comment\save.asp
23行:Dim Comment_Aid,Comment_User,Comment_Content
24行:Comment_Aid = Request("id")
此外部提交的id值会被插入SQL语句中如下:
55行:Set Ns = DB("Select [ID],[Cid],[Comments],[IsComment] From [{pre}Content] Where [ID]=" & Comment_Aid,3)
24到55行之间开发人员加了伪过滤代码如下:
44行:if Len(Comment_Aid) = 0 Or Not IsNumeric(Comment_Aid) Then Call Alert(Plus.Lang("iderr"),Gourl)
45I行:f Len(Comment_User) < 2 Then Comment_User = "Guest"
46行:If Len(Comment_Content) < Plus.Config("contentmin") Then Call Alert(replace(Plus.Lang("contentmin"),"$1",Plus.Config("contentmin")),Gourl)
44行的要求是id必须有值,且必须是数字型,否则将会调用Alert(),搜索该函数如下:
文件..\inc\function.asp
193行: function Alert(byval Msgstr,byval Url)
if len(Url) > 0 then
on error resume next
if Isobject(conn) then conn.close ' 关闭数据库链接
if len(Msgstr) > 0 then response.write "<Script>alert('" & Msgstr & "');</Script>" ' 提示
response.write "<Script>location.href='" & Url & "';</Script>" ' 跳转
response.end
else
if len(Msgstr) > 0 then response.write "<Script>alert('" & Msgstr & "');</Script>" ' 提示
end if
end function
该函数里是一个嵌套的if结构,如果Url为空,那么执行else之后的代码:
if len(Msgstr) > 0 then response.write "<Script>alert('" & Msgstr & "');</Script>" ' 提示
此语句仅仅打印了错误信息,并没有执行response.end,所以导致Alert()对id的数据类型检测失败,,,最终导致了SQL注入的发生
那么Url这个关键的跳转变量怎么来的呢,回去看save.asp文件
9行:Dim Gourl : Gourl = Request.ServerVariables("HTTP_REFERER")
这个就是罪魁祸首了,以下内容摘自网络:
“asp中Request.ServerVariables("HTTP_REFERER")可以取得来源地址。
以下情况可以取得值:
1.直接用<a href>
2.用Submit或<input type=image>提交的表单(POST or GET)
3.使用Jscript提交的表单(POST or GET)
以下情况不能取得值:
1.从收藏夹链接
2.单击'主页'或者自定义的地址
3.利用Jscript的location.href or location.replace()
4.在浏览器直接输入地址
5.<%Response.Redirect%>
6.<%Response.AddHeader%>或<meta http-equiv=refresh>转向
7.用XML加载地址 ”
在上面不可取值的第4条中,说明了,直接构造的该访问路径,使得Gourl 为空
漏洞证明:
测试:
(access 数据库)http://www.xxxx.com/plus/comment/save.asp?user=test&content=aaaaaa&id=1 and 0<>(select count(*) from 5U_Admin)
修复方案:
版权声明:转载请注明来源 asmc@乌云
漏洞回应
厂商回应:
未能联系到厂商或者厂商积极拒绝
漏洞Rank:6 (WooYun评价)