利用PowerUpSQL攻擊SQL Server實例
這篇博客簡述如何快速識別被第三方應用使用的SQL Server實例,該第三方軟件用PowerUpSQL配置默認用戶/密碼配置。雖然我曾經多次提到過這一話題,但是我認為值得為這一主題寫一篇簡短的博客,幫助大家解決常見的問題。希望會幫助到那些嘗試清理環境的滲透測試人員和網絡安全團隊。
測試方法總結
默認密碼仍然是我們在內網滲透測試中碰到的最大的問題之一。Web應用尤其容易忽視這一問題,但是用自己的SQL Server實例布置的第三方應用還可以被瀏覽。Rob Fuller在PWNWiki建立一個默認SQL Server實例密碼列表。我們也會追蹤我們自己的列表,所以為了實現測試流程的自動化,我把他們放在一起,並用PowerShell把他們包裹起來。
這個高級進程是很簡單的:
-
創建一個列表,這個列表內容是應用程序特定的SQLServer實例名和與這個實例關聯的默認用戶名/密碼;
-
通過LDAP查詢,掃描活動,或其他方式,識別SQL實例。
-
用發現的實例名稱交叉引用默認實例名稱的列表。
-
嘗試登陸用關聯的默認證書匹配的SQL Server實例。
加載PowerUpSQL
PowerUpSQL可以用很多不同的方式在PowerShell中加載。下面就是一個展示如何從GitHub中下載模塊和導入模塊的基本示例:
IEX(New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/NetSPI/PowerUpSQL/master/PowerUpSQL.ps1")
想要了解更多基礎選項請看:https://github.com/NetSPI/PowerUpSQL/wiki/Setting-Up-PowerUpSQL.
同樣,想要下載更多內容請看Matthew Green的博客:https://mgreen27.github.io/posts/2018/04/02/DownloadCradle.html.
命令例示:通過廣播PING進行定位
您在加載PowerUpSQL之後,您可以通過運行下面的命令來發現在您當前廣播域之內的SQL Server實例。
Get-SQLInstanceBroadcast -Verbose
如您所見,這個命令在你的本地網絡為你提供一列SQL Server實例。為了分辨哪一個SQL實例用默認密碼設置,您可以將“Get-SQLInstanceBroadcast”傳遞給“Get-SQLServerLoginDefaultPw”,正如下所示。
Get-SQLInstanceBroadcast -Verbose | Get-SQLServerLoginDefaultPw –Verbose
命令示例:通過LDAP查詢定位
如果你有域名證書,或已經在一個域名系統上運行,你也可以通過LDAP查詢現用目錄,為了一系列註冊的SQLServer 通過如下命令。這也可以從一個非域系統通過使用來自PowerUpSQL Discovery Cheatsheet的語法執行。
Get-SQLInstanceDomain -Verbose
正如最後一個例子所示,你只需要把“Get-SQLInstanceDomain”傳送至“Get-SQLServerLoginDefaultPw” 就可以識別那些註冊在默認密碼設置的域中的SQL Server實例。
Get-SQLInstanceDomain -Verbose |Get-SQLServerLoginDefaultPw -Verbose
PowerUpSQL支持的SQLServer實例發現功能的完整列表已經被列在下面:
Function Name | Description |
---|---|
Get-SQLInstanceFile | Returns SQL Server instances from a file. One per line. |
Get-SQLInstanceLocal | Returns SQL Server instances from the local system based on a registry search. |
Get-SQLInstanceDomain | Returns a list of SQL Server instances discovered by querying a domain controller for systems with registered MSSQL service principal names. The function will default to the current user’s domain and logon server, but an alternative domain controller can be provided. UDP scanning of management servers is optional. |
Get-SQLInstanceScanUDP | Returns SQL Server instances from UDP scan results. |
Get-SQLInstanceScanUDPThreaded | Returns SQL Server instances from UDP scan results and supports threading. |
Get-SQLInstanceBroadcast | Returns SQL Server instances on the local network by sending a UDP request to the broadcast address of the subnet and parsing responses. |
我還想指出,一個稱為“Find-DbaInstance”的DBATools函數可以用於blind SQL Server實例發現。它實際上比PowerUpSQL提供更多的發現選項。Chrissy LeMaire已經寫了一個很好的概述可以在https://dbatools.io/find-sql-instances/上找到。
Get-SQLServerLoginDefaultPw尋找什麽?
通常Get-SQLServerLoginDefaultPw函數包含41個應用程序特定的默認SQL Server實例,用戶和密碼。我故意沒有包含以SQL Express或MSSQLSERVER命名的實例,因為我想避開賬戶鎖定。唯一一次登陸嘗試是在這裏有一個與應用程序部署匹配的實例。對於那些好奇的人來說,下面提供了應用程序特定實例的當前列表
ACS | CODEPAL | MYMOVIES | RTCLOCAL | vocollect |
---|---|---|---|---|
ACT7 | CODEPAL08 | ECC | SALESLOGIX | VSDOTNET |
AOM2 | CounterPoint | ECOPYDB | SIDEXIS_SQL | |
ARIS | CSSQL05 | ECOPYDB | SQL2K5 | |
AutodeskVault | CADSQL | Emerson2012 | STANDARDDEV2014 | |
BOSCHSQL | DHLEASYSHIP | HDPS | PCAMERICA | |
BPASERVER9 | DPM | HPDSS | PRISM | |
CDRDICOM | DVTEL | INSERTGT | TEW_SQLEXPRESS | |
VSQL | EASYSHIP | INTRAVET | RMSQLDATA |
總結
作為總結,確保你有仔細檢查部署在你的環境中的第三方軟件。希望這個文章/工具能夠幫助安全團隊清理那些與默認SQL Server實例關聯的默認密碼。
利用PowerUpSQL攻擊SQL Server實例