作者名:Demo不是emo
主页面链接:主页传送门
创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷
座右铭:不要让时代的悲哀成为你的悲哀
专研方向:网络安全,数据结构每日emo:爱是深渊
目录
一:windows信息收集简介
windows 系统下的信息收集其实主要可以分为三个方向:系统信息、拓扑信息、凭证信息
系统信息包括当前系统、进程信息,用户权限,用户操作等。主要针对当前系统进行信息收集整理。
拓扑信息包括网络拓扑发现,内网其他存活主机发现,域信息收集等。主要针对内网拓扑环境进行信息收集。
凭证信息包括用户凭证信息、系统用户 hash、DPAPI、常用软件密码记录等。可以用来横向渗透。
二:信息收集大纲
1、本机信息
[1]、系统程序
收集系统信息,包括操作系统版本,已安装补丁列表等。通常使用以下方法收集:
net config workstation # 查询简易系统信息
systeminfo # 查询全部内容
wmic qfe get Caption,Description,HotFixID,InstalledOn # 查询已安装的补丁列表
注意:
其中systeminfo命令查询内容最全,但如果系统更新的补丁较多,可能会导致反应反应时间过长;使用 webshell 执行此命令可能会因为超时导致无法正常回显,或回显内容长度过长,无法全部显示。
[2]、进程服务
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
# 查看任务计划
windows 自带防火墙及特殊过滤规则等网络访问均可使用netsh及相关命令查看。
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]、用户信息
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 以下的操作记录无法长时间保存,仅限当前窗口。
Get-History | Format-List -Property * # 查询 powershell 当前窗口历史操作记录
Clear-History # 删除 powershell 当前窗口历史操作记录
Clear-History -Id 3 # 删除 powershell 当前窗口指定 ID 的历史操作记录
doskey /h # 查看 cmd 的历史操作记录
doskey /reinstall # 删除 cmd 的历史操作记录
可以通过向进程发送键盘内容的方式将运行中的窗口历史操作记录导出。
powershell v5 以上的操作历史记录会直接保存在指定文件中。直接查看即可。
# 查看 powershell 历史操作记录
type %appdata%\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
powershell v3、v4 版本需要安装Get-PSReadlineOption。
2、网络发现
内网网络发现是一个很重要的信息收集内容,一般情况下是不建议使用扫描器扫描,尤其不建议使用 nmap,当然,如果是靶场,或是甲方授权就另当别论。
[1]、基本信息收集
ipconfig /all # 列出当前主机详细网络信息
ipconfig /displaydns # 列出dns缓存信息
route print # 查询路由表
arp -a # 地址解析协议缓存表
netstat -ano # 端口使用情况
net share # 查看共享信息
net view # 查看共享资源列表
wmic share get name,path,status # 查看共享信息
type c:\Windows\system32\drivers\etc\hosts # 查看 host 文件
[2]、系统日志
可以使用 wevtutil.exe psloglist.exe 或者 powershell 的Get-WinEvent模块进行日志导出,server 03 的域控可使用 eventquery.vbs 导出。
wevtutil 不需要 UAC, 支持很多过滤语法,若有需要请查看官方说明。
# 查询登录日志语法
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:域管密码
[3]、浏览器日志
收集浏览器访问记录。
chrome
C:\Users$username\AppData\Local\Google\Chrome\User Data\Default\History
firefox
C:\UsersUndefined control sequence \AppDataname.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+ 版本的历史记录文件在用户登录状态下是锁定的。
[4]、DNS 服务器记录
如果目标机器在域内,只需要按部就班收集域信息,准备域横向渗透即可。 但其中有一点单独提一下,一般在域环境中都会有一台 DNS 服务器,小企业或内网环境较小的可能会和域控为同一台,大一些的企业,多为独立的 DNS 服务器。 由于 DNS 服务器的特性,因此,在 DNS 服务器上会存在大量内网地址解析记录,如果可以获取,会极大的方便内网拓扑展开,同时很多其他主机无法到达的地址,DNS 服务器是可以到达的。
#列出 DNS 区域中当前节点的资源记录
dnscmd . /EnumZones
#列出 test.com 的信息
dnscmd . /ZoneInfo test.com
#列出 test.com 中的详细记录
dnscmd . /ZonePrint 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
3、域信息查询
[1]、基本信息收集
域信息收集,需要当前用户为域用户。本地用户无法执行域命令查询域内容。
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 命令很少使用,而且限制较大仅能在域控上执行,所以相对而言较为鸡肋,但是在一定条件下还是具有一定的使用价值。
dsquery computer # 查询目录中的计算机
dsquery contact # 查询目录中的联系人
dsquery subnet # 查询目录中的子网
dsquery group # 查询目录中的组
dsquery site # 查询目录中的站点
dsquery user # 查询目录中的用户
[3]、powershell
# 查询当前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()
4、配置文件收集
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
[1]、Navicat 密码默认保存位置
[2]、SecureCRT 软件默认密码保存地址