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

news2024/11/27 5:31:32

前言

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

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

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

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

注:本次演示系统

靶机:CentOS 7.9

攻击机:WSL2 kali

入侵攻击

介绍

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

信息收集

端口扫描

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

常用命令:

nmap -T4 -A -v -Pn IP	
#最常用的一种扫描

-T4		#设置时序,越高扫描越快
-A		#启用操作系统检测,版本检测,脚本扫描和跟踪路由
-v		#增加详细级别(使用-vv或更高级别以获得更好的效果)
-Pn		#无ping扫描
# 特定端口扫描
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 框架

sudo apt-get install metasploit-framework

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

sudo service postgresql start
sudo msfdb init

检测是否安装成功

sudo msfconsole
# 查看连接状态
db_status

渗透步骤(Exploit)

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

开始搜索

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

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

常用命令

sqlmap -u URL --sql-shell

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

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

密码破解

暴力破解

MSF

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

爆破所有用户密码

use auxiliary/scanner/mysql/mysql_login
set rhosts <ip>
set pass_file /tmp/password.txt
set user_file /tmp/username.txt
run

爆破根用户密码

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 会被拉入黑名单,如果是内部人员误操作,作为维护者我们可以使用下面的措施恢复服务

临时方法

# mysql -uroot -p
mysql> flush hosts;

永久方法

# 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 暴力破解

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。

常用命令

hydra -l root -P '/tmp/password.txt' <ip> mysql

参数介绍

-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 无限制

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 官方发布的高危补丁,适时修补漏洞

参考文章

教你一些MySQL数据库入侵及防御方法-腾讯云开发者社区-腾讯云 (tencent.com)

nmap端口扫描 | 狼组安全团队公开知识库 (wgpsec.org)

Metasploit漏洞利用框架 | 狼组安全团队公开知识库 (wgpsec.org)

mysql 弱口令暴力破解本地渗透测试 - 油虾条 - 博客园 (cnblogs.com)

千万不要再这样操作MySQL了,分分钟给你破解-腾讯云开发者社区-腾讯云 (tencent.com)

【防止被脱裤】如何在服务器上设置一个安全的 MySQL-腾讯云开发者社区-腾讯云 (tencent.com)

MySQL提权总结(建议收藏) - 随风kali - 博客园 (cnblogs.com)

本文由博客一文多发平台 OpenWrite 发布!

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

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

相关文章

『 LeetCode题解 』203. 移除链表元素

题目链接 : 『 LeetCode题解 』203. 移除链表元素 https://leetcode.cn/problems/remove-linked-list-elements/ 目录 &#x1f31f;题目要求&#x1f31f;解题思路&#xff08;动图解析&#xff09;&#x1f9d0;方案一&#x1f601;方案二 &#x1f31f;代码示列 &#x1f31…

海康机器人工业相机SDK MVS安装教程

文章目录 一. 海康机器人介绍二. 工业相机客户端安装教程 一. 海康机器人介绍 海康机器人是面向全球的机器视觉和移动机器人产品及解决方案提供商&#xff0c;业务聚焦于工业物联网、智慧物流和智能制造&#xff0c;构建开放合作生态&#xff0c;为工业和物流领域用户提供服务…

低代码平台如何改变软件开发?低代码平台是否能形成新生态?

低代码平台如何改变软件开发&#xff1f;低代码平台是什么&#xff1f;低代码平台又有什么样的独特价值&#xff1f;在如今的市场环境下&#xff0c;低代码平台又能展现出怎样的生机&#xff1f; 01 什么是低代码开发平台&#xff1f; 低代码开发平台是一种更偏向于赋能技术人…

监管机构新出台的会计法规将对阿里巴巴和其他中概股产生重大影响

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 监管机构出台了新的会计法规 猛兽财经获悉&#xff0c;为规范企业数据资源相关会计处理&#xff0c;强化相关会计信息披露&#xff0c;财政部于2023年8月21日制定并发布了《企业数据资源相关会计处理暂行规定》&#xff0c…

使用Python连接MySQL数据库并查找表信息

使用Python连接MySQL数据库并查找表信息 1.导入MySQLdb包 import MySQLdb如果你的PyCharm中没有MySQLdb&#xff0c;就从Setting-》Project Interpreter查找并下载 2.在MySQL中新建一个连接&#xff0c;取名为python &#xff0c;再新建一个测试表&#xff0c;取名为examples…

FAQ包含哪些内容?

FAQ页面也叫常见问题解答页面&#xff0c;能够帮助回答客户有关你的产品和服务的常见问题&#xff0c;这不仅仅只是一个问题列表&#xff0c;通过解答页面&#xff0c;可以节约销售时间和服务成本&#xff0c;以及可能推动新用户购买。常见问题解答页面可以在整个采购过程中为客…

顺序表链表OJ题(2)->【数据结构】

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 前言&#xff1a; 单链表的结构常常不完美&#xff0c;没有双向链表那么”优秀“&#xff0c;所以繁衍出很多OJ练习题。今天我们继续来look look数据结构习题。 下面就是OJ时间&#xff01;&#xff01;&#xff01; …

UEditorPlus v3.4.0 全新公式编辑体验,Logo全新发布

UEditor是由百度开发的所见即所得的开源富文本编辑器&#xff0c;基于MIT开源协议&#xff0c;该富文本编辑器帮助不少网站开发者解决富文本编辑器的难点。 UEditorPlus 是有 ModStart 团队基于 UEditor 二次开发的富文本编辑器&#xff0c;主要做了样式的定制&#xff0c;更符…

基于Java+SpringBoot+Vue前后端分离图书管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

缓存一致性问题

在开发中我们为了提高查询效率&#xff0c;经常使用缓存(典型的缓存技术redis)&#xff0c;但是在缓存的使用中我们经常遇到缓存和一致性问题(缓存的数据和数据库的数据不一致) 常见的解决方式 1.双写模式&#xff1a;更新数据库时候同时更新缓存 2.失效模式&#xff…

开源家政小程序源码仿58到家分享 带安装教程完整版

今天继续分享一个家政公司小程序源码系统&#xff0c;完全开源的&#xff0c;可以二次开发&#xff0c;支持多商家&#xff0c;直接在线预约&#xff0c;功能很是强大。 家政小程序源码系统是一款基于微信小程序平台的家政服务管理系统&#xff0c;旨在帮助家政服务公司更好地管…

C语言题目--2

CFLAGS“-Wall” 是将警告更多的显示出来 make ex1 会寻找ex1.c&#xff0c;然后去编辑它 需要编译Makefile&#xff0c;在执行make时&#xff0c;会在目录下寻找Makefile&#xff0c;根据定义去执行make hello是命名规则&#xff0c;下面是具体的命令 注意&#xff1a;用Tab键…

【FreeRTOS】【应用篇】消息队列【上篇】——队列基本概念、创建和删除

文章目录 前言一、什么是消息队列&#xff0c;有什么用1. 概念2. 作用3. 特点 二、消息队列的深入原理1. 消息队列的存储结构2. 出入队列的相关操作① 入队操作&#xff1a;② 发送紧急消息&#xff1a;③ 读取队列操作&#xff1a; 3. 关于队列的阻塞机制① 读操作的阻塞机制&…

checkstyle检查Java编程样式:空格检查

一个空行不能有空格 例如&#xff0c;第22行是空行&#xff0c;有4个空格&#xff0c;checkstyle检查报错&#xff1a; 将4个空格删掉&#xff0c;checkstyle检查通过&#xff1a; 行末尾不能有空格 将行末尾的空格删掉即可消除这个违反项&#xff1a; 用WhitespaceAfte…

驱动作业,按键中断阻塞LED灯

驱动程序 #include "head.h" #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include <linux/device.h> #include <linux/export.h> #in…

抖音转化率是什么意思,怎么计算,如何提升效果?

抖音转化率是指在抖音平台上进行某种特定行为的用户数量与总用户数量之间的比率。作为短视频搜索领域的最大平台&#xff0c;抖音转化率一直是企业用户的攻克难题。 茹莱神兽认为&#xff0c;想要提升抖音的转化率&#xff0c;就需要研究它的转化路径。常见的转化行为包括点击…

Java Predicate用法

Java Predicate用法 无需写sql.只要拼接条件就行 Java Predicate用法

未来智造:珠三角引领人工智能产业集群

原创 | 文 BFT机器人 产业集群是指产业或产业群体在地理位置上集聚的现象&#xff0c;产业集群的研究对拉动区域经济发展&#xff0c;提高区域产业竞争力具有重要意义。 从我国人工智能产业集群形成及区域布局来看&#xff0c;我国人工智能产业发展主要集聚在京津冀、长三角、…

澳大利亚以及美国纽扣电池新标准讲解!

一、什么是澳大利亚纽扣电池认证标准&#xff1f; 答&#xff1a;近期很多商家的产品无论是成品还是单独的纽扣电池&#xff0c;只要成品中带有纽扣的电池的功能都是需要办理澳洲的认证的&#xff0c;最近抽查的比较严格&#xff0c;因为电池测试这方面是为降低与使用纽扣电池相…

【优选算法】—— 二分查找

序言&#xff1a; 本期&#xff0c;我们将要介绍的是有关 二分查找算法 并通过题目帮组大家更好的理解&#xff01; 目录 &#xff08;一&#xff09;基本介绍 1、基本思想 2、解题流程 3、复杂度以及注意事项 &#xff08;二&#xff09;题目讲解 1、在排序数组中查找…