ASP技巧:URL编码与SQL注入

sql|编码|技巧

  说到url编码,你或许会想起N年前的url编码漏洞。可惜我是“生不逢时”啊,我接触网络时,那个漏洞早就绝迹咯。

  言归正传,URL 编码是什么东东呢?看看我从网上抄的定义:

  引用: url编码是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的name和其中的值 ,将它们以name/value参数编码(移去那些不能传送的字符, 将数据排行等等)作为URL的一部分或者分离地发给服务器。不管哪种情况, 在服务器端的表单输入格式样子象这样:

theName=Ichabod+Crane&gender=male&status=missing&headless=yes

  URL编码遵循下列规则: 每对name/value由&符分开;每对来自表单的name/value由=符分开。如果用 户没有输入值给这个name,那么这个name还是出现,只是无值。任何特殊的字符(就是那些不是简单的七位ASCII,如汉字)将以百分符%用十六进制编码,当然也包括象 =, &, 和 % 这些特殊的字符。

  呵呵,明白了吧,其实url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上“%”。比如“\”,它的ascii码是92,92的十六进制是5c,所以“\”的url编码就是\。那么汉字的url编码呢?很简单,看例子:“胡”的ascii码是-17670,十六进制是BAFA,url编码是“%BA%FA”。呵呵,知道怎么转换的了吧。

  URL编码平时我们是用不到的,因为IE会自动将你输入到地址栏的非数字字母转换为url编码。所以对于浏览器来说http://blog.csdn.net/l%61ke2与http://blog.csdn.net/lake2是等效的(注意,第一个url我用%61替换了a)。呵呵,或许你已经想起了,有人提出数据库名字里带上“#”以防止被下载,因为IE遇到#就会忽略后面的字母。破解方法很简单——用url编码#替换掉#。我本来企图利用url编码来躲过注射检查的,不过失败了,因为服务器端会将url编码转换成字符的。

  等等,好像跑题了啊,呵呵,不好意思:)

  现在SQL注射非常流行,所以就有人写了一些防注射的脚本。当然啦,思路不一样,效果大不同。各位看官请看下面的××SQL通用防注入asp版部分代码。

          Fy_Url=Request.ServerVariables("QUERY_STRING")
          Fy_a=split(Fy_Url,"&")
          redim Fy_Cs(ubound(Fy_a))
          On Error Resume Next
          for Fy_x=0 to ubound(Fy_a)
                     Fy_Cs(Fy_x) = left(Fy_a(Fy_x),instr(Fy_a(Fy_x),"=")-1)
          Next
          For Fy_x=0 to ubound(Fy_Cs)
                    If Fy_Cs(Fy_x)<>"" Then
                           If Instr(LCase(Request(Fy_Cs(Fy_x))),"and")<>0 then
                                  Response.Write "出现错误!"
                                  Response.End
                           End If
                    End If
          Next

  它的思路就是先获得提交的数据,以“&”为分界获得并处理name/value组,然后判断value里是否含有定义的关键字(这里为求简便,我只留下了“and”),有之,则为注射。

  乍一看去,value被检查了,似乎没有问题。呵呵,是的,value不会有问题,可是,name呢?

  它的name/value组值来自于Request.ServerVariables("QUERY_STRING"),呵呵,不好意思,这里出问题了。Request.ServerVariables("QUERY_STRING")是得到客户端提交的字符串,这里并不会自动转换url编码,哈哈,如果我们把name进行url编码再提交的话,呵呵,那就可以绕过检查了。比如参数是ph4nt0m=lake2 and lis0,此时程序能够检测到;如果提交%50h4nt0m=lake2 and lis0(对p进行url编码),程序就会去判断%50h4nt0m的值,而%50h4nt0m会被转换为ph4nt0m,所以%50h4nt0m值为空,于是就绕过了检测。

  等等,为什么既然name不解码可以绕过检查而value就不能绕过呢?因为value的值取自Request(Fy_Cs(Fy_x)),这个服务器就会解码的。

  程序怎么改进呢?只要能够得到客户端提交的数据是解码后的就可以了,把得到name的语句改为For Each SubmitName In Request.QueryString就可以了。

  呵呵,谢谢阁下耐着性子看完我的文章^_^

时间: 2024-09-17 03:11:47

ASP技巧:URL编码与SQL注入的相关文章

浅析白盒审计中的字符编码及SQL注入(1)

尽管现在呼吁所 有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范.但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的一套编码,比如gbk,作为自己默认的编码类型.也有一些cms为了考虑老用户, 所以出了gbk和utf-8两个版本.498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="浅析白盒审计中的

如何解决ASP.net中的刷新按钮问题和URL中的SQL注入问题。

asp.net|按钮|解决|刷新|问题     一直以来,ASP,PHP对处理提交数据时都是传到另一页面处理的,因为本页里处理判断到底是那个按钮得花费大量的精力.这样一来会使得实现一个小小的功能而文件很多,同时好处时不用考虑提交表单或删除数据时的重复提交.    asp.net的推出使得这个问题发生了相反的变化,asp.net的事件和事件委托,程序能够轻松地知道用户是点击了那个按钮,并进行相应的处理.问题就这样了出来了,页面刷新操作是浏览器内部的一种操作,因为浏览器不会为事件或回调发出任何外部通

如何解决ASP.net中的刷新按钮问题和URL中的SQL注入问题

asp.net|按钮|解决|刷新|问题 一直以来,ASP,PHP对处理提交数据时都是传到另一页面处理的,因为本页里处理判断到底是那个按钮得花费大量的精力.这样一来会使得实现一个小小的功能而文件很多,同时好处时不用考虑提交表单或删除数据时的重复提交.    asp.net的推出使得这个问题发生了相反的变化,asp.net的事件和事件委托,程序能够轻松地知道用户是点击了那个按钮,并进行相应的处理.问题就这样了出来了,页面刷新操作是浏览器内部的一种操作,因为浏览器不会为事件或回调发出任何外部通知.程序

asp.net URL编码与解码_实用技巧

例如Url参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc&ie=utf-8.如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和=符号进行转义,也就是对其进行编码. 又如,Url的编码格式采用的是ASCII码,而不是Unicode,这也就是说你不能在Url中包含任何非ASCII字符,例如中文.否则如果客户端浏览器和服务端浏览器支持的字符集不同的情况下,中文可能会造成

技巧和诀窍防范SQL注入攻击_漏洞研究

[原文地址]Tip/Trick: Guard Against SQL Injection Attacks [原文发表日期] Saturday, September 30, 2006 9:11 AM SQL注入攻击是非常令人讨厌的安全漏洞,是所有的web开发人员,不管是什么平台,技术,还是数据层,需要确信他们理解和防止的东西.不幸的是,开发人员往往不集中花点时间在这上面,以至他们的应用,更糟糕的是,他们的客户极其容易受到攻击. Michael Sutton 最近发表了一篇非常发人深省的帖子,讲述在

URL编码与SQL注射

编码|编码 说到url编码,你或许会想起N年前的url编码漏洞.可惜我是"生不逢时"啊,我接触网络时,那个漏洞早就绝迹咯.  言归正传,URL 编码是什么东东呢?看看我从网上抄的定义:  引用: url编码是一种浏览器用来打包表单输入的格式.浏览器从表单中获取所有的name和其中的值 ,将它们以name/value参数编码(移去那些不能传送的字符, 将数据排行等等)作为URL的一部分或者分离地发给服务器.不管哪种情况, 在服务器端的表单输入格式样子象这样:  theName=Ichab

黑客对ASP.Net平台网站发起SQL注入攻击 

安全研究人员近日发现,黑客对微软的ASP.Net平台的网站发起了SQL注入攻击,现在已经有大约18万网页遭到入侵.发现攻击现象的Armorize安全研究员说:"黑客将恶意的Java插件放在ASP网站上导致浏览器通过内嵌框架方式载入黑客设置好的远程网站:www.strongdefenseiz.in 和www.safetosecurity.rr.nu .这个内嵌框架链接的网站尝试对访问者的电脑进行恶意软件植入并对漏洞进行利用,这时候黑客的操作将是非常隐蔽的,用户察觉不到被攻击. 但是黑客使用的漏洞是

ASP实现URL编码_ASP基础

URL编码是指为了将信息通过URL进行传输,所以必须将某些含有特殊意义的字符进行替换的一种编码方式,在asp中我们都知道有一个Server.URLEncode的函数可以完成这个功能.即:  如果有空格就用%20代替,如果有其它字符就用%ASCII代替,如果有汉字等四个字节的字符,就用两个%ASCII来代替.不过有时候我们也需要将经过这种编码的字符串进行解码,但asp并没有提供相关的函数,这给我们处理问题带来了一定的麻烦.其实我们只要知道了编码规则后,就可以用asp代码来实现我们自己的URlDec

ASP实现URL编码

URL编码是指为了将信息通过URL进行传输,所以必须将某些含有特殊意义的字符进行替换的一种编码方式,在asp中我们都知道有一个Server.URLEncode的函数可以完成这个功能.即:  如果有空格就用%20代替,如果有其它字符就用%ASCII代替,如果有汉字等四个字节的字符,就用两个%ASCII来代替.不过有时候我们也需要将经过这种编码的字符串进行解码,但asp并没有提供相关的函数,这给我们处理问题带来了一定的麻烦.其实我们只要知道了编码规则后,就可以用asp代码来实现我们自己的URlDec