本篇文章是MSSQL数据库漏洞提权复现记录,记录了实际中常见的MSSQL数据库漏洞并如何利用,对漏洞底层的原理简单分析,主要分为五个部分:MSSQL简介、MSSQL各版本安装、MSSQL基本操作、MSSQL漏洞复现提权和自建内网环境实战。
本篇文章由浅入深地介绍了系统存储过程控制不当导致提权如sp_oacreate和sp_oamethod、扩展存储过程使用不当提权如xp_cmdshell和xp_regwrite、沙盒提权及映像劫持。在学习MSSQL过程中也阅读了几十篇中英文MSSQL相关技术文章,最终按照作者我的思路进行总结,相关参考文章也在文中有列出。此外,文中可能会出现部分错误,望读者指出,谢谢。接着,开始我们的MSSQL数据库渗透学习!!
一、MSSQL简介MSSQL(MicroSoftSQLServer数据库),是微软开发的关系型数据库管理系统DBMS,是一个较大型的数据库,提供数据库的从服务器到终端的完整的解决方案,数据库管理系统SSMS(SQLServerManagermentStudio),是一个用于建立、使用和维护数据库的集成开发环境。端口号:
SA用户在搭建时,选择使用SQLServer身份验证会创建SA账户并设置密码,SA(SystemAdministrator)表示系统管理员,在SQLServer之前的SA用户都是系统最高权限用户SYSTEM,但在版本时为普通数据库用户mssqlserver,是一个低权用户。
MSSQL权限级别sa权限:数据库操作,文件管理,命令执行,注册表读取等价于system,SQLServer数据库的最高权限
db权限:文件管理,数据库操作等价于users-administrators
public权限:数据库操作等价于guest-users
存储过程MSSQL的存储过程是一个可编程的函数,它在数据库中创建并保存,是使用T_SQL编写的代码段,目的在于能够方便的从系统表中查询信息。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式,使用execute命令执行存储过程。(可以将存储过程理解为函数调用的过程)
简单来说,存储过程就是一条或者多条sql语句的集合,可视为批处理文件
存储过程可分为三类:系统存储过程:主要存储在master数据库中,以”sp_“为前缀,在任何数据库中都可以调用,在调用的时候不必在存储过程前加上数据库名扩展存储过程:是对动态链接库(DLL)函数的调用,主要是用于客户端与服务器端或客户端之间进行通信的,以“xp**_“为前缀,使用方法与系统存储过程类似用户定义的存储过程:**是SQLServer的使用者编写的存储过程
系统数据库系统数据库默认创建时就会存在,有以下4种
数据库名含义mastermaster数据库控制SQLserver数据库所有方面。这个数据库中包括了所有的配置信息、用户登录信息、当前正在服务器中运行的过程的信息等。modelmodel数据库是建立所有用户数据库时的模版。新建数据库时,SQLserver会把model数据库中的所有对象建立一份拷贝并移到新数据库中。在模版对象被拷贝到新的用户数据库中之后,该数据库的所有多余空间都将被空页填满。msdbmsdb数据库是SQLserver数据库中的特例,若想查看此数据库的实际定义,会发现它其实是一个用户数据库。所有的任务调度、报警、操作员都存储在msdb数据库中。该库的另一个功能是用来存储所有备份历史。SQLserveragent将会使用这个库。tempdb据库是一个非常特殊的数据库,供所有来访问你的SQLServer的用户使用。这个库用来保存所有的临时表、存储过程和其他SQLServer建立的临时用的东西。例如,排序时要用到tempdb数据库。数据被放进tempdb数据库,排完序后再把结果返回给用户。每次SQLServer重新启动,它都会清空tempdb数据库并重建。永远不要在tempdb数据库建立需要永久保存的表。MSSQL注入MSSQL注入与普通的MYSQL注入类似,但在数据结构特定函数名称上有些差异。而使用经过语法扩展的T-SQL语句,在实现更为复杂的业务的同时,也带来了安全上的危险。因此MSSQL在后续提权部分,与MYSQL有着较大的差异。由于该数据库与Windows平台的高契合度,使其可以使用Windows身份验证(或SA管理员账号),这就导致其运行权限较高。因此,若后续权限没有限制准确,WEB代码又存在SQL注入时,就会给整个服务器的安全带来严重威胁,其后果一般比Mysql被攻破要严重。
二、软件安装及环境搭建1、MSSQL安装Win+MSSQL
下载