asp注入漏洞浅析

稿件来源: 阳光企业网站管理系统   撰稿作者: 太阳光   发表日期: 2011-12-19   阅读次数: 94   查看权限: 游客查看

asp注入漏洞浅析

注意如果你的ASP没有接收参数或者是静态页是不存在注入漏洞的,我们先来看一下存在注入漏洞的代码:

<%
Sql="Select * From [news] id="&request("id")
......
%>

 首先request("id")就是一个不严格的代码,应该指定是QueryString还是form。假如用户在地址样里输入index.asp?id=1 or 1=1 那么整条SQL就会出现如下情形:

<%
Sql="Select * From [news] id=1 or 1=1"
......
%>

 这就是漏洞的情况之一。针对这种情况网上流行一种防注入的代码,当初非常激动,也拿来修改并使用,以下就是经过我修改并在使用中的代码:

<%
'==================
'功能:防注入功能
'==================
Sub Scs_sqlin(values,GetWay)
Dim Scs_In,Scs_Inf,Scs_Xh,Scs_sent,s_Ip
s_Ip=scscms.get_Ip
'自定义需要过滤的字串,用 "|" 分隔
Scs_In = "'|and|=|exec|insert|select|delete|update|chr|mid|truncate|char|declare"
Scs_Inf = split(Scs_In,"|")
 For Each Scs_sent In values
  For Scs_Xh=0 To Ubound(Scs_Inf)
    If Instr(LCase(values(Scs_sent)),Scs_Inf(Scs_Xh))<>0 Then
      Sql="Select * From [Scs_Sqlin] Where Sqlin_IP='"&s_Ip&"'"
      Set Rs=Server.Createobject("adodb.recordset")
      Rs.open Sql,Conn,1,3
		If Rs.Eof Then
			Rs.AddNew
			Rs("Sqlin_IP")=s_IP
		Else
			Rs("sqlin_count")=Rs("sqlin_count").value+1
		End If
			Rs("Sqlin_Web")=Request.ServerVariables("URL")
			Rs("Sqlin_FS")=GetWay
			Rs("Sqlin_TIME")=Now()
			Rs("Sqlin_CS")=Scs_sent
			Rs("Sqlin_SJ")=values(Scs_sent)
			Rs("Kill_ip")=1
			Rs.Update
			Rs.Close:Set Rs=Nothing
      		Response.Write "<Script Language='JavaScript'>alert('防注入系统提示你:\n请不要在参数中包含非法字符。');</Script>"
		Response.Write "非法操作!系统做了如下记录↓<br>"
		Response.Write "操作IP:"&s_IP&"<br>"
		Response.Write "操作时间:"&Now&"<br>"
		Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br>"
		Response.Write "提交方式:"&GetWay&"<br>"
		Response.Write "提交参数:"&Scs_sent&"<br>"
		Response.Write "提交数据:"&values(Scs_sent)
      Response.End
    End If
  Next
 Next
End Sub
Call Scs_sqlin(Request.QueryString,"Get")
%>

原理是检查所有链接参数,发现有违法参数时写入数据库提示警告并中断代码执行。在我使用飞腾CMS时发现拦截了很多注入信息,觉得还挺有效果的。但自从我开发了SCSCMS系统并添加了此代码进去后,快一年了一条记录也没有!后来想了想原来我们根本不用这么去防这种注入。
第一:生成静态页,没有传参数可言也就没有注入的漏洞。
第二:不用这么累去检查所有参数,我们只要检查需要用到的参数即可。
比如别人提交连接:index.asp?id=1&a=xx&b=xx&c=xx
而我们的index.asp只需要id参数,那么a,b,c参数就是没用的参数,你再使用以上函数去检查它就是劳民伤财毫无意义。
所以我们更改一下代码:

<%
'==================================
'=函 数 名:checksql(f_name,f_v,f_i,f_n,f_m,ajax)
'=功    能:数据检测过滤函数
'=使用说明:name-参数名(用于错误显示);f_v-参数值(用于判断);f_i-参数类型(1为字符型,0为数字型);f_n-是小位数,0表示不限制,可以为空;f_m-是大位数,0表示不限制; ajax-是否是ajax调用
'==================================
Function checksql(f_name,f_v,f_i,f_n,f_m,f_ajax)
	Dim f_err,f_str
	f_err=""
	f_str=Trim(f_v)
	If f_n>0 And Len(f_str)<f_n Then
		f_err="【"&f_name&"】不能少于"&f_n&"个字符"
	End If
	If f_m>0 And Len(f_str)>f_m Then
		f_err="【"&f_name&"】不能多于"&f_m&"个字符"
	End If
	If f_i=0 Then
		If Not IsNumeric(f_str) Then
			f_err="【"&f_name&"】不是数字型!"
		End If
	Else
		If f_str<>"" And (f_m<>0 and f_m<50) Then
			f_str=Replace(f_str,chr(34),"")
			Dim f_arr,f_ii
			f_arr=split(">|<|%|$|*|=|'","|")
			For f_ii= 0 To Ubound(f_arr)
				If Instr(f_str,f_arr(f_ii))<>0 Then 
					f_err="【"&f_name&"】中含有[\"&f_arr(f_ii)&"]非法字符!"
					Exit For
				End If 
			Next
		End If
	End If

If f_err<>"" Then
	If f_ajax="ajax" Then
		Response.Write f_err
	Else
		Response.Write "<script>window.alert("""&f_err&""");window.history.back();</script>"
	End If
		Response.End
Else 
	checksql=f_str
End If
End Function

dim id
id=CheckSql("新闻ID",Request.QueryString("id"),0,1,4,"")
Sql="Select * From [news] id="&id
....
%>

其实Request.QueryString过来的参数无非就是数字与字符串,而字符串一般过滤一些标点、符号与空格即可!

关键词: asp注入,漏洞   编辑时间: 2011-12-19

  • 感到高兴

    0

    高兴
  • 感到支持

    0

    支持
  • 感到搞笑

    0

    搞笑
  • 感到不解

    0

    不解
  • 感到谎言

    0

    谎言
  • 感到枪稿

    0

    枪稿
  • 感到震惊

    0

    震惊
  • 感到无奈

    0

    无奈
  • 感到无聊

    0

    无聊
  • 感到反对

    0

    反对
  • 感到愤怒

    0

    愤怒
0%(0)
0%(0)
共有0 条评论 发言请遵守【相关规定

网友评论

会员头像
发 表同步腾讯微博  匿名评论  验证码:  点击更新
  • 暂无评论
关闭模块文章图片 article Pictrue
  • 基于koa2+mysql+vue2.0+Element阳光内容管理系统
  • 代码覆盖率工具 Istanbul 入门教程
  • 全栈工程师的武器——MEAN
  • 9款超炫的 CSS3 复选框(Checkbox)
  • 微信开发在线翻译功能
  • CSS3那些不为人知的高级属性
  • 给easyui的datebox添加清空事件
  • flash写字效果
  • kendoUI系列教程之DropDownList下拉菜单
  • kendoUI系列教程之datetimepicker日期时间选择
  • kendoUI系列教程之datepicker日期选择
  • kendoUI系列教程之combobox下拉列表框
  • kendoUI系列教程之colorpicker
  • kendoUI系列教程之calendar日历表
  • kendoUI系列教程之autocomplete自动补齐
  • kendo ui简介