美文网首页
CLR 在sql server中的应用

CLR 在sql server中的应用

作者: sum3mer | 来源:发表于2017-07-20 16:34 被阅读0次

    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时的代码:

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

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

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

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

    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

    相关文章

      网友评论

          本文标题:CLR 在sql server中的应用

          本文链接:https://www.haomeiwen.com/subject/pqcjkxtx.html