CLR 在sql server中的应用

CLR:通用语言运行平台(Common Language Runtime,简称CLR)是微软为他们的.NET的虚拟机所选用的名称。它是微软对通用语言架构(CLI)的实现版本,它定义了一个代码运行的环境。CLR运行一种称为通用中间语言的字节码,这个是微软的通用中间语言实现版本。(我理解CLR为可执行程序)

存储过程:是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象,它可以视为数据库中的一种函数或子程序。若要在存储过程执行外部可执行程序,则

CREATE PROCEDURE dbo.esp_proc(存储过程名称)

AS EXTERNAL NAME ‘可执行程序名’

excute  dbo.esp_proc(存储过程名称)

1、CLR代码执行方式

创建CLR有两种方式:

①使用DLL文件进行创建

CREATE ASSEMBLY assembly_name from ‘dll_path’

②使用文件16进制流进行创建

CREATE ASSEMBLY assembly_name from 文件十六进制流

第一种方法,需要上传我们所需要的存储过程DLL,攻击门槛高。相比之下第二种方法,只需要一个注入点就可以了。所以本文重点讨论第二种方法的CLR攻击实现。

编译CLR时的代码:

《CLR 在sql server中的应用》

关键代码为在SqlStoredProcedure1 ()内,代码逻辑很简单,创建一个cmd进程执行 whoami /user 并把结果写入到本地txt文件中。

经历种种,获取16进制流,执行sql语句:

《CLR 在sql server中的应用》

逻辑就是创建存储过程,以及获得一个实例,去执行它。

同时完成提权,权限为数据库权限

CLR执行的环境是在SQLServer,通过CREATE ASSEMBLY, CREATE PROCEDURE创建存储过程,实例化操作对象,之后再经过EXEC执行。SQL Server执行CLR,必须要满足:

1、数据库开启CLR.

2、数据库用户有CREATE ASSEMBLY, CREATE PROCEDURE, EXEC权限。

查阅SQLServer官方文档,在默认情况下,Microsoft SQL Server 中关闭了公共语言运行库 (CLR)

集成功能。必须启用该功能才能使用 SQL Server 项目项。若要启用 CLR 集成,请使用 sp_configure 存储过程的“启用

clr”选项。

本文转载自 360网络安全响应中心

原文链接:http://mp.weixin.qq.com/s/EwCwwjzP1lzNGNaihFgGww

    原文作者:sum3mer
    原文地址: https://www.jianshu.com/p/a290ad3aa626
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞