数据库是为了实现一定目的按某种规则和方法组织起来的“数据”的“集合”。数据库可以直观的理解为存放数据的仓库,而里面的数据按照一定的格式存放,便于查找。
数据库的作用
1.实现数据共享,减少数据的冗余度:同文件系统相比,由于数据库实现了数据共享,从而避免了用户各自建立应用文件,维护了数据的一致性,保持数据的独立性,提高可扩展性,利用数据库还可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。
2.抗灾能力:由数据库管理系统提供一套方法,可及时发现故障和修复故障,从而防止数据被破坏。数据库系统能尽快恢复数据库系统运行时出现的故障
数据库分类
关系型数据库:如Oracle、MySQL、PostgreSQL等,它们使用二维表格模型来组织数据,支持SQL查询语言,并且通常需要预定义数据类型
优点 易于理解 使用方便和易于维护
缺点是 缺少高并发 无法处理海量的数据 每一次查询都需要sql语句进行编译导致复杂查询性能差,同时在基于web结构中 数据库是最难进行横向扩展的
使用场景:超市 信用卡消费 图书馆 旅行社
优点 高并发读写 基于键值对数据没有耦合性 容易扩展并且支持高并发和分布式的数据处理,成本低廉
缺点 无事务处理 无法保证数据的完整性和安全性 并且成型时间太短 功能没有关系数据库完善
使用场景 社交网络 新闻网站和博客平台 IOT 电子商务
关系型数据库
Access数据库
Access 是微软公司推出的基于Windows的桌面关系数据库管理系统(RDBMS,即Relational Database Management System),是Office系列应用软件之一。它提供了表、查询、窗体、报表、页、宏、模块7种用来建立数据库系统的对象;提供了多种向导、生成器、模板,把数据存储、数据查询、界面设计、报表生成等操作规范化;为建立功能完善的数据库管理系统提供了方便,也使得普通用户不必编写代码,就可以完成大部分数据管理的任务
优点
存储方式简单,易于维护管理
- 面向对象。Access是一个面向对象的开发工具,这种基于面向对象的开发方式,使得开发应用程序更为简便
- 界面友好、易操作。Access是一个可视化工具,是风格与Windows完全一样,用户想要生成对象并应用,只要使用鼠标进行拖放即可,非常直观方便
- 集成环境、处理多种数据信息。Access基于Windows操作系统下的集成开发环境,该环境集成了各种向导和生成器工具,极大地提高了开发人员的工作效率
- 支持ODBC(开发数据库互连,Open Data Base Connectivity),利用Access强大的DDE(动态数据交换)和OLE(对象的联接和嵌入)特性
缺点
- 数据库过大,一般百M以上(纯数据,不包括窗体、报表等客户端对象)性能会变差
- 虽然理论上支持255个并发用户,但实际上根本支持不了那么多,如果以只读方式访问大概在100个用户左右
- 记录数过多,单表记录数过百万性能就会变得较差
- 不能编译成可执行文件(.exe),必须要安装Access运行环境才能使用
漏洞
Access相对其他数据库来说比较简单,只有一个数据库,里面存放着表、列以及数据,通过简单的语句就可以完成注入。一般通过联合注入、逐字猜解、偏移注入
1、更改数据库存储路径以及数据库名。默认情况下数据库会保存在网站的data目录下,而攻击者只需要对其下的数据库名进行爆破就可以直接下载数据库,修改数据库存储路径以及数据库名为一些难以猜解的名字,那么很多时候就能防止被人直接拿到数据库。
2、针对用户输入做基于黑白名单过滤,包括特殊字符和函数,如union、select、from、order、单引号、星号等。
3、安装WAF,能自动防范SQL注入同时针对网络攻击可以自定义过滤规则。
不过access数据库已经被逐渐被淘汰掉了
Mysql数据库
MySQL由瑞典MySQL AB公司开发,属于Oracle旗下产品。因为其速度、可靠性和适应性而备受关注,是流行的关系型数据库管理系统之一,采用关系模型来组织数据结构的数据库(二维表)
优点
跨平台开源免费,MySQL可以扩展到支持数百万个表和数百个连接。可以处理大量的并发查询和事务处理,具有高可靠性,能够保证数据的完整性和一致性,可以根据不同的应用程序和需求进行架构
缺点:
不支持完全事务和分布式事务导致可能会出现数据不一致的问题,不支持复杂的查询,导致查询速度变慢或查询结果不准确,不支持强制访问控制或加密,在安全性方面存在一些问题如数据泄露 篡改
数据库管理:MySQL需要一定的数据库管理技能,包括备份和恢复、调优和维护。
漏洞
OpenSSL存在远程代码执行漏洞,漏洞编号CVE-2022-1292
漏洞原因:由于c_rehashc脚本未正确清理shell元字符的问题,未经授权的攻击者可通过构造恶意数据,从而执行系统命令,导致远程代码执行。
受影响的应用版本:3.0.0
Mysql出现拒绝服务漏洞(CVE-2023-21912),
影响范围:5.0.0
漏洞成因MySQL的拒绝服务漏洞(CVE-2023-21912)是由于MySQL Server处理认证数据包的缺陷。具体来说,可能是由于对客户端设置字符集的处理不当,当客户端字符集设置为ucs2、utf16、utf16le等进行连接时导致异常34。未经身份验证的攻击者可通过多种协议访问 MySQL 服务器,成功攻击此漏洞可导致 MySQL 服务器挂起或频繁重复崩溃,造成拒绝服务攻击
以上两个漏洞现在可以根据官方的补丁进行修复, 还有很多的MySQL和提权漏洞,如 UDF 提权、MOF 提权漏洞 在网上也有很多资料 大家搜索就可以得到
H2database 特点 很快 嵌入式和服务器模式 Java sql数据库 端口20051
H2 数据库是一个用 Java 开发的嵌入式(内存级别)数据库,它本身只是一个类库,也就是只有一个 jar 文件,可以直接嵌入到项目中。
H2数据库又被称为内存数据库,因为它支持在内存中创建数据库和表。所以如果我们使用H2数据库的内存模式,那么我们创建的数据库和表都只是保存在内存中,一旦服务器重启,那么内存中的数据库和表就不存在了。
用途
- 同应用程序一起打包发布,可以非常方便地存储少量的结构化数据;
- 可以用于单元测试。启动速度快,而且可以关闭持久化功能,每一个用例执行完随即还原到初始状态;
- 可以作为缓存,即当做内存数据库,作为NoSQL的一个补充。当某些场景下数据模型必须为关系型,可以拿它充当Memcached(Memcached是一个自由开源的,高性能,分布式内存对象缓存系统)使用,作为后端MySQL/Oracle的一个缓冲层,缓存一些不经常变化但需要频繁访问的数据,比如字典表、权限表
漏洞
H2远程代码执行 CVE-2021-42392 JNDI 远程类加载
H2 数据库的 org.h2.util.JdbcUtils.getConnection 方法将驱动程序的类名和数据库的 URL 作为参数。攻击者可能会传递 JNDI 驱动程序名称和指向 LDAP 或 RMI 服务器的 URL,从而导致远程代码执行。这可以通过各种攻击媒介来利用,最明显的是通过 H2 控制台,导致未经身份验证的远程代码执行 目前可使用官方补丁进行修复
Nosql数据库
Redis 沙箱绕过 未授权访问 RCE 特征点 端口6379
ANSI C编写的开源、支持网络、基于内存、分布式、可选持久性的键值对存储数据库,属于NoSQL数据库类型。与传统数据库不同的是 Redis 的数据存于内存中,所以读写速度非常快,被广泛应用于缓存方向
缓存(Cache)是一种数据存储技术,广泛应用在电脑工程领域1。它将原本访问起来较慢的数据,放到访问更快的存储介质中,当第二次访问时,能够更快地访问数据,是一种空间换时间的做法
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis支持更多数据结构的存储。不只是key-value
- Redis支持数据的备份,即master-slave模式的数据备份
主从模式(Master-Slave)是一种常见的软件架构模式1。它的核心思想是基于分而治之的思想,将一个原始任务分解为若干个语义等同的子任务,并由专门的工作者线程来并行执行这些任务,原始任务的结果是通过整合各个子任务的处理结果形成的
Mysql也支持主从模式 优点 提高计算性能和可靠性 缺点 设备之间孤立没有共享 可以根据数据同步延迟和主从切换来更改缺点
漏洞
1.未授权访问
在redis3.2之后,redis增加了protected-mode,在这个模式下,非绑定IP或者没有配置密码访问时都会报错 "Protected Mode"是一种安全保护机制,主要用于防止未经授权的访问和利用。这种模式在不同的应用中可能有不同的实现和含义,开启时候外网无法访问 默认是打开的
漏洞危害
1. Redis绑定在0.0.0.0:6379,暴露在公网 在未开启认证下 任意用户可以未授权访问 Redis 以及读取 Redis 的数据
2 没有设置密码认证(默认为空)或者弱密码,可以免密码登录redis服务,Redis内置了脚本语言Lua,允许用户通过Lua脚本执行一系列操作2。EVAL命令是Redis的一个内置命令,用于执行Lua脚本,攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件
3. 攻击者在未授权访问 Redis 的情况下获得root身份 可以在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器
2.本地主从复制RCE
对于只允许本地连接的Redis服务器,可以通过开启主从模式从远程主机上同步恶意.so文件至本地,接着载入恶意.so文件模块,反弹shell至远程主机
3.Redis联动SSRF漏洞
RESP协议是Redis服务器通信的标准方式,服务器和客户端之间的通信建立在RESP协议之上,RESP协议实际上是一个支持简单字符串,错误,整数,批量字符串和数组五种数据类型的序列化协议。
Gopher是Internet上一个非常有名的信息查找系统,在WWW出现之前,Gopher是Internet上最主要的信息检索工具,Gopher站点也是最主要的站点,使用tcp70端口,而它被代替的原因主要是收费和结构固化
通过SSRF漏洞和Gopher协议访问到内网的Redis服务,并发送恶意代码生成后门文件
修复建议
1、改掉默认端口,禁止外部访问Redis服务端口,开启protected-mode安全机制,配置安全组,限制可连接Redis服务器的IP
2、禁止使用root权限启动redis服务,最小化权限运行redis 限制账号的命令使用权限
3.设置强类型的加密访问密码,引入ALC访问机制 对eval命令进行限制
ACL是一种用于控制对资源访问权限的机制,建立 独立的关联映射表,记录了该客体访问的主体被授予访问客体的权限,以及允许对客体执行哪些操作1。当主体试图访问客体时,系统会检查映射表,确定是否允许访问
ACL在网络中针对路由器决定数据包接受或拒绝 在liunx中实现对单一用户设定访问文件的权限
CouchDB 未授权越权 端口号 5984
CouchDB 是 Apache CouchDB 是开源 NoSQL 文档数据库,JSON作为存储格式 JavaScript作为查询语言 MapReduce和HTTP作为API
优点:
1.开源项目,免费使用,可以轻松集成到企业当前的数据管理基础架构之中。 企业对软件拥有更多控制权,所以在根据业务需求调整软件时,也就有了更大的灵活性。
2.无论是需要通用的文档存储以实现高效的数据同步,还是奉行“脱机优先”理念,CouchDB 都可以帮助企业灵活地创建持久耐用、高度可靠而且易于扩展的基础架构。
3.使用 REST API 从任何地点访问数据库
4.CouchDB 提供多种兼容性优势,可轻松地与当前基础架构集成。 CouchDB 是以 Erlang 编写的(一种通用的并发式垃圾收集编程语言和运行时系统),因此十分可靠,方便开发人员使用
无模式的数据模型是一种不需要预定义模式的数据模型1。这种模型通常在NoSQL数据库中使用,例如键值存储1
数据库脱机操作是指将数据库从当前的数据库管理系统中移除,但保留数据库及其数据文件和事务日志文件12。这种操作通常用于数据库迁移,例如将数据库从一个服务器迁移到另一个服务器
缺点
1.复杂性
虽然CouchDB提供了许多强大的功能,但这也增加了其复杂性。对于那些不熟悉NoSQL数据库或者不熟悉JSON和java脚本的开发人员来说,学习和使用CouchDB可能会有一些困难
2.缺乏事务支持
CouchDB不支持传统的ACID事务1。虽然它提供了一些机制来处理并发更新,但是对于那些需要严格的事务一致性的应用来说,这可能是一个问题(列如涉及金融交易的系统,分布式系统或微服务架构 )
事务一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说,一个事务执行之前和执行之后,数据库都必须处于一致性状态
3.性能
CouchDB使用了一种称为MVCC(多版本并发控制)的技术来处理并发访问,这种技术需要为每个文档保存多个版本,从而增加了存储需求和处理时间
漏洞
未授权访问权限绕过 (CVE-2017-12635)
影响范围 小于 1.7.0 以及 小于 2.1.1
由于Erlang和JavaScript对JSON解析方式的不同,导致语句执行产生差异性导致的。这个漏洞可以让任意用户创建管理员,属于垂直权限绕过漏洞。
任意命令执行漏洞 CVE-2017-12636
影响范围 小于 1.7.0 以及 小于 2.1.1
由于数据库自身设计原因,管理员身份可以通过 HTTP(S)方式,配置数据库。在某些配置中,可设置可执行文件的路径,在数据库运行范围内执行。结合 CVE-2017-12635 可实现远程代码执行。
修复
做好网络隔离外网访问 设置复杂密码
CouchDB远程代码执行漏洞(CVE-2022-24706)
影响范围
Apache CouchDB
CouchDB 会打开一个随机网络端口,绑定到所有可用的接口以进行集群操作或runtime introspection(程序运行时检查对象类型或属性的能力),epmd(在集群中相当于DNS 提供节点名称到端口的查询服务)本身在一个固定的端口上进行监听,但是其错误地暴露了CouchDB打开的随机端口。CouchDB包装之前为单节点和集群安装设置了一个默认的"cookie "值,该cookie用于验证Erlang 节点之间的任意通信。未经身份验证的恶意攻击者通过发送特制的恶意数据到CouchDB的特定接口,从而能够获得管理员权限,进行在目标服务器上执行任意代码。
修复
设置防火墙,不将单独的分发端口暴露给外部访问的安装不易受到攻击