首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

遠端偵測 MSSQL Server 帳號密碼安全性 (C++ ODBC 實作)

     編輯:關於SqlServer

前言

本文提供一個 C++ 控制台程式範例,透過 ODBC API 建立 IPC$ 空連接,並以多執行緒字典攻擊方式嘗試登入遠端 SQL Server,驗證弱密碼帳號。僅供**授權滲透測試、安全稽核**使用,嚴禁非法入侵。

核心流程

  1. 建立 IPC$ 會話 (`WNetAddConnection2`),繞過防火牆限制連接埠 139/445。
  2. 載入字典檔至記憶體。
  3. 建立信號量控制最大並發執行緒數 (預設 50)。
  4. 每個執行緒呼叫 `SQLDriverConnect` 嘗試登入,成功即設定全域旗標並終止其他執行緒。
  5. 釋放資源,輸出破解結果與耗時。

關鍵程式碼片段

// ODBC 連接字串構造
sprintf(ConnStr, "DRIVER={SQL Server};SERVER=%s;UID=%s;PWD=%s;DATABASE=master", target, UserName, pwd);

// 環境與連接控制代碼分配
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);

// 嘗試連接
retcode = SQLDriverConnect(hdbc, NULL, ConnStr, strlen(ConnStr), szBuffer, sizeof(szBuffer), &swStrLen, SQL_DRIVER_COMPLETE_REQUIRED);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
    Cracked = TRUE;
    strncpy(passwd, pwd, sizeof(passwd));
    SQLDisconnect(hdbc);
}

防禦建議

  • **強制強密碼原則** (長度、複雜度、定期輪換)。
  • **停用 `sa` 帳號** 或重新命名,建立專用低權限應用程式帳號。
  • **防火牆限制** 來源 IP 存取連接埠 1433 (TCP) 與 139/445 (IPC$)。
  • **啟用登入稽核** (成功/失敗),並導入 SIEM 即時告警。
  • **帳號鎖定原則** (失敗次數達臨界值暫時鎖定)。
  • **使用 Windows 整合驗證** 或憑證驗證,避免 SQL 驗證密碼傳輸。

完整原始碼下載

原文提供完整 `SQLCheck.c` 可於 Windows 2000 + VC++ 6.0 編譯通過。現代環境建議改用 PowerShell / Python (pyodbc) / C# 實作,並加入 TLS 加密連接選項。

法律聲明

未經書面授權對目標系統進行密碼猜測屬違法行為。本文代碼僅供內部安全自查、授權滲透測試使用,作者不承擔任何濫用責任。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved