突破防注入的实验
今天因为要测试一个自己写的一个代码。就自己搭建了一个最简单的有注入漏洞的网页。
程序有javascript。在火狐的firebug里可以直接注入。
主要是为了方便修改sql注入语句才写的。
传统的工具,没有办法修改其中的代码。
网上有个vbs注入程序,很好,但是下载下来有错,我修改了一下,可以运行了。
但是在有session限制的情况下,没有办法利用。
所有就想到了火狐的firebug。利用javascript在当前网页自动注入。
代码很粗糙,测试了一下还可以。
然后就装上了SQL通用防注入系统,neeao的3.1最终纪念版。
发现里面过滤了很多的东西。连%这个网上流传的可以突破防注入的符号也给禁止了。
感觉真是很麻烦。
暂时没有想到好方法,只好利用了or注入方法才绕过。
不知道还有没有其他的思路。
我们是否可以用什么方法绕过SQL注入的限制呢?到网上考察了一下,提到的方法大多都是针对AND与"'"号和"="号过滤的突破,虽然有点进步
的地方,但还是有一些关键字没有绕过,由于我不常入侵网站所以也不敢对上述过滤的效果进行评论,但是可以肯定的是,效果不会很好......
经过我的收集,大部分的防注入程序都过滤了以下关键字:
and|select|update|chr|delete|%20from|;|insert|mid|
master.|set|=
而这里最难处理的就是select这个关键字了,那么我们怎样来突破他们呢?问题虽未完全解决,但还是说出来与大家分享一下,希望能抛砖引玉。
对于关键字的过滤,以下是我收集的以及我个人的一些想法。
1、运用编码技术绕过
如URLEncode编码,ASCII编码绕过。例如or1=1即%6f%72%20%31%3d%31,而Test也可以为
CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。
2、通过空格绕过
如两个空格代替一个空格,用Tab代替空格等,或者删除所有空格,如or'swords'='swords',由于mssql的松散性,我们可以把or'swords'之间的空格去掉,并不影响运行。
3、运用字符串判断代替
用经典的or1=1判断绕过,如or'swords'='swords',这个方法就是网上在讨论的。
4、通过类型转换修饰符N绕过
可以说这是一个不错的想法,他除了能在某种程度上绕过限制,而且还有别的作用,大家自己好好想想吧。关于利用,如or'swords'=N'swords',大写的N告诉mssqlserver字符串作为nvarchar类型,它起到类型转换的作用,并不影响注射语句本身,但是可以避过基于知识的模式匹配IDS。
5、通过+号拆解字符串绕过效果值得考证,但毕竟是一种方法。如or'swords'='sw'+'ords';EXEC('IN'+'SERTINTO
'+'.....')
6、通过LIKE绕过
以前怎么就没想到呢?如or'swords'LIKE'sw'!!!显然可以很轻松的绕过"="">"的限制......
7、通过IN绕过
与上面的LIKE的思路差不多,如or'swords'IN('s 《突破防注入的实验》
本文链接地址:http://www.oyaya.net/fanwen/view/141415.html
程序有javascript。在火狐的firebug里可以直接注入。
主要是为了方便修改sql注入语句才写的。
传统的工具,没有办法修改其中的代码。
网上有个vbs注入程序,很好,但是下载下来有错,我修改了一下,可以运行了。
但是在有session限制的情况下,没有办法利用。
所有就想到了火狐的firebug。利用javascript在当前网页自动注入。
代码很粗糙,测试了一下还可以。
然后就装上了SQL通用防注入系统,neeao的3.1最终纪念版。
发现里面过滤了很多的东西。连%这个网上流传的可以突破防注入的符号也给禁止了。
感觉真是很麻烦。
暂时没有想到好方法,只好利用了or注入方法才绕过。
不知道还有没有其他的思路。
我们是否可以用什么方法绕过SQL注入的限制呢?到网上考察了一下,提到的方法大多都是针对AND与"'"号和"="号过滤的突破,虽然有点进步
的地方,但还是有一些关键字没有绕过,由于我不常入侵网站所以也不敢对上述过滤的效果进行评论,但是可以肯定的是,效果不会很好......
经过我的收集,大部分的防注入程序都过滤了以下关键字:
and|select|update|chr|delete|%20from|;|insert|mid|
master.|set|=
而这里最难处理的就是select这个关键字了,那么我们怎样来突破他们呢?问题虽未完全解决,但还是说出来与大家分享一下,希望能抛砖引玉。
对于关键字的过滤,以下是我收集的以及我个人的一些想法。
1、运用编码技术绕过
如URLEncode编码,ASCII编码绕过。例如or1=1即%6f%72%20%31%3d%31,而Test也可以为
CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。
2、通过空格绕过
如两个空格代替一个空格,用Tab代替空格等,或者删除所有空格,如or'swords'='swords',由于mssql的松散性,我们可以把or'swords'之间的空格去掉,并不影响运行。
3、运用字符串判断代替
用经典的or1=1判断绕过,如or'swords'='swords',这个方法就是网上在讨论的。
4、通过类型转换修饰符N绕过
可以说这是一个不错的想法,他除了能在某种程度上绕过限制,而且还有别的作用,大家自己好好想想吧。关于利用,如or'swords'=N'swords',大写的N告诉mssqlserver字符串作为nvarchar类型,它起到类型转换的作用,并不影响注射语句本身,但是可以避过基于知识的模式匹配IDS。
5、通过+号拆解字符串绕过效果值得考证,但毕竟是一种方法。如or'swords'='sw'+'ords';EXEC('IN'+'SERTINTO
'+'.....')
6、通过LIKE绕过
以前怎么就没想到呢?如or'swords'LIKE'sw'!!!显然可以很轻松的绕过"="">"的限制......
7、通过IN绕过
与上面的LIKE的思路差不多,如or'swords'IN('s 《突破防注入的实验》