PowerView 滲透測試工具使用方法Part.1
PowerView可能是我寫過的我最喜歡的一個程序,也絕對是我最經常使用的程序(最近的文章就是證明)。我的團隊也大量使用了這個工具包,在過去的幾年裡我們已經提出了一些很酷的用法。很長一段時間內,我一直想分享PowerView一些真正的「強大」用途,比如這篇文章里寫到的PowerView使用「技巧」 。
這個系列文章的目的是為了演示如何使用PowerView來解決有趣的問題以及我們在每個解決方案背後的思考過程。PowerView不是一個固有的「攻擊性」或「防禦性」的工具集,它是一個幫助解決Active Directory安全問題的工具,無論是黑是白。
本系列中的所有內容都將基於真實的滲透測試場景,每篇文章將至少介紹一個PowerView功能。由於這些場景是基於實際情況中的問題,所以解決方案可能並不總是通用的,但是它們應該是非常有用的。我確信很多人只是使用了PowerView功能的一小部分,我希望向所有人展示它的全部功能。
這個系列的文章將符合下面這個半標準的格式:
· 場景:重點描述在實際滲透測試中遇到的操作問題
· 解決方案:提供完整的PowerView解決方案
· 解釋:一步一步地將解決方案分解,逐步解釋我們的思維過程
隨後的文章中將更新如下內容:
· PowerView PowerUsage系列#1 – 批量用戶配置文件枚舉
· PowerView PowerUsage系列#2 – 使用全局編錄映射計算機短名稱
· PowerView PowerUsage系列#3 – 枚舉外部域中的GPO編輯許可權
· PowerView PowerUsage系列#4 – 尋找交叉信任的ACE
場景一:多用戶配置文件枚舉
假設你正在準備提升域許可權,並且想要映射你已經拿到許可權的系統3389(或以其他方式互動式登錄)。你也知道這個域可能早已經被入侵過了,所以你想儘可能地限制憑證的暴露。如果我們有一個可過濾的CSV文件來將數據傳送給客戶端,那麼也是很好的,如果可能的話,這會將任何「噪音」 最小化。
解決方案
Get-DomainComputer -LDAPFilter (dnshostname=*) -Properties dnshostname -UACFilter NOT_TRUSTED_FOR_DELEGATION -Ping | % { try { $ComputerName = $_.dnshostname Get-WmiObject -Class Win32_UserProfile -Filter "NOT SID = S-1-5-18 AND NOT SID = S-1-5-19 AND NOT SID = S-1-5-20" -ComputerName $_.dnshostname -ErrorAction SilentlyContinue | % { if ($_.SID -match S-1-5-21-[0-9]+-[0-9]+-[0-9]+-[0-9]+$) { $LocalPath, $Time = , if ($_.LastUseTime) { $Time = ([WMI]).ConvertToDateTime($_.LastUseTime) } if ($_.LocalPath) { $LocalPath = $_.LocalPath.Split()[-1] } New-Object PSObject -Property @{ComputerName=$ComputerName ; SID=$_.SID; LocalPath=$LocalPath; LastUseTime=$Time} } } } catch {}} | Export-Csv -NoTypeInformation user_profiles.csv
解釋說明
首先,我們使用Get-DomainComputer 來檢索了當前域的活動目錄的計算機對象。為了減少「噪音」,我們實現了一個自定義的LDAPFilter,並且讓這個函數只返回活動目錄中有dnsHostName屬性的計算機。
由於我們很在意機器返回的dnshostname信息,所以可以設置-Properties只要求相關的域控制器返回我們需要的信息。這有助於減少我們和DC之間的網路流量。
由於我們知道該域可能已經被入侵了,因此,在進行遠程網路連接時,我們希望儘可能謹慎地使用提升後的登陸憑據。肖恩·梅特卡夫(Sean Metcalf)在「不受約束授權的危險」這一方面有很幾篇很不錯的文章,我沒有太多的時間在這方面進行深入研究,但是我們至少可以返回沒有設置過TRUSTED_FOR_DELEGATION標誌的機器。返回的系統是應該可以通過像WMI這樣的東西來進行進一步滲透。最後,我們也只想從當前的網路連接到的機器,-Ping參數只能返回機器的標準ICMP ping的響應。
現在有一組我們感興趣的由管道返回的主機名。對於這個特定的場景,我們希望看到誰曾經登錄過一台機器,我們決定通過Get-WmiObject枚舉Win32_UserProfile類來查看互動式用戶在機器上生成的配置文件。為了減少一些噪音,我們可以「向左優化」,並篩選出一些我們不關心的常見SID。
最後,我們只關心域SID,因此,我們使用S-1-5-21- [0-9] + – [0-9] + – [0-9] + – [0-9] +作為過濾器。然後,我們將配置文件的LastUseTime轉換為可讀的格式,然後拆分返回的配置文件路徑,以便了解配置文件的用戶名。我們通過使用New-Object PSObject在包含我們關心的最終輸出元素的管道中間創建一個新的自定義對象,將所有內容都輸出到Export-Csv以便於分析。
場景二:計算機短名稱與全局編錄映射
在參與多域林環境的滲透測試過程中,你最終可能會在文件computers.txt中記錄一些計算機的「短名稱」(如WINDOWS1),以便利用該文件來解析DNS主機名。
解決方案
解釋說明
這個其實很簡單。我們使用gc (Get-Content)輸出計算機短名稱列表,通過管道符和Sort-Object -Unique將其進行排序,作為對列表進行唯一化的一種方式。然後這個唯一的列表通過管道符和%(ForEach-Object)以執行腳本塊({…}中的代碼)的方式傳送到Get-DomainComputer ,以便我們可以適當地過濾名稱。
-SearchBase X 指定了通過對象搜索的LDAP源。在這種情況下,我們會使用全局編錄(點擊這裡查看更多信息),它是Active Directory林中所有對象的部分拷貝。如果我們在當前域(從$ENV:USERDNSDOMAIN拉出)之前指定GC:// ,那麼我們所在域的全局編錄副本將被搜索,而不是在我們當前的域進行搜索。由於計算機對象的「name」和「dnshostname」屬性被複制到了全局編錄中,因此我們可以使用這種方法將短名稱(名稱)快速映射到完全限定名稱,本例中為dnshostname 。
我們通過為從文本文件列表返回的名稱添加了一個自定義的-LDAPFilter 過濾器來完成映射,並且–Properties dnshostname將再次「向左優化」,只返回我們關心的屬性。
本文翻譯自:http://www.harmj0y.net/blog/powershell/the-powerview-powerusage-series-1/ ,如若轉載,請註明原文地址: http://www.4hou.com/penetration/9121.html 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀:
※實用密碼學工具——KDF
※如何看待 2017 年 5 月 12 日中國大量高校及公共設備發生電腦中毒,勒索比特幣的事件?
※Blackhat2016第二天部分精彩議題介紹(含PPT下載)
※可能很多人已經知道了,但還是安利一波ceye.io吧
※威脅預警:IBM InfoSphere系列產品中發現多處高危安全漏洞
TAG:信息安全 |