专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »安全 » sql注入:URL编码和SQL注入 »正文

sql注入:URL编码和SQL注入

来源: 发布时间:星期六, 2009年9月12日 浏览:0次 评论:0
说到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还是出现只是无值任何特殊(就是那些不是简单 7位ASCII如汉字)将以百分符%用十 6进制编码当然也包括象 =, &, 和 % 这些特殊


呵呵明白了吧其实url编码就是ascii码十 6进制不过稍微有些变动需要在前面加上“%”比如“\”ascii码是9292十 6进制是5c所以“\”url编码就是\那么汉字url编码呢?很简单看例子:“胡”ascii码是-17670十 6进制是BAFAurl编码是“%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))
          _disibledevent=>                     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就可以了

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



  • 篇文章: Visual C实现WinXP关机特效

  • 篇文章: asp中自定义文件下载
  • 0

    相关文章

    读者评论

    发表评论

    • 昵称:
    • 内容: