未授权漏洞总结

这里总结了常见的未授权漏洞,都属于高危或严重漏洞,由于使用默认配置和root权限启动暴露在公网上,很容易被攻击甚至getshell,由于其原理非常简单,所以很容易被利用。例如,你的阿里云主机开redis,10分钟就有挖矿进程注入了,攻击者们都是对这些云服务提供商批量扫描的,所以在后面,我们也会放上poc,这些poc也集成在我们的RubScanner扫描器中。

  • Redis
  • Memcached
  • MongoDB
  • Elasticsearch
  • Jenkins

Redis

详见 Redis 未授权访问漏洞利用分析

Memcached

详见 Memcached UDP DDoS利用复现

MongoDB

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

其与MySQL等数据库类似,由于支持远程访问,而其默认不需要密码,导致一旦在公网暴漏,任何人都可以访问数据库,造成严重危害。POC非常简单,只需要尝试是否连接成功即可:

1
2
3
4
5
6
7
8
9
10
import pymongo
def testMongoDB(ip, port=27017):
try:
conn = pymongo.MongoClient(ip,port,socketTimeoutMS=3000)
dbname = conn.database_names()
if dbname:
return True
except:
return False

Elasticsearch & Kibana

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图表、表格、地图等kibana能够很轻易地展示高级数据分析与可视化。

es 和 kibana 均没有权限管理, 均可对日志进行搜索分析,危害非常大。 其中Kibana默认是可以看到所有表、字段等等,又是可视化界面,攻击者会乐哭的。

如下图,为从zoomeye搜索得到的,可以看到其所有日志表名和字段名:
Kibana

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
29
import requests
from urllib.parse import urljoin
import re
def testElasticSearch(ip, port=9200):
url1 = ip+':'+str(port)
url2 = urljoin(ip+':'+str(port), '_cat')
try:
res1 = requests.get(url=url1, timeout=10)
res2 = requests.get(url=url2, timeout=10)
if re.match('You Know, for Search', res1.text, re.IGNORECASE) or '/_cat/master' in res2.text:
return True
else:
return False
except:
return False
def testKibana(ip, port=5601):
url1 = ip+':'+str(port)
url2 = urljoin(ip+':'+str(port), 'app/kibana')
try:
res1 = requests.get(url=url1, timeout=10)
res2 = requests.get(url=url2, timeout=10)
if re.match('kibana', res1.text, re.IGNORECASE) or 'Loading Kibana' in res2.text or 'kibanaWelcomeView' in res2.text:
return True
else:
return False
except:
return False

Jenkins

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。

其基本信息(用户、队列)等信息是可以被直接访问的,script等脚本执行不一定可以被执行(没有runscript权限)。

1
2
3
4
5
6
7
8
9
def testJenkins(ip, port=8080):
url = urljoin(ip+':'+str(port), 'script')
try:
res = requests.get(url, timeout=10)
if re.match('Authentication required', res.text, re.IGNORECASE):
return False
return True
except:
return False