一文教你如何防御数据库渗透入侵

本文讲述了作者在项目中遭遇数据库被恶意删除的经历,重点介绍了MySQL数据库的入侵方式,如注入、提权等,以及如何通过Nmap、SQLMap、Metasploit等工具进行信息收集和攻击,同时强调了日常防护、密码策略、权限控制和防御措施的重要性。
摘要由CSDN通过智能技术生成

前段时间博主在做学校内部项目的时候,项目需要暂时上线测试,没想到上线测试几天,MySQL 数据库数据就被恶意删除,但是当时我们没有太当回事,以为只是一次普通黑客攻击,恢复数据之后仍然可以正常使用。

但是当项目快结题,学校领导需要上午检查答辩时,早上我们查看项目数据库,居然整个数据库都崩掉了,基本恢复不了数据,搞得当天很尴尬。由于项目是内部项目,因此只有学校内部人员了解情况,纯粹是内部人员搞事情。

所以这次我吸取惨痛教训,总结经验,从攻击者如何入侵数据库,以及当我们遇到攻击如何快速抵御攻击、快速恢复正常服务,平时应该对数据库做哪些日常防护等等方面,进行全面细致的讲解

不过我自己毕竟不是专门做网络安全方面的,如果有什么错误、不足或是遗漏,还请大佬们在评论区指出 😘

注:本次演示系统

靶机:CentOS 7.9

攻击机:WSL2 kali

入侵攻击

介绍

首先我们知道 MySQL 数据库入侵有很多种方式,包括 MySQL 注入、MySQL 提权、MySQL 数据库 Root 账号 webshell 获取等等,下面将详细讲解数据库入侵攻击步骤

信息收集

端口扫描

我们可以使用 Nmap(Network Mapper) 进行端口扫描,MySQL 默认端口是 3306 端口,但也有自定义端口,我们可以使用如下命令进行端口探测,扫描之后我们就可以清楚地看到服务器上的服务及对应端口

常用命令:

bash
复制代码
nmap -T4 -A -v -Pn IP	
#最常用的一种扫描

-T4		#设置时序,越高扫描越快
-A		#启用操作系统检测,版本检测,脚本扫描和跟踪路由
-v		#增加详细级别(使用-vv或更高级别以获得更好的效果)
-Pn		#无ping扫描
bash
复制代码
# 特定端口扫描
nmap -p 3306 <ip>
# 全端口扫描
nmap 3306 <ip>

image-20230827160337520

版本收集
MSF

我们可以使用 MSF(Metasploit)进行数据库版本信息的收集,从而发现相应的漏洞。它本身附带数百个已知软件漏洞,是一款专业级漏洞攻击工具。

注:MSF 内置 nmap 为 db_namp,但是需要启动 postgresql 服务才能使用

MSF 是一个免费的、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。

其中 msf 为总模块,其他均为分支模块。分支模块如下

  • 辅 助 模 块 (Auxiliary,扫描器),扫描主机系统,寻找可用漏洞;
  • 渗透攻击模块 (Exploits),选择并配置一个漏洞利用模块;
  • 攻击载荷模块 (Payloads),选择并配置一个攻击载荷模块;
  • 后渗透攻击模块 (Post),用于内网渗透的各种操作;
  • 编 码 器 模 块 (Encoders),选择编码技术,绕过杀软(或其他免杀方式);

所有模块位置:/usr/share/metasploit-framework/modules/

使用如下命令安装 metasploit-framework 框架

bash
复制代码
sudo apt-get install metasploit-framework

启动 postgresql 数据库,并初始化 msf 数据库(没有数据库尽管可以正常使用,但是无法存储数据,会导致无法使用部分功能),postgresql 默认 5432 端口。

bash
复制代码
sudo service postgresql start
sudo msfdb init

检测是否安装成功

bash
复制代码
sudo msfconsole
# 查看连接状态
db_status

渗透步骤(Exploit)

bash
复制代码
search xxx		#搜索某个漏洞
use xxx			#使用某个漏洞利用模块
show options	#查看配置选项
set payload		#配置攻击载荷
exploit			#执行渗透攻击

开始搜索

bash
复制代码
# 进入
sudo msfconsole
# 依次输入如下命令
# 扫描 MySQL 版本信息
use auxiliary/scanner/mysql/mysql_version
# 设置目标IP
set rhosts <ip>
# 运行所有模块
run
SQLMap

SQLMap 是一种用于自动化检测和利用 SQL 注入漏洞的开源工具。SQL Shell 命令是 SQLMap 中的一个特性,它可以让你在被攻击的数据库服务器上执行 SQL 语句。

常用命令

bash
复制代码
sqlmap -u URL --sql-shell

其中,URL 是你想要测试的目标网站的地址。当你运行这条命令时,SQLMap 将会尝试检测目标网站是否存在 SQL 注入漏洞,如果检测到漏洞,它会自动利用漏洞进入数据库服务器,并给你一个交互式的 SQL Shell

在 SQL Shell 中,你可以输入任意的 SQL 语句,并查看执行结果。例如,你可以输入 SELECT * FROM users; 来查看数据库中所有用户的信息。

密码破解

暴力破解
MSF

使用指定密码字典 /tmp/password.txt 进行爆破,推荐:爆破字典

爆破所有用户密码

bash
复制代码
use auxiliary/scanner/mysql/mysql_login
set rhosts <ip>
set pass_file /tmp/password.txt
set user_file /tmp/username.txt
run

爆破根用户密码

bash
复制代码
use auxiliary/scanner/mysql/mysql_login
set rhosts <ip>
set pass_file /tmp/password.txt
set username root
run

针对此类问题,我们可以使用 字母+数字+符号 组成的强口令作为应对方法

但是扫描过程中我们会发现有时候会异常终止,出现错误Unable to Connect: Host 'XX' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

这时候如果我们再次运行模块就会出现Unsupported target version of MySQL detected. Skipping,无法继续爆破

这是因为同一个 IP 在短时间内产生太多连接数,超过数据库 max_connection_errors 的最大值,中断数据库连接而导致的阻塞

此时该 IP 会被拉入黑名单,如果是内部人员误操作,作为维护者我们可以使用下面的措施恢复服务

临时方法

bash
复制代码
# mysql -uroot -p
mysql> flush hosts;

永久方法

bash
复制代码
# vi /etc/my.cnf
max_connect_errors = 1000
# 或是 
# mysql -uroot -p
set global max_connect_errors=1000;

当此值设置为10时,意味着如果某一客户端尝试连接此 MySQL 服务器,但是失败(如密码错误等等)10次,则 MySQL 会无条件强制阻止此客户端连接。如果希望重置此计数器的值,则必须重启 MySQL 服务器或者刷新。 当这一客户端成功连接一次 MySQL 服务器后,针对此客户端的 max_connect_errors会清零。但是不建议调大,这是应对密码爆破的有效手段。

作为攻击者我们可以使用如下方法解决上述问题

  • 使用代理或VPN:通过使用代理服务器或虚拟私人网络(VPN)来隐藏真实IP地址,从而避免同 IP 登录次数过多的限制。使用不同 IP 轮流使用进行登录尝试,以避免单一IP被封禁
  • 设置延迟和间隔:在爆破过程中设置适当的延迟和间隔,以降低登录次数并减少被封禁的风险。可以调整爆破工具的设置,使其在每次尝试登录后等待一段时间,例如几秒钟或几分钟。

image-20230827231808738

Nmap

指定使用 Nmap 工具中的 mysql-brute 脚本对目标主机进行 MySQL 暴力破解

bash
复制代码
nmap --script=mysql-brute <ip>
其他

除了上面两个再推荐一个开源的暴力破解工具:Hydra

Hydra 是一款非常强大的暴力破解工具,它是由著名的黑客组织THC开发的一款开源暴力破解工具。Hydra 是一个验证性质的工具,主要目的是:展示安全研究人员从远程获取一个系统认证权限。

目前该工具支持以下协议的爆破: AFP,Cisco AAA,Cisco身份验证,Cisco启用,CVS,Firebird,FTP,HTTP-FORM-GET,HTTP-FORM-POST,HTTP-GET,HTTP-HEAD,HTTP-PROXY,HTTPS-FORM- GET,HTTPS-FORM-POST,HTTPS-GET,HTTPS-HEAD,HTTP-Proxy,ICQ,IMAP,IRC,LDAP,MS-SQL,MYSQL,NCP,NNTP,Oracle Listener,Oracle SID,Oracle,PC-Anywhere, PCNFS,POP3,POSTGRES,RDP,Rexec,Rlogin,Rsh,SAP / R3,SIP,SMB,SMTP,SMTP枚举,SNMP,SOCKS5,SSH(v1和v2),Subversion,Teamspeak(TS2),Telnet,VMware-Auth ,VNC和XMPP。

常用命令

bash
复制代码
hydra -l root -P '/tmp/password.txt' <ip> mysql

参数介绍

bash
复制代码
-l 小写 指定用户名
-L 大写 指定用户名字典
-p 小写 指定密码
-P 大写 指定密码字典
-C 指定用户名:密码 字典
-M 指定目标ip列表文件
-t 同时运行的线程数

更多详细介绍大家可以直接从官网了解

文件包含

本地文件包含漏洞可以包含文件,通过查看文件代码获取数据库配置文件,进而读取数据库用户名和密码。

其他情况
嗅探

有些软件会将 IP 地址、数据库用户名和密码写进程序中,运行程序后,通过 Cain 软件进行嗅探,可以获取数据库密码。另外 MySQL客户端管理工具有的管理员会建立连接记录,这些连接记录保存了用户名、密码和连接 IP 地址或者主机名,通过配置文件或者嗅探可以获取用户名和密码。

DDoS 攻击

客户端请求连接数据库后,会提示客户端输入用户密码,如果客户端不输入密码,那么数据库服务端会在一个超时时间后,断开连接。也就是说,在服务端主动断开连接前,这个连接实际上需要占用一个 SLOT ,也就是max_connection 中的一个。

攻击者可以利用这个规则,并发的发起大量连接请求,但是不提供密码,等待服务端的超时,这样可以把max_connection 的连接都占用掉。

这种情况攻击者并不是为了获取数据库中信息,而仅仅只是为了攻击服务,使服务挂掉

不管我们是使用弱口令爆破、sqlmap 注入、还是网站中的明文配置信息、或是诸如其他漏洞方式,只要我们可以得到数据库的用户名和密码,就可以进入下一步

数据库提权

博主本身不是专业网络安全的,也没有做过系统的 PHP 开发,因此下面关于攻击方面的只简单讲下思路,后面着重讲如何防御

获取 Webshell

Webshell 是黑客经常使用的一种恶意脚本,其目的是获得服务器的执行操作权限,可以执行系统命令、窃取用户数据、删除web页面、修改主页等

可以基于 into oufile 写 shell ,但是需要满足如下条件

1、知道网站物理路径

可以使用 phpmyadmin 爆破,登录进去后我们获取网站的绝对路径来进行写 shell,利用log变量来猜测网站的绝对路径

2、高权限数据库用户

在一些Mysql小于5.5.51或小于5.6.32或小于5.7.14及衍生版本,我们都可以利用CVE-2016-6663、CVE-2016-6664组合对其进行测试提权。

利用CVE-2016-6663将www-data权限提升为mysql权限,利用CVE-2016-6664将Mysql权限提升为root权限

3、load_file() 开启 即 secure_file_priv 无限制

在 MySQL 5.5 之前 secure_file_priv 默认是空,这个情况下可以向任意绝对路径写文件

在 MySQL 5.5之后 secure_file_priv 默认是 NULL,这个情况下不可以写文件

可以使用 show global variables like '%secure_file_priv%'; 查看

打开 my.cnf 文件,加入如下语句再重启服务器,即可修改 secure_file_priv 无限制

bash
复制代码
secure_file_priv=''
4、网站路径有写入权限

之后即可写入 shell, 然后菜刀、蚁剑进行连接。

服务器权限
UDF提权

UDF(user-defined function)是MySQL的一个拓展接口,也可称之为用户自定义函数,它是用来拓展MySQL的技术手段,可以说是数据库功能的一种扩展,用户通过自定义函数来实现在MySQL中无法方便实现的功能,其添加的新函数都可以在SQL语句中调用,就像调用一些系统函数如version()函数便捷。

MOF提权

现在通过mof文件来进行提权已经非常困难了,因为它支持提权版本只有2003和一些之前的版本。mof的提权原理为mof文件每五秒就会执行,而且是系统权限,我们通过mysql使用load_file 将文件写入/wbme/mof,然后系统每隔五秒就会执行一次我们上传的MOF。MOF当中有一段是vbs脚本,我们可以通过控制这段vbs脚本的内容让系统执行命令,进行提权。

启动项提权

MySQL的启动项提权,原理就是通过mysql把一段vbs脚本导入到系统的启动项下,如果管理员启动或者重启的服务器,那么该脚本就会被调用,并执行vbs脚本里面的命令。

如何防御

用户设置

严禁 root 用户外连,正常来讲,不仅仅是 root 不允许外连,有条件的情况下,mysql 服务端口都不要对外开放,只允许特定的内网 ip 段来连接,另外,所有的实际业务严禁直接用 root 用户身份来处理,强烈建议,不同的业务需求,创建对应的数据库普通账户来处理即可

对于密码设置,包含大小写、特殊字符、12位以上的随机密码,越随机越好

把 root 用户改个比较另类的名字,越看不出来是干啥的越好,不过一般作用不大,如果真的存在sql注入,随便用sql语句查下权限即可,另外,直接使用 sqlmap –is-dba (检测当前用户是否具有数据库管理员权限)同样也可以,不过这样做可以防爆破

配置分离

有条件,最好将应用和数据库进行分离,分离的好处在于可以让入侵者无法再正常读写文件,毕竟不在同一台机器上,因为数据库服务器上,根本没有web服务

限制权限

限制 MySQL 在系统中的各种权限(只能防止服务器被入侵,阻止不了数据库正常的增删改查),首先将 MySQ L服务以较低的系统权限运行,以防止他人利用该服务进行提权攻击。注意,这里的提权不是普通用户执行部分系统命令这样的行为,而是真实的将运行 MySQL 服务的系统伪用户权限提升到 root 权限。同时也需要严格控制住 MySQL 安装目录在本地文件系统中的权限

授权时,也可通过 shell 脚本自动对指定库中除管理或系统表之外的其他表进行一一单独授权,而管理表则单独授权给其他数据库用户。这样做的好处就是,此时即使存在 SQL 注入,也让入侵者没法通过跨表来查网站后台管理的账号和密码 hash。但缺点是如果业务逻辑比较复杂,这样做确实麻烦,可以尝试慢慢把业务整理拆分出来。虽然我们可以利用 MySQL 轻松将权限控制到表级别,但实际中还是非常建议“一站一库”,这样后续维护管理起来也非常方便规整。

其他

我们也需要利用各种实时日志分析平台,实时快速捕捉各种常见数据库攻击特征,例如 ELK、Splunk 等工具

注意对重要业务数据定时备份,或是直接配置主从同步。同时限制单用户连接数,防止 DDOS 攻击

定期去关注 MySQL 官方发布的高危补丁,适时修补漏洞

​最后

为了帮助大家更好的学习网络安全,小编给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂,所有资料共282G,朋友们如果有需要全套网络安全入门+进阶学习资源包,可以点击免费领取(如遇扫码问题,可以在评论区留言领取哦)~

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉CSDN大礼包🎁:全网最全《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)👈

1️⃣零基础入门

① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

因篇幅有限,仅展示部分资料

2️⃣视频配套资料&国内外网安书籍、文档

① 文档和书籍资料

② 黑客技术

因篇幅有限,仅展示部分资料

👉CSDN大礼包🎁:全网最全《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)👈

3️⃣网络安全源码合集+工具包

4️⃣网络安全面试题

5️⃣汇总

所有资料 ⚡️ ,朋友们如果有需要全套 《网络安全入门+进阶学习资源包》,扫码获取~

👉CSDN大礼包🎁:全网最全《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)👈

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分布式数据库原理是指将数据分散存储在不同的物理节点上,通过网络进行通信和数据同步的数据库系统。它可以提高数据库的可扩展性、容错性和性能。 分布式数据库的设计思想是将数据划分为多个分片,每个分片存储在不同的节点上。通过数据划分,可以将数据存储在离用户更近的节点上,提高数据的访问速度。同时,分布式数据库可以通过数据复制和数据分发来提供容错性。数据复制可以将数据备份到多个节点上,当某个节点发生故障时,系统可以自动切换到其他节点上继续提供服务。数据分发可以将请求分发到不同的节点进行处理,提高系统的并发处理能力。 PostgreSQL是一种开源的关系型数据库管理系统,具备分布式架构。PostgreSQL的分布式架构包括一个主节点和多个从节点。主节点负责接收用户的请求,并将数据同步到从节点上。从节点可以进行读操作,提高系统的并发处理能力。如果主节点发生故障,从节点可以自动切换为主节点,保证系统的可用性。 PostgreSQL的分布式架构基于流复制技术。主节点将产生的日志记录(WAL日志)通过流复制传输到从节点,从节点会将这些日志记录应用到自己的数据库中。这样可以确保主节点和从节点之间的数据一致。同时,PostgreSQL还支持逻辑复制和扩展查询,可以根据实际需求对数据进行同步和查询的优化。 总之,分布式数据库原理是通过数据的划分、复制和分发,提高数据库的可扩展性、容错性和性能。PostgreSQL的分布式架构基于流复制技术,通过多个节点的协作来提供可靠的数据存储和高效的数据访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值