文件名称中包含Admin的就不需要再看了,因为我们是不可能在普通用户的情况下访问到这些文件的。双击Bank.asp中的一个搜索结果在编辑窗口中可以看到类似下面代码
在这个过程中使用int方法进行了数据转换,同时使用Recordset字段赋值后保存数据的方法,是不可能会产生漏洞的。实际上这两个方法中只要使用了其中一个也都是无法注入的,因此可以将类似的客户端数据使用方法忽略。
以下是代码片段:
qmoney=int(Request("qmoney"))
if qmoney 〉 Rs("UserMoney") then error("〈li〉您的现金没有这么多吧!")
if qmoney〈1 then error("〈li〉存款不能为零!")
Rs("savemoney")=Rs("savemoney")+qmoney+accrual
Rs("UserMoney")=Rs("UserMoney")-qmoney
Rs("SaveMoneyTime")=now()
Rs.update
Rs.close
双击Friends.asp文件中的搜索结果可以找到如下代码:
从查询语句上可以看出:如果UserName变量中如果包含单引号的话将会产生字符型注入漏洞。而在UserName从客户端获取到拼接到查询语句的过程中使用HTMLEncode方法进行了过滤,这个方法实现的逻辑如下面的代码:
以下是代码片段:
incept=HTMLEncode(Request("incept"))
UserName=HTMLEncode(Request("UserName"))
sub add
if UserName="" then error2("请输入您要添加的好友名字!")
if UserName=CookieUserName then error2("不能添加自己!")
If Conn.Execute("Select id From [BBSXP_Users] where UserName=’"&UserName&"’" ).eof Then error2("数据库不存在此用户的资料!")
| 以下是代码片段: function HTMLEncode(fString) fString=Replace(fString,";",";") fString=Replace(fString,"〈","<") fString=Replace(fString,"〉",">") fString=Replace(fString,"\","\") fString=Replace(fString,"--","--") fString=Replace(fString,CHR(9)," ") fString=Replace(fString,CHR(10),"〈br〉") fString=Replace(fString,CHR(13),"") fString=Replace(fString,CHR(22),"") fString=Replace(fString,CHR(32)," ") fString=Replace(fString,CHR(34),""")’双引号 fString=Replace(fString,CHR(39),"'")’单引号 fString=ReplaceText(fString,"&#([0-9]*);","&#$1;") ’解决韩文字符问题 if IsSqlDataBase=0 then ’过滤片假名(日文字符)[\u30A0-\u30FF] by yuzi首创 fString=escape(fString) fString=ReplaceText(fString,"%u30([A-F][0-F])","0$1;") fString=unescape(fString) end if HTMLEncode=fString end function |
我们关注的这个方法中显然已经过滤了单引号,因此也就不会产生字符型注入漏洞了。继续向下看搜索结果的时候,如果看到类似可能会造成字符型漏洞的查询语句中的变量使用
HTMLEncode方法过滤,那同样也可以忽略了。