【安全技术】红队之windows信息收集思路
前言
很久沒做內網了,溫習一下。希望正在學習安全的小伙伴不要踏入我初學內網的誤區。
先來談談我對內網的理解吧,不是技術的方向。
內網學的東西很多,很雜。當時我問了我的大哥,他給我的一句話確實影響我至今。我說內網就說信息收集,cmd命令能收集,powershell收集也很多,還有類似wmic,或者一些腳本語言寫的信息收集工具,太多了,這些都要學真的太浪費時間了。他是這么跟我說的,很多東西你要學一輩子都學不完,但是你把一個東西學好了,結果都是一樣的。確實是這么個道理,學習需要廣度,能讓你碰到不同的情況乃至極限情況你有解決問題的思路。學習需要深度,你能在正常情況下創造乃至開辟一條新的道路。所以說完全沒有必要什么命令都背什么命令都記得清清楚楚,最重要的是要有自己的一套滲透手法,能夠達到效果,就是好的。沒人在乎你的過程,除非你真的很6。好了。開始今天的主題。
內網這一塊不是我的擅長,但是也有幸參加過一些護網,做過一點內網滲透。總結性的來說說我的思路。
一般來說,我們拿了權限做的第一件事是維權,維權這一塊以后再說。因為現在很多時候涉及免殺,免殺這一塊我研究的不是很多。然后就會對當前主機進行信息收集。我就獻丑說一下自己的信息收集思路。可能命令不是很多,都是靠平時自己收集的,主要是提供一個思路,如何實現自動化并且不觸發告警,才是應該操心的。
文件類
(1)配置文件
如果是從web打進去的,配置文件是一定要找到,找到了數據庫的賬號密碼,如果是站庫分離可能會拿下第二臺,如果不是也能獲取數據庫的數據,或者說用來做密碼復用。配置文件一般就在web目錄找config等標志性文件。其中如果密碼存在加密的大眾系統可以試試去github找找有沒有解密腳本。自定義的加密可以嘗試找源碼進行破解。
(2)敏感文件
桌面是一定要看的,很多人有保存文件在桌面的習慣,特別是個人機。很有可能記錄了一些密碼信息或者其他網站的登錄賬號密碼信息,以及一些敏感文件。
(3)其他目錄
這種就是比較隨緣了,因為個人習慣不同,稍微有點安全的人可能不會放在桌面,放在D盤啊等地方。這種可能就不是很好找,但是也可以全局搜索文件名,文件內容包含passwd,user,password等字段的文件。回收站也可以看看。
下面放一些我常用的命令,來源于之前記錄的別人發的,但是原文找不到了。自己根據實際情況改。
第一階段:計算機信息類
畢竟域環境多了一些拿域控,或者kerberos認證等等的東西,就還是分開吧。很多時候盲目的去找一些命令是徒勞無功的,最主要是你要清楚自己要做什么,針對性的作信息收集。這里都是說的手動的,工具類的會放到最后面。
工作組
(1)ip信息(主要判斷自己的位置已經確定能橫向的方向)
ipconfig /all 網卡信息 route print 查看路由表 看能到達的地方 arp -a 查看arp表 看緩存 hosts 文件還有其他的可以自行去做去找,正常情況下這幾個命令也夠了,wmic ps那些也可以做到,但是沒必要,集成的現在太容易被殺了,其他工具也還是靠著平時自己積累。
(2)端口收集(主要是判斷開放了哪些端口,和哪些機器連通,有沒有后續利用的可能)
netstat-ano //一條就夠了,不需要太多的花里胡哨 也可以自己去根據習慣找一些其他的方式。還有一些簡化的比如查看特定狀態端口根據自己的需要去篩選。findstr命令等實現。
(3)進程收集(主要是看看開啟了哪些進程,管理員進程可能涉及提權,殺軟進程可能涉及免殺,還有一些第三方的進程可能涉及可以做權限維持,這種都是根據需要去確定的)
tasklist /svc //查看所有進程 tasklist /v //查看進程啟動的用戶 taskkill /f /PID //關閉某個pid的進程 wmic /namespace:\\root\securitycenter2 path antivirusproduct GET displayName,productState,pathToSignedProductExe //查看本機殺軟對于防火墻配置一類的,我這里沒有涉及,是因為特殊情況下才會做。
(4)服務收集(主要是可能涉及一些提權,已經從服務中提取敏感信息比如說抓取密碼等,可以通過產品和進程去判斷)
(5)計劃任務 (涉及提權,權限維持等,也可能通過計劃任務發現腳本文件中可能存在敏感內容)
schtasks /query(6)用戶收集(主要是對提權或者橫向移動做鋪墊)
net user 查看用戶 net localgroup Administrators 查看管理員組 whoami 當前用戶(7)憑證收集
(1)hash mimikatz (2)瀏覽器及第三方軟件密碼 (利用各種工具或自己寫) (3)wifi密碼等 (4)rdp密碼這一塊最常用的還是抓hash,肯定首推是mimikatz。不過要做好免殺,免殺的方式就不說了,之前測試一些腳本加載過某0還是沒有問題的,現在很久沒弄過了不知道了。關于其他的一些比如xshell,瀏覽器密碼抓取的工具,就需要自己平時多收集了,當前有條件的自己寫也還是沒問題的。還要個人機上一些wifi密碼可能也有用,這個就看自己習慣了。
(8)其他收集(主要是一些共享啊之類的)
net share //查看共享 net use //查看ipc$ systeminfo //查看計算機信息(提權可能會用,也能判斷域環境已經操作系統版本) wmic startup get command,caption 查看自啟動 wmic share get name,path,status 查看共享 net start 查看當前機器啟動的服務 cmdkey /l# 查看保存的憑證域環境
工作組的環境比較單一,且鑒權都是在本地做,所以沒有太多的花里胡哨。域環境可能會麻煩一點,接下來我會從思路上去簡述信息收集,爭取能夠給大家一個比較清晰的腦圖,現在我們暫定我們的目標是域控。網絡安全學習攻略·資料
(1)當我們拿到一個機器之后,肯定是先判斷域環境
(2)確實是域環境以后,要對本機做信息收集
(3)需要判斷域控
(4)鑒于有委派或者約束委派這些攻擊方式,可能會需要查找一些服務用戶,也就是spn相關。
(5)域環境中exchange的權限很高的,有經驗的老師傅可能會進來就找郵服,這一塊我沒有做過,就說一下我自己收集的。
(6)面試的時候會必問的問題,如果尋找域控,如何拿下域控,對于這些方法需要的前提,都是我們必須要進行收集的。
對于本機的收集上面重復的我就不多說了,注意一下下面的點就行了。
(1)ip收集
此時的ip收集我們需要關注一下dns,因為通常情況下,域控可能就是dns服務器。
(2)端口搜集
本機端口收集還是正常的和工作組一樣
(3)進程收集
此時的進程收集我們需要留意一下域管啟用的進程,如果能夠竊取hash,或者直接導出域管hash,基本已經意味著我們有域控權限了。
(4)服務收集
setspn -T domain -q */* //spn收集 后續能利用的太多了,搜索服務用戶,搜索域中存在的服務(5)用戶與機器收集
wmic useraccount get /all 查看域用戶詳情 net user /domain ------> 查詢域用戶 net group /domain ------> 查詢域里面的工作組 net group "domain admins" /domain ------> 查詢域管理員用戶組 net localgroup administrators /domain ------> 登錄本機的域管理員 query user || qwinsta 查看在線用戶 net view ------> 查詢同一域內機器列表 net view /domain ------> 查詢域列表6)憑證收集
和上面一樣,只不過這里可以針對權限去分出來從目前的用戶看我們有什么權限
(7)其他收集
也是屬于撿垃圾了,雜七雜八的收集,沒想到,想到了再說。
第二階段:橫向信息收集
經過我們上面各個模塊的收集完成后,我們對我們當前計算機的情況已經有所了解了。該提權提權,改拿小本本記錄就記錄。現在進入第二階段了,橫向移動的收集。橫向我分為兩種,一種是定向橫向,比如我專門打郵服,或者專門打弱口令,只掃描特定端口。還有一種是全方位橫向,就是我對所有可達的ip端都進行探測,這種動靜就會比較大,但是橫向最主要其實也是收集ip和端口了。有web業務打web,有弱口令能ssh或者rdp就試試,ftp能匿名訪問也是分,redis未授權可能還能彈回來個shell。這里就八仙過海各顯神通了。我這里分為ip和端口進行收集來討論。
ip類
集成的工具最后再說,先說手動的。
常見的可能是利用腳本或者cmd命令進行收集。這里列舉幾個
端口類
1.python # This script runs on Python 3 import socket, threadingdef TCP_connect(ip, port_number, delay, output):TCPsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)TCPsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)TCPsock.settimeout(delay)try:TCPsock.connect((ip, port_number))output[port_number] = 'Listening'except:output[port_number] = ''def scan_ports(host_ip, delay):threads = [] # To run TCP_connect concurrentlyoutput = {} # For printing purposes# Spawning threads to scan portsfor i in range(10000):t = threading.Thread(target=TCP_connect, args=(host_ip, i, delay, output))threads.append(t)# Starting threadsfor i in range(10000):threads[i].start()# Locking the script until all threads completefor i in range(10000):threads[i].join()# Printing listening ports from small to largefor i in range(10000):if output[i] == 'Listening':print(str(i) + ': ' + output[i])def main():host_ip = input("Enter host IP: ")delay = int(input("How many seconds the socket is going to wait until timeout: ")) scan_ports(host_ip, delay)if __name__ == "__main__":main() 2.powershell 24..25 | % {echo ((new-object Net.Sockets.TcpClient).Connect("192.168.1.119",$_)) "Port $_ is open!"} 2>$null24..25 |% {echo "$_ is "; Test-NetConnection -Port $_ -InformationLevel "Quiet" 192.168.1.119}2>null 3.telnet按照這種思路下來,我們只需要針對我們某個步驟,選擇我們理想的方式或者工具去實現,就能收集到很多的信息。而且思路清晰,明確自己下一步需要做什么。網絡安全學習攻略·資料
1.用戶名枚舉(因為kerberos驗證的原因,非域情況下能夠枚舉域用戶,原理自己可以看一下,這里我沒有能力自己寫工具,就放一些工具鏈接) msf:auxiliary/gather/kerberos_enumusers nmap:Nmap –p 88 –script-args krb5-enum-users.realm=’[domain]’,userdb=[user list] [DC IP] kerbrute:kerbrute_windows_amd64.exe userenum --dc ip -d 域名 user.txt DomainPasswordSpray: Get-DomainUserList -Domain 域名 -RemoveDisabled -RemovePotentialLockouts | Out-File -Encoding ascii userlist.txt 2.密碼噴射 kerbrute:kerbrute_windows_amd64.exe passwordspray --dc ip -d 域名 user.txt 密碼 nvoke-DomainPasswordSpray -Domain 域名 -UserList .\userlist.txt -Password '密碼3.查找域控 nltest /DCLIST:GOD 查域控 Nslookup -type=SRV _ldap._tcp 查看域控主機名 net group “Domain Controllers” /domain 查看域控組內域控主機 net group “Domain Controllers” /domain 查看域控列表 net time /domain nltest /dclist:[域名] 查看域控機器名 dsquery server 得到域控制器的IP netdom query pdc ipconfig /all 查看dns 掃描139等不常見但域控會開啟的端口4.獲取域控的方法(這里不說釣魚欺騙類的這種,中繼后續都開了SMB簽名也不說吧) (1).抓域管密碼橫向 (2).通過域管進程橫向 (3)利用已知漏洞(打印機,14068,zerologon等) (4)委派攻擊 (5)利用第三方軟件如郵服等 (6)組策略做密碼復用 (7)金銀票據(主要用來做維權的,多學點沒錯,也寫在這里吧)5.判斷域環境net time /domainipconfig /allsysteminfo net config workstation工具
用戶
用戶爆破
https://github.com/ropnop/kerbrute
用戶枚舉
https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn
https://github.com/mubix/netview/
獲取服務用戶
kerberoast
GetUserSPNs.ps1
ip
(1)nbtscan.exe
(2)arpscan.exe
(3)ServerScan https://github.com/Adminisme/ServerScan
(4)msf模塊
auxiliary/scanner/discovery/arp_sweep
auxiliary/scanner/discovery/udp_sweep
auxiliary/scanner/discovery/udp_probe
auxiliary/scanner/netbios/nbname
端口
端口爆破
PortBrute https://github.com/awake1t/PortBrute
服務
MSF
auxiliary/scanner/smb/smb_version
auxiliary/scanner/ftp/ftp_version 發現ftp
auxiliary/scanner/ssh/ssh_version 發現ssh
auxiliary/scanner/telnet/telnet_version 發現telnet
auxiliary/scanner/mysql/mysql_version 發現mysql
密碼爆破
https://github.com/fireeye/gocrack
https://github.com/dafthack/DomainPasswordSpray
web掃描
https://github.com/broken5/bscan
https://github.com/phantom0301/PTscan
域與非域集合工具
網絡安全學習攻略·資料
(1)Seatbelt.exe
Seatbelt.exe -group=user -full 運行普通用戶權限檢查的模塊 -full返回輸出
Seatbelt.exe -group=all 運行所有模塊(需要管理員權限)
Seatbelt.exe -group=system #運行檢查系統相關的信息
Seatbelt.exe -group=misc #運行所有其他檢查(包括瀏覽器記錄)
Seatbelt.exe -group=chrome 運行瀏覽器歷史等模塊
(2)BloodHound
https://github.com/BloodHoundAD/BloodHound/releases
(3)WinPwn
https://github.com/S3cur3Th1sSh1t/WinPwn/
(4)domainTools
https://github.com/SkewwG/domainTools
(5)Rubeus.exe
https://github.com/GhostPack/Rubeus
(6)powerview && powersploit
(7)fscan
https://github.com/shadow1ng/fscan
集合腳本
(1)wmic for /f "delims=" %%A in ('dir /s /b %WINDIR%\system32\*htable.xsl') do set "var=%%A" wmic process get CSName,Description,ExecutablePath,ProcessId /format:"%var%" >> out.html wmic service get Caption,Name,PathName,ServiceType,Started,StartMode,StartName /format:"%var%" >> out.html wmic USERACCOUNT list full /format:"%var%" >> out.html wmic group list full /format:"%var%" >> out.html wmic nicconfig where IPEnabled='true' get Caption,DefaultIPGateway,Description,DHCPEnabled,DHCPServer,IPAddress,IPSubnet,MACAddress /format:"%var%" >> out.html wmic volume get Label,DeviceID,DriveLetter,FileSystem,Capacity,FreeSpace /format:"%var%" >> out.html wmic netuse list full /format:"%var%" >> out.html wmic qfe get Caption,Description,HotFixID,InstalledOn /format:"%var%" >> out.html wmic startup get Caption,Command,Location,User /format:"%var%" >> out.html wmic PRODUCT get Description,InstallDate,InstallLocation,PackageCache,Vendor,Version /format:"%var%" >> out.html wmic os get name,version,InstallDate,LastBootUpTime,LocalDateTime,Manufacturer,RegisteredUser,ServicePackMajorVersion,SystemDirectory /format:"%var%" >> out.html wmic Timezone get DaylightName,Description,StandardName /format:"%var%" >> out.html(2)powershell Function Get-InstalledSoftware{<#.SYNOPSISGets a computers Name, Operating System,OS Architecture and all installed Software Name,Version and IdentifyingNumber.Returns it all in a powershell object..EXAMPLEGet-InstalledSoftware -computername localhost.EXAMPLEGet-InstalledSoftware -computername comp1,comp2,comp3.EXAMPLEGet-Content computers.txt | Get-InstalledSoftware | Export-Csv C:\SoftwareReport.csv.PARAMETER computernameOne or more computer names seperated by comma.#>[CmdletBinding()]param([Parameter(Mandatory=$true,ValueFromPipeline=$true)][string[]]$ComputerName)BEGIN{}PROCESS {foreach($computer in $ComputerName){try {$software = Get-WmiObject -Class Win32_Product -ComputerName $ComputerName -ErrorAction Stop} catch {Write-Host "$computer Offline"}$os = Get-WMIObject -Class win32_operatingsystem -ComputerName $ComputerName$osname = ($os.Name).Split("|") | Select-Object -First 1 foreach($installed in $software){$props = [ordered] @{'ComputerName' = $os.PSComputerName;'OperatingSystem' = $osname;'Archtecture' = $os.OSArchitecture;'Name' = $installed.Name;'Version' = $installed.Version;'Vendor' = $installed.Vendor;'IdentifyingNumber' = $installed.IdentifyingNumber} $obj = New-Object -TypeName psobject -Property $propsWrite-Output $obj}}}END{} }最后
自動化方便是一回事,必然會帶來弊端。動靜大,易查殺等。腳本小子終究只是一時爽。最后還是要自己走安全開發自己寫工具,在特定的環境下能實現功能才行。就難得總結工具了,多培養培養思維多學習學習底層還是長久之道。
這篇文章只是拋磚引玉給大家提供一個思路,還有很多東西沒用收到。但是信息收集和漏洞利用總是相依相存的。比如委派,郵服這些。或者是需要一些漏洞利用鏈的時候。擴大自己的攻擊技術和攻擊面,了解新的攻擊方式應該是最重要的,可能一條路不同我換了一種攻擊方式,搜集一下需要實現的前置條件都滿足,自然也就打下來了。隨機應變。有些工具是之前收集的說實話都沒有用上過,所以工具在精在順手不在多。選擇合適自己的才最重要。參考文獻
福利
關注私我獲取更多【網絡安全學習攻略·資料】
總結
以上是生活随笔為你收集整理的【安全技术】红队之windows信息收集思路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【网络安全】一个堆题inndy_note
- 下一篇: 【网络安全】Windows cmd的命令