很多新入門的同學在在拿下一台服務器權限後經常會出現不知道做什麼的問題,往往就會不管三七二十一提權exp 一頓砸,在宕機的邊緣瘋狂試探。
那麼,在實際情況中,當我們拿到一台服務器的權限時,應該怎麼做呢?
首先,需要看這台服務器是否是邊界,是否可以放置後門持續訪問。其次就是信息收集,只有在收集完整信息時,才能方便我們下一步的滲透工作有利展開。
windows 系統下的信息收集其實主要可以分為三個方向:系統信息、拓撲信息、憑證信息
系統信息包括當前系統、進程信息,用戶權限,用戶操作等。主要針對當前系統進行信息收集整理。
拓撲信息包括網絡拓撲發現,內網其他存活主機發現,域信息收集等。主要針對內網拓撲環境進行信息收集。
憑證信息包括用戶憑證信息、系統用戶hash、DPAPI、常用軟件密碼記錄等。可以用來橫向滲透。
本文主要簡要介紹前兩項收集內容,至於憑證信息收集不定期發布。
一、本機信息
1、系統程序
收集系統信息,包括操作系統版本,已安裝補丁列表等。通常使用以下方法收集:
1 2 3 |
net config workstation/server # 查询简易系统信息 systeminfo # 查询全部内容 wmic qfe get Caption,Description,HotFixID,InstalledOn # 查询已安装的补丁列表 |
systeminfo
命令查詢內容最全,但如果系統更新的補丁較多,可能會導致反應反應時間過長;使用webshell執行此命令可能會因為超時導致無法正常回顯,或回顯內容長度過長,無法全部顯示。
2、進程服務
1 2 3 4 5 6 7 |
tasklist /v # 查询正在运行的进程 wmic product get name,version # 查询所有安装过的软件及版本 powershell "Get-WmiObject -class Win32_Product |Select-Object -Property name,version" # 使用 powershell 查询所有安装过的软件及版本,效果和 wmic 相同 wmic service list brief # 查询当前机器的服务信息 wmic startup get command,caption # 查看启动项 schtasks /query /fo LIST /v # 查看任务计划 |
netsh
及相關命令查看。
1 2 3 4 5 6 7 8 |
netsh firewall show config # 查看防火墙信息,但 firewall 命令已弃用,可使用 advfirewall 命令代替 netsh advfirewall firewall show rule name=all # 查看配置规则 netsh advfirewall set allprofiles state off\on # 关闭防火墙\开启防火墙 netsh advfirewall export\import xx.pol # 导出\导入配置文件 netsh advfirewall firewall add rule name=”deny tcp 139″ dir=in protocol=tcp localport=139 action=block # 新建规则阻止TCP协议139端口 netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow # 新建规则允许3389通过防火墙 netsh advfirewall firewall delete rule name=Remote Desktop # 删除名为Remote Desktop的规则 netsh interface |
3、用戶信息
1 2 3 4 5 6 7 8 9 10 11 12 13 |
whoami # 当前用户 quser # 查询登录用户,同 query user qwinsta # 查询登录用户,同 query user query user # 查询登录用户 query session # 查询会话 query termserver # 查询远程桌面主机列表。 net accounts # 查询域密码策略 net user # 查询本地用户列表 net user "$username" # 查询指定用户 net localgroup # 查询本地用户组列表 net localgroup "$groupname" # 查询指定用户组成员 net group # 仅域控可执行,查询用户组列表 net group "$groupname" # 仅域控可执行,查询用户组成员 |
quser
、qwinsta
和query
命令只存在於允許安裝RDP服務的主機上,官方描述其僅存在於server 2012及以上版本存在。其中query termserver
命令存在問題,本地測試時與描述嚴重不符,無法列出信息。
4、操作記錄
cmd 和powershell v3 以下的操作記錄無法長時間保存,僅限當前窗口。
1 2 3 4 5 |
Get-History | Format-List -Property * # 查询 powershell 当前窗口历史操作记录 Clear-History # 删除 powershell 当前窗口历史操作记录 Clear-History -Id 3 # 删除 powershell 当前窗口指定 ID 的历史操作记录 doskey /h # 查看 cmd 的历史操作记录 doskey /reinstall # 删除 cmd 的历史操作记录 |
powershell v5 以上的操作歷史記錄會直接保存在指定文件中。直接查看即可。
1 2 |
# 查看 powershell 历史操作记录 type %appdata%\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt |
Get-PSReadlineOption
。
1 |
msiexec /q /i PackageManagement_x64.msi |
內網網絡發現是一個很重要的信息收集內容,一般情況下是不建議使用掃描器掃描,尤其不建議使用nmap,當然,如果是靶場,或是甲方授權就另當別論。
1、基本信息收集
1 2 3 4 5 6 7 8 9 10 |
ipconfig /all # 列出当前主机详细网络信息 ipconfig /displaydns # 列出dns缓存信息 route print # 查询路由表 arp -a # 地址解析协议缓存表 netstat -ano # 端口使用情况 net share # 查看共享信息 net view # 查看共享资源列表 wmic share get name,path,status # 查看共享信息 # 查看 host 文件 type c:\Windows\system32\drivers\etc\hosts |
2、SPN 信息收集
SPN :服務主體名稱。使用Kerberos須為服務器註冊SPN,因此可以在內網中掃描SPN,快速尋找內網中註冊的服務,SPN掃描可以規避像端口掃描的不確定性探測動作。
主要利用工具有:setspn、GetUserSPNs.vbs和Rubeus。
利用Windows 自帶的setspn 工具
普通域用戶權限執行即可
1 |
setspn -T domain.com -Q / |
利用GetUserSPNs.vbs
使用Rubeus 工具
3、協議探測
icmp 協議
回顯直接
1 |
for /l %i in (1,1,255) do @ ping 10.0.0.%i -w 1 -n 1|find /i "ttl=" |
輸出文件
1 |
@for /l %i in (1,1,255) do @ping -n 1 -w 40 192.168.0.%i & if errorlevel 1 (echo 192.168.0.%i >> ip.txt) else (echo 192.168. 0.%i >> ip.txt) |
Netbios 協議
msf 掃描
1 |
msf > use auxiliary/scanner/netbios/nbname |
nbtscan 掃描,下載:
1 |
http://www.unixwiz.net/tools/nbtscan.html#download |
參數:
1 |
-m 192.168.1.0/24 |
UDP 協議
msf
1 |
msf > use auxiliary/scanner/discovery/udp_probemsf > use auxiliary/scanner/discovery/udp_sweep |
smb-version
python版:
1 |
https://github.com/amitn322/smb-version |
c#版:
1 |
https://www.zcgonvh.com/post/CSharp_smb_version_Detection.html |
SNMP 協議
msf
1 |
msf > use auxiliary/scanner/snmp/snmp_enum |
4、系統日誌
可以使用wevtutil.exe psloglist.exe或者powershell的Get-WinEvent
模塊進行日誌導出,server 03的域控可使用eventquery.vbs導出。
wevtutil 不需要UAC, 支持很多過濾語法,若有需要請查看官方說明。
1 2 3 4 5 6 |
# 查询登录日志语法 wevtutil qe security /f:text /q:*[System[(EventID=4624)]] # 查询所有登录、注销相关的日志语法 wevtutil qe security /rd:true /f:text /q:"*[system/eventid=4624 and 4623 and 4627]" # 远程查询时在后面加入/r:computer /u:user /p:password 比如查询dc1上的登录注销日志 wevtutil qe security /rd:true /f:text /q:"*[system/eventid=4624 and 4623 and 4672]" /r:dc1 /u:administrator /p:password |
本地使用LogParser 日誌分析工具整理導出的日誌,然後去除重複數據、無效數據(以’$’ 結束的用戶名)
LogParser.exe -i:EVT -o txt “SELECT TO_UPPERCASE(EXTRACT_TOKEN(Strings,5,’|’)) as USERNAME,TO_UPPERCASE(EXTRACT_TOKEN(Strings,18,’|’)) as SOURCE_IP FROM C:\ProgramData\log .evtx” > C:\ProgramData\log.txt
導出域控登錄日誌到域控上:
wevtutil epl Security C:\ProgramData\dc.evtx /q:”*[EventData[Data[@Name=’LogonType’]=’3′] and System[(EventID=4624) and TimeCreated[timediff(@SystemTime) < = 2592000000]]]” /r:域控IP /u:域管/p:域管密碼
5、瀏覽器日誌
收集瀏覽器訪問記錄。
chrome
C:\Users $ username\AppData\Local\Google\Chrome\User Data\Default\History
firefox
C:\Users $ username\AppData\Roaming\Mozilla\Firefox\Profiles $ name.default\places.sqlite
IE
reg query “HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs” 或C:\Users $ user\AppData\Local\Microsoft\Windows\History
edge, v79+:
C:\Users $ user\AppData\Local\Microsoft\Edge\User Data\Default\History
v44+
C:\Users $ user\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat
瀏覽器的歷史記錄文件history,是使用sqlite 格式記錄的,直接打開是一個二進製文件,可以下載到本地破解,或者直接替換查看。
需要注意的是,edge v44+ 版本的歷史記錄文件在用戶登錄狀態下是鎖定的。
6、DNS 服務器記錄
如果目標機器在域內,只需要按部就班收集域信息,準備域橫向滲透即可。
但其中有一點單獨提一下,一般在域環境中都會有一台DNS 服務器,小企業或內網環境較小的可能會和域控為同一台,大一些的企業,多為獨立的DNS 服務器。
由於DNS 服務器的特性,因此,在DNS 服務器上會存在大量內網地址解析記錄,如果可以獲取,會極大的方便內網拓撲展開,同時很多其他主機無法到達的地址,DNS 服務器是可以到達的。
列出DNS 區域中當前節點的資源記錄
dnscmd . /EnumZones
列出test.com 的信息
dnscmd . /ZoneInfo test.com
列出test.com 中的詳細記錄
dnscmd . /ZonePrint test.com
列出test.com 中的記錄
dnscmd . /EnumRecords test.com
DNS 記錄有正向解析和反向解析兩種。
正向解析是從域名到IP,反向解析則是從IP 到域名。
反向隔離和正向隔離相同,都會有一個對應的區域,因此,查詢方式與正向記錄相同。
DNS 服務器還存在域傳送漏洞。可以直接獲得DNS 記錄。
nslookup -type=all_ldap._tcp.dc.greyfinger.com
nslookup -type=ns domain.com
cmd> nslookup server dns.domain.com ls domain.com
三、域信息查詢
1、基本信息收集
域信息收集,需要當前用戶為域用戶。本地用戶無法執行域命令查詢域內容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
net config workstation # 查询当前登录域 net time # 同步时间,通常为域控服务器 net accounts /domain # 查询域密码策略 net user /domain # 列出当前域成员列表 net user username /domain # 列出域成员详细信息 net group /domain # 列出域内组列表 net group groupname /domain # 列出域内组成员列表 net view # 查询同一域内机器列表 net view /domain # 查询域列表 net view /domain:test # 查询 test 域中计算机列表 nltest /dclist:domain # 查询域内的所有DC nltest /dsgetdc:domain # 拿到DC当前的认证信息 nltest /domain_trusts # 查询域信任信息 nltest /user:"username" # 得到用户信息 |
domain admin
和domain controllers
組,需要注意的是,組名會隨系統語言變化而變化,如domain controllers
會變化成domaine contrôleurs
。
在域內其他機器上,查詢組是net group /domain
,而在域控上則是net group
。
2、dsquery
dsquery 命令很少使用,而且限制較大僅能在域控上執行,所以相對而言較為雞肋,但是在一定條件下還是具有一定的使用價值。
1 2 3 4 5 6 |
dsquery computer # 查询目录中的计算机 dsquery contact # 查询目录中的联系人 dsquery subnet # 查询目录中的子网 dsquery group # 查询目录中的组 dsquery site # 查询目录中的站点 dsquery user # 查询目录中的用户 |
1 2 3 4 5 6 7 8 |
# 查询当前Domain信息 [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain() # 查询域信任关系 ([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).GetAllTrustRelationships() # 查询当前林信息 [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest() # 查询林信任信息 ([System.DirectoryServices.ActiveDirectory.Forest]::GetForest((New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext('Forest', 'forest-of-interest.local')))).GetAllTrustRelationships() |
配置文件
IIS 配置文件路徑為:
%windir%\system32\inetsrv\config\applicationHost.config
使用appcmd 的方式可以快速導出所需內容:
%windir%\system32\inetsrv\appcmd list site /config %windir%\system32\inetsrv\appcmd list site /config /xml > c:\sites.xml
密碼保存
navicat
數據庫 | 路徑 |
---|---|
MySQL | HKEYCURRENTUSER\Software\PremiumSoft\Navicat\Servers\ |
MariaDB | HKEYCURRENTUSER\Software\PremiumSoft\NavicatMARIADB\Servers\ |
MongoDB | HKEYCURRENTUSER\Software\PremiumSoft\NavicatMONGODB\Servers\ |
Microsoft SQL | HKEYCURRENTUSER\Software\PremiumSoft\NavicatMSSQL\Servers\ |
Oracle | HKEYCURRENTUSER\Software\PremiumSoft\NavicatOra\Servers\ |
PostgreSQL | HKEYCURRENTUSER\Software\PremiumSoft\NavicatPG\Servers\ |
SQLite | HKEYCURRENTUSER\Software\PremiumSoft\NavicatSQLite\Servers\ |
SecureCRT
系統版本 | 路徑 |
---|---|
xp/win2003 | C:\Documents and Settings\USERNAME\Application Data\VanDyke\Config\Sessions |
win7/win2008以上 | C:\Users\USERNAME\AppData\Roaming\VanDyke\Config\Sessions |
Xshell
版本 | 路徑 |
---|---|
Xshell 5 | %userprofile%\Documents\NetSarang\Xshell\Sessions |
Xshell 6 | %userprofile%\Documents\NetSarang Computer\6\Xshell\Sessions |
WinSCP
HKCU\Software\Martin Prikryl\WinSCP 2\Sessions
VNC:
版本 | 路徑 | 類型 |
---|---|---|
RealVNC | HKEYLOCALMACHINE\SOFTWARE\RealVNC\vncserver | Password |
TightVNC | HKEYCURRENTUSER\Software\TightVNC\Server Value | Password or PasswordViewOnly |
TigerVNC | HKEYLOCALUSER\Software\TigerVNC\WinVNC4 | Password |
UltraVNC | C:\Program Files\UltraVNC\ultravnc.ini | passwd or passwd2 |
五、總結
本文主要總結了在拿到服務器權限之後信息收集的主要命令和工具,對於沒有相關經驗的人來說看上去是懵逼狀態,對於收集的信息如何使用,為什麼要收集這些信息沒有什麼概念,但是對於正在實踐的人來說,是一個參考手冊,照著操作一遍,理解收集的信息有什麼用,久而久之,這些就變成了自己常規的操作,成為自己技能的一部分。
轉自:信安之路