歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

如何繞過LocalServiceAndNoImpersonation拿回全部特權

來源:本站整理 作者:佚名 時間:2019-12-10 TAG: 我要投稿

幾周之前,來自NCC Group的Phillip Langlois和Edward Torkington公布UPnP Device Host服務中的一個提權漏洞(原文,譯文)。如果大家對Windows上的提權漏洞感興趣,千萬不能錯過這篇文章。Phillip Langlois和Edward Torkington介紹了如何利用該服務公開的一個COM對象成功在NT AUTHORITY\LOCAL SERVICE上下文中實現任意代碼執行。
在這種情況下,由于服務賬戶具備模擬(impersonation)功能,因此通常情況下我們能將權限提升至NT AUTHORITY\SYSTEM。然而,實際情況并沒有想象的那么簡單。
在Windows 10上,UPnP Device Host服務的ServiceSidType設置為SERVICE_SID_TYPE_UNRESTRICTED,無需模擬權限就能以NT AUTHORITY\LOCAL SERVICE用戶身份執行。不幸的是,這樣我們就無法通過常見方法將權限提升至NT AUTHORITY\SYSTEM。
如果檢查該服務的屬性,可以看到執行路徑中包含-k LocalServiceAndNoImpersonation選項:

檢查與該進程關聯的令牌,可以看到的確只有兩個特權:

而其他服務則是使用-k LocalService選項運行,比如Bluetooth Support服務:

這種情況下,我們能夠看到與NT AUTHORITY\LOCAL SERVICE賬戶有關的特權:

注意:這里要提醒一下,特權的Enabled/Disabled狀態其實并不關鍵,關鍵的是令牌中具備哪些特權。如果令牌中包含某個特權,我們可以在運行時根據需要啟用或者禁用該特權。
在這種情況下,對于UPnP Device Host之類的服務,我們能否找到方法重新奪回所有特權呢?答案是肯定的(否則本文就沒有任何存在意義了),并且實現起來也特別簡單。
 
0x01 環境復現
為了復現UPnP Device Host服務漏洞的利用環境,我使用NirSoft提供的RunFromProcess工具以服務子進程的方式打開一個bindshell,該操作需要管理員權限,bindshell我使用的是powercat。powercat是PowerShell版的netcat實現,作為滲透測試人員,這是必不可少的一款工具。
RunFromProcess的用法非常簡單,第一個參數為待運行可執行文件的宿主進程的PID,第二個參數為可執行文件的絕對路徑,然后我們可以附加可執行文件需要的一些參數。
C:\TOOLS>RunFromProcess-x64.exe 3636 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -exec bypass -Command ". C:\TOOLS\powercat.ps1;powercat -l -p 7001 -ep"
要注意的是,工具沒有給出是否運行成功的信息,因此我們在運行之前要多檢查幾次命令。完成該操作后,我們可以使用“客戶端模式”的powercat連接bindshell。
. .\powercat.ps1
powercat -c 127.0.0.1 -p 7001

非常好,現在我們的shell已經運行在NT AUTHORITY\SERVICE上下文中,并且從上圖中我們只看到兩個特權,F在我們可以開展后續研究。
 
0x02 利用計劃任務
在Windows系統中,任何用戶都可以創建自己的計劃任務,NT AUTHORITY\LOCAL SERVICE也不例外。默認情況下,我們可以把用來運行某個任務的賬戶當成該任務的“作者”。Windows會通過一系列本地(或者遠程)RPC調用來完成計劃任務創建過程,但這不是本文重點,不再贅述。
來看一下當我們在LOCAL SERVICE賬戶的上下文中創建任務會出現什么情況。我們可以使用PowerShell,通過3個簡單的步驟完成該操作:
首先,我們需要為任務創建一個Action對象,其中我們可以指定待運行的程序/腳本以及某些可選參數。這里我們想在7002端口上打開bindshell,因此可以使用如下命令:
$TaskAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-Exec Bypass -Command `". C:\TOOLS\powercat.ps1; powercat -l -p 7002 -ep`""
然后,我們可以“注冊”并手動啟動任務:
Register-ScheduledTask -Action $TaskAction -TaskName "SomeTask"
Start-ScheduledTask -TaskName "SomeTask"

現在再次使用客戶端模式的powercat,連接到新的bindshell:
. .\powercat.ps1
powercat -c 127.0.0.1 -p 7002

從上圖可知,我們竟然拿回了所有特權!
稍等片刻,我們真的拿回了所有特權嗎?
根據微軟官方文檔,本地服務賬戶默認情況下具備如下特權:
SE_ASSIGNPRIMARYTOKEN_NAME (disabled)
SE_AUDIT_NAME (disabled)
SE_CHANGE_NOTIFY_NAME (enabled)
SE_CREATE_GLOBAL_NAME (enabled)
SE_IMPERSONATE_NAME (enabled)
SE_INCREASE_QUOTA_NAME (disabled)
SE_SHUTDOWN_NAME (disabled)
SE_UNDOCK_NAME (disabled)
以及分配給普通用戶及認證用戶的其他特權

[1] [2]  下一頁

【聲明】:黑吧安全網(http://www.zjtpzs.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        神秘东方电子游艺 宁夏11选5直播宁夏11选5手机助手 上海时时乐形态走势 吉祥棋牌2015下载 快3怎么玩的 河内5分彩正规吗 广东11选择5 股票怎么玩说简单点 幸运赛车怎么买 广东推倒胡好友房 湖南快乐十分开奖图 河北20选5中奖查询 mei haruka 作品番号 体育彩票快乐扑克3 大乐透复式玩法价格 辽宁快乐十二开奖走 河北排列五走势图彩宝贝近200期