设为首页 收藏本站 English

当前位置: 都江堰体育网 >> 德甲

编码与注射

发布时间:2021-09-06 04:29:51

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

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

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

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

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

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

Fy_Url=rverVariables(\"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

ite \"出现错误!\"

d

End If

End If

Next

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

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

它的name/value组值来自于rverVariables(\"QUERY_STRING\"),呵呵,不好意思,这里出问题了。rverVariables(\"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 eryString就可以了。

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

兰州前列腺炎哪家好
江中黄芪生脉饮去哪里可以买到
驻马店治疗白癜风医院费用
友情链接