首页 >> 攻击入侵解答
简单防数据库注入(2)
发布时间:2011-8-12 14:03:16 被阅览数:23441次 来源:厦门凌众科技有限公司
【SQL注入漏洞简单防范】
现在网络上比较流行的SQL注入工具的工作方式是通过GET和POST来完成具体的注入的,如果我们将注入时所用到的一些特殊符号过滤掉,那注入工具就没用了,从而达到了防注入的目的。比如针对GET提交方式进行注入的防范代码如下:
以下是引用片段:
dim sql_injdata SQL_inj SQL_Get
SQL_injdata = "’|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare" SQL_inj = split(SQL_Injdata,"|") If Request.QueryString<>"" Then For Each SQL_Get In Request.QueryString For SQL_Data=0 To Ubound(SQL_inj) if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then Response.Write " " Response.end end if next Next End If |
同样,POST的也要检测,注意这里很灵活的,只要把与注入有关的关键词写到SQL_injdata里再用”|”隔开就可以了。许多朋友甚至不会写代码怎么办,别急,有通用的防注入程序啦。这里笔者将为你介绍通用防注入程序是由火狐技术联盟枫知秋[F.S.T]所写的通用防注入程序2.0完美版,还是拿雨点下载系统的list.asp做例子,在此文件的页面头部用 调用即可。我们再手工测试下其注入漏洞:
在后面加一个‘测试出现如下画面,见图3:
点确定后返回如下信息,见图4:
如果要查看相关攻击信息的话,可以去看数据库里的记录,如图5:
够详细了吧,记录了攻击的IP,受攻击的页面以及传递的参数,攻击的方式分为Get与Post,还记录了攻击的时间与攻击的具体内容。管理员看到这些信息能做什么,不用我多说,你怕了吧!当然本着对读者负责的态度笔者说下并不是有了一个通用防注入程序就没事了,因为Cookies也可以传递参数的,另外从产生漏洞的根源来说还是要过渗变量,对于数字型的变量用IsNumeric()判断一下就好,对于字符型的过滤一下单引号使构造注入语句的时候单引号无法闭合就可以了,下面给两个函数给大家参考:
以下是引用片段:
’ ============================================
’ 判断是否是数字,否则用默认值替换 ’ iCheck 要替换的变量,iDefault 默认值 ’ ============================================ Function GetSafeInt(iCheck,iDefault) If Trim(iCheck)="" Then GetSafeInt = iDefault Exit Function End If If IsNumeric(iCheck)=false Then GetSafeInt = iDefault Exit Function End If GetSafeInt = iCheck End Function ’ ============================================ ’ 得到安全字符串,在查询中或有必要强行替换的表单中使用 ’ str 要替换的字符串 ’ ============================================ Function GetSafeStr(str) ’ GetSafeStr = Replace(Replace(Replace(Trim(str), "’", ""), Chr(34), ""), ";", "") GetSafeStr = Replace(Replace(Replace(Replace(Replace(str,"’","‘"),"""","“"),"&",""),"<","<"),">",">") End Function |
再说点与程序无关的吧。因为现在各大网站或多或少是用别人的代码拼起来的,所以一旦原程序出现漏洞,那么这个网站也会跟着受害。在此,所以建议网站管理员不要拿起别人的程序就用,如果你实在不会写ASP,你总会改数据库的结构吧,实在不会写你总会设IIS让其不报错吧。这里再说两种防止ASP页面暴出错误信息的方法:
方法1:打开你的IIS管理器(以IIS6.0为例),选择你的网站=》属性页面=》主目录选项卡=》点击配置按钮=》调试选项卡=》向客户端发送下列文本错误消息
这样,即使入侵者找到了注入点,注入后,得到也只是服务器返回的固定的错误消息。不能得到任何有价值的错误信息。
方法2:在你的ASP语句中(一般是在最开头的地方),加上一句
On Error Resume Next
(注意,这句必须加在里面,不然IIS可不认。)
这就是著名的容错语句,当ASP语句执行时发生错误,就跳过错误,继续向下执行,而且不会返回错误信息。(当然写程序的时候就不要加了哦,方便我们自己找错嘛。)
业务联系QQ:173723134