zoukankan      html  css  js  c++  java
  • xp_cmdshell

    xp_cmdshell可以以SQLSERVER的上下文(也就是启动sqlserver服务的windows账户)或代理账户的上下文(通过为xp_cmdshell设置凭据)调用操作系统的任意命令。 xp_cmdshell非常灵活,实际上我想说它实在太灵活了,用户可以通过xp_cmdshell执行任何命令,并且没有什么好的方法可以去限制这种灵活性,这简直为它的滥用大行方便。

     

    在许多情况下,为了执行操作系统中的操作,人们开启了xp_cmdshell,并且授权那些非sysadmin角色的帐户可以去调用xp_cmdshell,但并没有认识到这些用户可以执行任意命令,在某些情况下,这些用户可以通过xp_cmdshell将自己加入到sysadmin角色甚至提升为windows的管理员.很明显,这并不是我们想要的. Xp_cmdshell非常难控制,即使对它的使用进行了监测,也仍然会让攻击者在被逮住之前大用特用,而那时破坏可能已经发生了。

     

    一般来讲,你绝对要避免使用xp_cmdshell,如果可能,你应该将其应用与其脱离。比较好的方式可能是使用CLR,在开发人员可控的范围内创建一个可以执行”外部访问/不安全”(external access/unsafe)操作的程序集(最好使用数字签名来建立信任)来执行需要的操作。优点如下:

    ·         除了外部/不安全的信任机制(也就是通过签名)的优点,该方法还不依赖于服务器设置

    ·         sysadmin可以在需要时撤销这种信任关系而不会影响其他应用。

    ·         更好的粒度控制和孤立性

     

    但是请记住CLR并不能解决所有的问题. 如果要给予应用程序(该程序会以SQLSERVER启动账户的身份或者OS上的特权用户的身份执行执行操作)一定程度的信任,你要确保应用程序编码良好的,没有其他安全漏洞(例如代码注入,buffer溢出等等),并且是可控(也就是,不允许随意任意的命令或者打开系统中的文件等等)

     

     如果数据库管理员不希望用户在SQLSERVER中使用CLR而将其禁用,可以使用其他的方式,创建一个T-SQL的存储过程,里面含有需要在操作系统上调用的命令,然后通过Execute as或者数字签名来暂时将调用者提升为sysadmin.使用这种方法是请确保不要有用户输入 (例如为调用命令而使用参数);或者如果你需要使用输入参数的命令,确保对输入进行验证

     

    我列出一些和SQL CLR,数字签名有关的链接,希望这些信息能够对你有所帮助

    ·         TRUSTWORTHY Database property

    ·         Security Considerations for Databases and Database Applications

    ·         Permissions Hierarchy

    ·         Understanding Context Switching

    ·         Execute As

    ·         Extending Database Impersonation using Execute As

    ·         Module Signing

    ·         CREATE ASSEMBLY

    ·         Creating an Assembly

     

    非常感谢Byham, Laurentiu Cristofor, Ruslan Ovechkin, Jack Richins Sameer Tejani的帮助

     

    原文地址:http://blogs.msdn.com/sqlsecurity/archive/2008/01/10/xp-cmdshell.aspx 

     

  • 相关阅读:
    超市名词解释
    卖功能?买利益?还是买价值?
    店长如何防止顾客外流
    生鲜在卖场中的六大类别
    卖场商品ABCD分类原则
    零售业常用的数字管理公式及其意义
    零售店的利润类型分析
    把握好生鲜经营的关键因素
    常见的心理定位套路
    [转]New .Net三层架构
  • 原文地址:https://www.cnblogs.com/stswordman/p/1259521.html
Copyright © 2011-2022 走看看