No.181-HackTheBox-Linux-PlayerTwo-Walkthrough渗透学习
**
HackTheBox-Linux-PlayerTwo-Walkthrough
**
靶机地址:https://www.hackthebox.eu/home/machines/profile/221
靶机难度:疯狂(5.0/10)
靶机发布日期:2020年6月23日
靶机描述:
PlayerTwo is an insane difficulty Linux machine featuring multiple technologies and vulnerabilities. Vhost and directory enumeration yields source code for the protobuf service, that is used to query the server. This provides credentials used to login and gain access to firmware. The firmware is modified in order to execute commands on the server and gain a foothold. The server is found to be passing messages over MQTT, and contain a user’s SSH key. This user is
found to have access to a SUID binary that is vulnerable to multiple vectors, leading to a root shell.
作者:大余
时间:2020-08-12
请注意:对于所有这些计算机,我是通过平台授权允许情况进行渗透的。我将使用Kali Linux作为解决该HTB的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,我概不负责。
一、信息收集

可以看到靶机的IP是10.10.10.170…

我这里利用Masscan快速的扫描出了22,80,8545端口,在利用nmap详细的扫描了这些端口情况…
端口8545的脚本扫描出了一些错误消息,例如字符串twirp_invalid_route…Twirp,这是一个RPC框架还进行服务的交互…开始

访问出错了,但是可看到出现了域名:MrR3boot@player2.htb,以及player2.htb添加入hosts…

可看到该页面指的是公司采用了protobs协议…

不管如何,先爆破,发现了挺多目录,慢慢枚举…

开始就发现了DNS这块,就挂着利用wfuzz进行了枚举,发现了:product.player2.htb
这是Protobs Portal的登录页面…

枚举该页面,发现了挺多目录,api吸引了我注意…

继续爆破,发现了totp.php…

利用工具分析看看…

利用burpsuit拦截分析…

https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm
curl测试API在发送GET请求时引发了错误,表明有一个无效的会话…
关于TOTP产生了这个wiki,根据google维基,是基于时间的一次性密码算法(TOTP)用于根据当前时间生成一次性密码(OTP)…

https://github.com/twitchtv/twirp/blob/master/docs/routing.md
了解Twirp的工作原理后,我发现在模糊API方面并没有太多价值,而是需要查找.proto文件…
利用gobuster暴力破解.proto文件,找到了generated.proto…

该文件为twirp.player2.auth包定义了一个名为Auth的服务,服务定义GenCreds()方法,该方法接受计数(Number)并返回凭据(Creds),可以使用该文件来生成此服务的客户端,这里可以用多种语言完成例如Go,Python,PHP等…
或者可以从GitHub版本中下载协议编译器…很多方法,我这里利用了burpsuit进行拦截抓取…
Protocol Buffers v3.12.3
twirp_invalid_route

开始拦截是正常的返回值…这里将Content-Type类型修改和Response输出一致后,获得了失败的输出…这是很好的结果…

通过修改type搞砸了后,以及generated.proto的源码提示,输入Number0~3,都能获得4个循环的不同组合用户和密码…

这儿发现不止数字,随意字符也能读取到数据库中的用户名密码,通过每次的访问获取,收集了4组不同的用户名密码,在通过hydra进行了页面枚举…最终获得了正确的用户名密码…简单操作跳过了

通过hydra枚举可登录用户名密码:
mprox
tR@dQnwnZEk95*6#
0xdf
XHq7_WJTA?QD_?E2
通过枚举到的用户名密码,登录了前面枚举到的totp登录页面…页面提示:
You can either use the OTP that we sent to your mobile or the backup codes that you have with you.
需要输入验证码…又是OTP,应该是需要回到页面中注入抓取了…

直接拦截了该OTP页面信息,当不输入任何数值返回了Nope等串信息错误…

当回想起前面API时,我添加了api,获得了会话失败…这里有戏

当把从刚登陆时的页面,登陆中的页面,以及输入OTP后的页面,全部拦截后进行了分析,重新输入刚用户名密码登录时,就会出现Missing…,按照Number输入试试…

果然在最开始的时候,获得了OTP值…

将其输入到表单中,登录到Protobs站点…

翻到最下面可看到here是个隐藏链接…
这里邮箱注入没法获得什么信息…

这是个PDF文档…文档介绍了如何对固件进行签名和验证以防止伪造品…
可看到签名被计算并添加到实际代码之前,即二进制数据中…

流程图描述了如何进行更新和签名验证…
在文档的底部看到了固件的网址以及/protobs页面…

/protobs页面是个上传文件的页面…应该是开始文件上传提权了…
方法1:

将固件下载了下来包含了三个文件信息…

通过PDF文档上的签名过程,看到签名是使用程序计算的代码和哈希函数,服务器可能会忽略一些初始字节程序代码,这就可以利用代码绕过验证,在利用GHex分析了Protobs.bin信息后发现了问题…
只需要修改利用stty部分代码空间即可…

测试了ping是成功的,那么直接写入shell即可…

写入shell…

通过写入的shell,上传后获得了反向外壳…
方法2:

可看到没利用提供的固件进行提权,写了个简单的输出PHP脚本,打包成压缩文件包…上传后bp拦截

通过几十次的bp拦截上传循环操作,发现了文件上传页面不是全方位的返回404,而是也有成功的上传代码返回…

这里将php-rever-shell提权脚本压缩后,利用该方法上传循环…获得了反向外壳…

可看到1883端口很可疑,google查找了该端口的服务是mqtt协议…利用chisel原理转发到本地kali上nmap确认下…

google找开源的chisel即可…

下载后开启本地监听即可…

然后将chisel上传到靶机后,将端口转发到本地kali…

http://mqtt.org/
果然是MQTT的实例,MQTT是一种机器对机器的连接协议…

google找了该EXP的一些方法文章,可利用mosquitto进行枚举获取信息…
apt install mosquitto-clients 本地下载

命令:mosquitto_sub -t '$SYS/#' -h 127.0.0.1 -p 1883
通过尝试,获取到了id_rsa密匙信息…

利用获取的id_rsa登录了observer用户…并获得了user_flag信息…

Mosquitto是以root身份运行,并获得了~/.ssh/id_rsa文件,如果将其更改为符号链接的话,就可以通过/root/root.txt获取root标志…
通过尝试,果然获得了root_flag信息…靶机通关了…操作真骚气…
正常的道路应该不是这么走的…继续研究下…

LinEnum枚举发现了Protobs二进制程序…

发现它使用的是同一文件夹中存在的非系统libc运行的,应该是存在缓冲区溢出漏洞的…

scp全部传到本地kali上进行分析…
分析发现这是存在程序中libc泄露了,以及存在空字节覆盖漏洞…
这里能力还是太差了,分析到一半EXP就写不下去了,还是基础得慢慢打,一下蹦太高写不出来…
这里就不写下去了,等逆向汇编基础打深了,在回来战它…
由于我们已经成功得到root权限查看user和root.txt,因此完成这台疯狂的靶机,希望你们喜欢这台机器,请继续关注大余后期会有更多具有挑战性的机器,一起练习学习。
如果你有其他的方法,欢迎留言。要是有写错了的地方,请你一定要告诉我。要是你觉得这篇博客写的还不错,欢迎分享给身边的人。

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
