5UCMS 版本 <= v1.2.2024 又一SQL注入分析

2011年12月26日星期一 | | |

发布日期:2011-03.10
发布作者:asmc

影响版本:5UCMS <= v1.2.2024
官方网站:http://www.5u.hk

漏洞类型:SQL注射漏洞

详细说明:
最近在测试一个网站时,提交/admin/,浏览器闪现了"无忧网络管理系统",GOOGLE搜索下载了一份最新版的源代码,发现问题如下:

文件..pluscommentsave.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(),搜索该函数如下:

文件..incfunction.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 为空

漏洞证明:
测试:EXP
(access 数据库)http://www.2cto.com/plus/comment/save.asp?user=test&content=aaaaaa&id=1 and 0<>(select count(*) from 5U_Admin)

参考: 网络

0 评论:


所有文章收集于网络,如果有牵扯到版权问题请与本站站长联系。谢谢合作![email protected]