高級SQL注入掃描儀-IIS和DBO
惡意用戶可以使用SQL注入的高級機制來獲取關鍵信息並利用它來獲得計算機系統的完全控制。
解釋性註釋
本文沒有試圖解釋一種損害計算機系統的新技術,SQL注入技術非常古老且已知,但同時可能非常強大。該文章還不能反映出未知漏洞的利用,這是已知的並且已經報告了,如果可以反映出未發表的SQL注入的高級先進機制,惡意用戶可以將其用於獲取關鍵信息並利用它來獲得計算機系統的完全控制。
將此技術與IIS Web服務器與Microsoft SQL Server數據庫中的用戶權限(DBO)相結合可以導致受影響服務器的控製完全丟失。
本文將試圖解釋通過IIS Web服務器與外部網頁進行交互的SQL數據庫造成的潛在風險,並詳細介紹了惡意用戶如何從中受益。
簡短摘要(Wikipedia)
SQL注入是一種代碼注入技術,用於攻擊數據驅動的應用程序,其中邪惡的SQL語句插入到執行的入口字段中(例如,將數據庫內容轉換為攻擊者)。 SQL注入必須利用應用程序軟件中的安全漏洞,例如,當用戶輸入錯誤地過濾用戶輸入以嵌入了SQL語句中的字符串逃生字符,或者沒有強烈鍵入用戶輸入並出乎意料地執行。 SQL注入主要是網站的攻擊向量,但可用於攻擊任何類型的SQL數據庫。
SQL注入攻擊使攻擊者能夠欺騙身份,篡改現有數據,引起否定問題,例如排斥交易或更改餘額,允許完全披露系統上的所有數據,破壞數據或使其不可用,並成為數據庫服務器的管理員。
脆弱性
假設在網頁中,參數傳遞以允許SQL注入存在安全問題,那麼主要問題是IIS Web服務器能夠通過使用無效的Transact-SQL轉換功能向用戶顯示關鍵信息。想像以下URL ID參數允許注入。
https://www.victim.com/index.aspx?id=1
惡意用戶可以通過Transact-SQL轉換函數覆蓋ID參數的值
轉換(int,(select+用戶)); -
最終的URL是這種風格:
https://www.victim.com/index.aspx?id=convert(int,(select+用戶)); -
轉換函數試圖將字符串轉換為整數,這會導致IIS Web服務器出現嚴重錯誤顯示執行查詢的值的例外。
典型的輸出將是這樣的:
將NVARCHAR值'{user}'轉換為數據類型INT時,轉換失敗。
正如我們可以看到{user}值對應於數據庫用戶的當前值,除了返回的值是DBO的值,DBO還將告訴我們數據庫用戶具有最大的執行特權,因此它將能夠使用XP_CMDSHELL TRASSACT tramSact-SQL-SQL函數執行Shell命令。
使用具有最大特權的數據庫用戶使用網頁是系統管理員不應掉落的嚴重安全錯誤。
總而言之,可以說脆弱性由三個因素組成:
- 處理允許SQL注入的GET/POST參數的錯誤。 (軟體開發者)
- IIS Web服務器顯示轉換功能信息。 (微軟)
- 在網頁中使用具有最大特權的數據庫用戶。 (系統管理員/軟件開發人員)
版本4.0(私有)
掃描儀的擴展版4.0版在私人存儲庫中(由贊助商可見),其所有功能。
- https://github.com/iricartb/advanced-sql-indoction-scanner-release
更多信息
https://advanced-sql-invoction.blogspot.com/2017/06/ivan-ricart-borges-advanced-sql.html