SQL Server从0到1——绕过

垃圾数据

注释:

单行注释:利用单行注释将多行注释注释掉然后利用换行符换行 
多行注释: /*xxxx*/,xxxx可以是符合数字和字符(这非常关键),但没有mysql中的/*!xx*/这种用法

单行:

select --/*
'naihe567'
--*/

 SQL Server从0到1——绕过_第1张图片

但在web传参时需要进行url编码:

select --/*%0a'naihe567'%0a--*/

多行:

SQL Server从0到1——绕过_第2张图片

这里是mssql的

SQL Server从0到1——绕过_第3张图片

下面是mysql的

SQL Server从0到1——绕过_第4张图片

运算符:运算符一般是配合报错注入使用

select * from test.dbo.users where ++++-+-~~1=(select user)
#原理是使用特殊运算只会改变值并不会改变数据类型,-+^*|&都可以使用

 SQL Server从0到1——绕过_第5张图片

编码

编码主要是利用十六进制和ascii码 users表内容如下:

SQL Server从0到1——绕过_第6张图片

十六进制:

select * from test.dbo.users where username=0x44756d6d79
Dummy的十六进制为0x44756d6d79

 SQL Server从0到1——绕过_第7张图片

ascii码:

select * from test.dbo.users where username =  char(100)+char(117)+char(109)+char(109)+CHAR(121)
#使用char函数

 SQL Server从0到1——绕过_第8张图片

回调

使用declear与exec函数 declear会创建一个局部变量,在使用exec执行变量中的内容

declare @s varchar(2000) set @s=0x73656c656374206e61696865353637  exec(@s)
#declear与exec其实是属于报错注入范畴,但是它可以将一个完成的sql语句进行编码执行
#0x73656c656374206e61696865353637 解码后就是 select naihe567

SQL Server从0到1——绕过_第9张图片

 

declare @s varchar(2000) set  @s=CHAR(115)+CHAR(101)+CHAR(108)+CHAR(101)+CHAR(99)+CHAR(116)+CHAR(32)+...+CHAR(39) exec(@s)
#ascii也可以

替换

利用其他空白符替换空格:

%20 %09 %0a %0b %0c %0d

利用[],()替换空格:

select(username)from[test].[dbo].[users]

 SQL Server从0到1——绕过_第10张图片

你可能感兴趣的:(web安全,网络,安全,学习,sql)