Hackthebox-Doctor
文章目录
基本介绍
靶机介绍
难度为 easy, 操作系统为 Linux。
工具列表
User flag
端口扫描就服务发现
使用 Nmap 进行全 TCP 端口扫描
|
|
Not shown: 65532 filtered ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 8089/tcp open unknown
开放了三个端口, 继续进行服务枚举:
{% blockquote %}
|
|
PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.4.41 ((Ubuntu)) |_http-server-header: Apache/2.4.41 (Ubuntu) |http-title: Doctor 8089/tcp open ssl/http Splunkd httpd | http-robots.txt: 1 disallowed entry |/ |_http-server-header: Splunkd |_http-title: splunkd | ssl-cert: Subject: commonName=SplunkServerDefaultCert/organizationName=SplunkUser | Not valid before: 2020-09-06T15:57:27 |_Not valid after: 2023-09-06T15:57:27 Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel {% endblockquote %}
可见很常见的 SSH 和 Apache, 版本维持一贯很新的特点, 而 8089 端口上的 Splunkd 相对比较陌生。
Web 探测
使用浏览器查看:
对该页面进行一番探测, 并没有什么收获; 倒是页面中间的邮箱地址 info@doctors.htb 才是关键, htb 一贯的套路, 将 doctors.htb 添加到 /etc/hosts, 再次访问网页便能访问到与之前不同的页面。
下面可以注册账户, 不过账户的有效期只有 20 min, 注册之后可以进入以下页面:
SSTI 利用
点击 New Message 可以添加 Post, 随便写一个:
查看以上页面源码可发现被注释掉的一行代码:
|
|
访问该 URI 并查看源码可见 post 的 title 出现在了里面:
|
|
那么, 能否利用 title 注入一些东西呢? 发现该网站使用 Flask 开发:
Flask 中经常使用模板进行开发, 于是锁定在了 SSTI (服务端模板注入) 上。首先使用 {{7*7}} 这种简单的 payload 来进行探测, 确定存在漏洞。然后就是痛苦的构造过程了, 具体参考链接 2, 3, 4; 最终构造出 payload 如下, 访问 /archive, 反弹 shell 连接至我的机器:
|
|
横向越权
讲真这块让我自己想打死也想不到, 这台机器还有另一个账户 shaun, 参考了别人的 walkthrough 才发现密码在 Apache 的日志中泄漏了。在 /var/log/apache2 中搜索关键字:
|
|
可以发现以下的条目:
使用该密码进行登陆, 成功拿到 user.txt:
Root flag
该机器上运行着 Splunk universal forwarder, 只要拥有凭据就可以利用其部署自己构造的恶意 app, 而 splunkd 是以 root 权限运行的, 从而利用其反弹 shell 来提升至 root 权限。利用参考链接 5 中的 PySplunkWhisperer2_remote.py:
|
|
成功拿到 root.txt:
总结
HTB 虽说贴近真实环境, 但也是有套路的, 如添加 /etc/hosts, 也了解到有些机器获取域名这一步就很困难, 看来得先熟悉套路, 要不开始即卡死。Web 这块确实是我的软肋, 这只是一个基础的 SSTI, 没有任何过滤机制, 现实中能否见到同样的就比较难说了。真实的 SSTI 利用过程可以参考链接 1, 可见熟悉各个模板引擎的特征和区分才是重头戏。Enum, 再 enum, 加油。
参考链接
文章作者 Josephine
上次更新 2020-10-29