知识简介
SQL Server数据库是由Microsoft开发和推广的关系数据库管理系统(DBMS),是一个比较大型的数据库
端口号为 1433。数据库后缀名 .mdf。注释符是 — 。延时命令:WAITFOR DELAY ‘0:0:2’
2008版本之前是system权限,以后就不是了
语句分析
select * from master.dbo.sysobjects where xtype = ‘u’;
对象名的有效格式是:server.database.owner.object,**当引用某个特定对象时,可以省略中间级节点
sysobjects 是系统的视图,每个数据库都有,该表**存放该数据库内创建的所有对象,每个对象在表中占一行**
此系统表中对我们有用的只有3个字段,NAME、**XTYPE、**ID
name:表名信息 | xtype:表的类型—->S代表系统自带表,U代用**表**户创建的表
id字段的值用来连接syscolumns表,syscolumns存储了所有列名,名称用name字段表示
**
top n关键字
由于MSSQL中不存在Limit,那么想要输出一条数据怎么办呢,直接top 1,输出两条数据top 2
输出第二条数据:top 1+限制条件
获取值都要用top n关键字,后面跟列名
3个权限级别
sa权限 数据库操作,文件管理,命令执行,注册表读取等system。SQLServer数据库的最高权限
db权限 文件管理,数据库操作等权限 users-administrators
public权限 数据库操作 guest-users
判断当前用户权限
判断是否是SA权限
select is_srvrolemember('sysadmin')
判断是否是db_owner权限
select is_srvrolemember('db_owner')
判断是否是public权限
select is_srvrolemember('public')
6个默认数据库
4个系统数据库:**master、model、msdb、tempdb(model 和 tempdb 默认是没有数据表的**)
2个实例数据库:ReportServer、ReportServerTempDB
但是如果用navicat远程连接的话,只会显示2个实例数据库:**ReportServer、ReportServerTempDB
**
Union注入
靶机:172.16.90.125
访问http://172.16.90.125:81/Index.aspx?id=1
判断数据库、注入类型、权限
and 1=1 正常
and 1=2 报错
所以是数字型注入
因为网站使用的是aspx脚本,初步判断网站使用的是Mssql或者Oracle数据库,需进一步判断
http://172.16.90.125:81/Index.aspx?id=1 and exists (select from sysobjects)返回正确页面
说明此数据库存在sysobjects表,*sysobjects是mssql数据库系统表,判断此数据库为mssql数据库
再来判断下权限,ok,最高权限
判断字段数
order by** 判断当前表的字段数**
判断显示位
union select联合查询语句获取字符型输入位
这里要采用null的方式来占位,因为mssql数据库是个强类型的数据库,对数据格式比较严格
**
获取库名
方法1
db_name(n),表示获取第n个数据库名称
经测试有7个数据库
**
方法2
第一个用户数据库的名称
dbid>4原因:前4个都是系统自带库
获取第二个用户数据库名称
<>表示不等于,在dbid>4前提下,不等于第一个用户数据库,那就是第二个数据库了
也可以直接dbid>5**,获取第二个用户数据库名称
获取表名
select top n 列名 sysobjects where xtype=’u’ | 爆表名用sysobjects
获取列名
必须要知道表的id值 | 1:通过select语句 2:通过函数
方法1
通过id连接表,在获取表中字段
1.1 先获取id,在获取字段
方法2
col_name()+object_id()**函数**遍历admin表中的所有字段名
col_name(‘表名’,n) 获取指定表中的列名,n表示取第几个字段
object_id(‘表名’) 获取表的id值
获取数据
报错注入
方法1
方法2
XP_cmdshell 连接3389
xp_cmdshell默认在mssql_2000中是开启的,在mssql_2005之后的版本中默认禁止
如果用户拥有sa权限,则可以用sp_configure重新开启它
开启 xp_cmdshell:
exec sp_configure 'show advanced options', 1;reconfigure;
exec sp_configure 'xp_cmdshell',1;reconfigure;
关闭 xp_cmdshell:
exec sp_configure 'show advanced options', 1;reconfigure;
exec sp_configure 'xp_cmdshell', 0;reconfigure
上面已经测试过了为sa权限,这里就直接看看靶机上有没有开启xp_cmdshell,ok!!!
直接执行命令提权
去靶机上看看有没有该用户,有的!!!
直接加入管理员,远程连接3389
实例
挖某个edu的时候,遇到的
当时就在后面加了个and 1=convert(int,db_name()),直接就报错出来了 。。。
后面就直接用sqlmap,嘿嘿