的连接字符串末尾附加一个或多个参数值。使用要求键入用户名和密码的连接字符串与指定 数据库建立连接时,攻击者可键入“pwd; Encryption=off”字符串来避免加密系统,当此连 接字符串填充好后,相应的加密值将被添加到实现配置好的参数对中。如: “Data Source=Server, Port; Network Library=DBMSSOCN; Initial Catalog=DataBase; User ID=Username; Password=pwd; Encryption=off ” 1.在.NET环境中构建连接字符串 Ryan 的论文“使用 SqlConnectionStringBuilder 抵御连接字符串注入攻击”一文给出了 针对此类攻击的防御策略,微软在.NET 2.0版本中则引入了ConnectionStringBuilder类即连 接字符串生成器类,即程序员可使用基类DbConnectionStringBuilder创建一个安全连接字符 串,或者针对不同的数据库访问接口使用不同的特殊类:SqlConnectionStringBuilder, OleDbConnectionStringBuilder等。连接字符串生成器类旨在排除推测,防止出现语法错误和 安全漏洞,对每个键/值对执行有效性检查,无效对会引发异常。使用这些类创建一个连接 字符串可有效防止此类注入攻击,然而并不是每个开发者或程序都会使用它们。 2.连接字符串参数污染(CSPP) 参数污染技术用于覆写连接字符串中各参数值。这种技术在HTTP 环境中使用最为频 繁,感兴趣的读者可参考Carettoni L的论文“HTTP Parameter Pollution”,文章可在以下连 接上下载:http://www.owasp.org/images/b/ba/AppsecEU09_CarettoniDiPaola_v0.8.pdf. 在连接 字符串参数上同样可引入参数污染攻击手法。 下面给出一个场景来解释这些攻击手法,一个 web 应用程序通过运行在 Microsoft Windows Server上的 IIS 来请求连接数据库时,应用程序用户创建一个连接字符串如下: Data source = SQL2005; initial catalog = db1; integrated security=no; user id=+’User_Value’+; Password=+’Password_Value’+; 此时攻击者可在上面的连接字符串中增加一个参数并指定一个期望值,不管这个参数是 否已经出现在此字符串中,或者这个参数的值已经创建。使用.NET 应用程序组件构建连接 字符串时,系统会选择使用连接字符串中某参数最后出现时的参数值,即若连接字符串中存 在两个参数,其键值都是“Data Source”,则会使用最后一对中的键值。 2.1 CSPP攻击1:Hash值窃取 攻击者可伪造一个虚假的SQL Server服务器(Rogue_Server),并在其上安置一个SQL Server嗅探监听器,执行以下操作实现CSPP攻击: User_Value: ; Data Source = Rogue_Server Password_Value: ; Integrated Security = true 相应的构造出一个完整的连接字符串如下: Data source = SQL2005; initial catalog = db1;integrated security=no; user id=;Data Source= RogueServer; Password=; Integrated Security=true; 连接字符串中参数“Data Source”和“Integrated Security”已经被覆盖了,故 SQL Server 本地驱动程序将会使用后面出现的参数值,而忽略“Data source = SQL2005”以及“integrated security=no”参数值。此时应用程序将会使用运行在Windows上的实体如系统用户或者一个 应用程序池尝试连接Rogue_Server. (注:通常情况下Integrated Security 属性为 False , |