MsSQL 学习

基础知识

  • 端口号:1433

  • SA用户:SA(System Administrator)表示系统管理员,在 SQLServer2019 之前的 SA用户 都是系统最高权限用户 SYSTEM,但在2019版本时为普通数据库用户 mssqlserver,是一个低权用户。

  • 权限级别:

    • sa权限:数据库操作,文件管理,命令执行,注册表读取等价于 system(SQLServer 数据库的最高权限)

    • db权限:文件管理,数据库操作等价于 users-administrators

    • public权限:数据库操作等价于 guest-users

  • 存储过程:

    • MSSQL 存储过程是一个可编程的函数,它在数据库中创建并保存,是使用 T_SQL 编写的代码段,目的在于能够方便的从系统表中查询信息。

    • 数据库中的存储过程可以看做是对编程中面向对象方法的模拟。

    • 它允许控制数据的访问方式,使用 execute 命令执行存储过程,可以将存储过程理解为函数调用的过程。

    • 简单来说,存储过程就是一条或者多条 sql 语句的集合,可视为批处理文件

    • 存储过程可分为三类:

      • 系统存储过程:主要存储在 master 数据库中,以 sp_ 为前缀,在任何数据库中都可以调用,在调用的时候不必在存储过程前加上数据库名

      • 扩展存储过程:是对动态链接库(DLL)函数的调用,主要是用于客户端与服务器端或客户端之间进行通信的,以 xp_ 为前缀,使用方法与系统存储过程类似

      • 用户定义的存储过程:是 SQLServer 的使用者编写的存储过程

    • 常见的存储过程:

      xp_cmdshell         # 执行系统命令
      xp_fileexist        # 确定一个文件是否存在
      xp_getfiledetails   # 获得文件详细资料
      xp_dirtree          # 展开你需要了解的目录,获得所有目录深度
      Xp_getnetname       # 获得服务器名称
      
      # 注册表访问的存储过程
      Xp_regwrite
      Xp_regread
      Xp_regdeletekey
      Xp_regaddmultistring
      Xp_regdeletevalue
      Xp_regenumvalues
      Xp_regremovemultistring
      
      # OLE自动存储过程
      Sp_OACreate
      Sp_OADestroy
      Sp_OAGetErrorInfo
      Sp_OAGetProperty
      Sp_OAMethod
      Sp_OASetProperty
      Sp_OAStop  
  • 系统数据库:

    • master:master 数据库控制 SQLserver 数据库所有方面。这个数据库中包括了所有的配置信息、用户登录信息、当前正在服务器中运行的过程的信息等。

    • model:model 数据库是建立所有用户数据库时的模版。新建数据库时,SQLserver 会把 model 数据库中的所有对象建立一份拷贝并移到新数据库中。在模版对象被拷贝到新的用户数据库中之后,该数据库的所有多余空间都将被空页填满。

    • msdb:msdb 数据库是 SQLserver 数据库中的特例,若想查看此数据库的实际定义,会发现它其实是一个用户数据库。所有的任务调度、报警、操作员都存储在 msdb 数据库中。该库的另一个功能是用来存储所有备份历史。SQLserver agent 将会使用这个库。

    • tempdb:据库是一个非常特殊的数据库,供所有来访问你的 SQL Server 的用户使用。这个库用来保存所有的临时表、存储过程和其他 SQL Server 建立的临时用的东西。例如,排序时要用到 tempdb 数据库。数据被放进 tempdb 数据库,排完序后再把结果返回给用户。每次 SQL Server 重新启动,它都会清空 tempdb 数据库并重建。永远不要在 tempdb 数据库建立需要永久保存的表。

  • 下载地址:

    • SQL Server 2019:https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads

    • SQL Server 2008:https://www.microsoft.com/zh-CN/download/details.aspx?id=30438

  • 常用语句:

    -- 查看数据库版本
    select @@VERSION
    
    -- 获取所有数据库名
    SELECT name FROM MASter..SysDatabASes ORDER BY name  
    
    -- 查询所有数据库中的表名
    SELECT SysObjects.name AS Tablename FROM sysobjects WHERE xtype = 'U' and sysstat<200
    
    -- 列出所有c:\文件、目录、子目录
    exec xp_dirtree 'c:'
    
    -- 列出c:\目录
    exec xp_dirtree 'c:',1
    
    -- 列出c:\目录、文件
    exec xp_dirtree 'c:',1,1
    
    -- 列出c:\目录
    exec xp_subdirs 'C:';
    
    -- 判断是否是SA权限
    select is_srvrolemember('sysadmin')
    
    -- 判断是否是db_owner权限
    select is_member('db_owner')
    
    -- 判断是否是public权限
    select is_srvrolemember('public')
    
    -- 查看OLE Automation Procedures的当前设置
    EXEC sp_configure 'Ole Automation Procedures'
  • SQL Server 沙盒

    • 沙盒模式是一种安全功能,用于限制数据库只对控件和字段属性中的安全且不含恶意代码的表达式求值。

    • 如果表达式不使用可能以某种方式损坏数据的函数或属性(如 Kill 和 Shell 之类的函数),则可认为它是安全的。

    • 当数据库以沙盒模式运行时,调用这些函数的表达式将会产生错误消息。

    • 沙盒提权的原理就是 jet.oledb(修改注册表)执行系统命令。

    • 数据库通过查询方式调用 mdb 文件,执行参数,绕过系统本身自己的执行命令,实现 mdb 文件执行命令。

MsSQL提权

xp_cmdshell提权

sp_oacreate提权

镜像劫持提权

沙盒提权

JOB提权

Last updated