刘俊凯 发表于 2025-3-24 19:19:40

【网络安全】浅谈数据库攻击复现及相关安全优化

前言

恰巧在交流群看到这么一条消息,由于安全意识缺乏,被不法之人黑进了数据库,并且 dump 了数据举行打单;
https://i-blog.csdnimg.cn/img_convert/6b8bf46ca26ef4a6a997d0bc245de69f.webp?x-oss-process=image/format,png
接下来,博主将复现一些攻击数据库的场景,并介绍一些与数据库有关的安全优化;
被黑缘故原由


[*] MySQL 数据库 root 用户密码太弱,设置的太简朴了;
[*] MySQL 数据库 root 用户访问权限太高,没有加以限制,允许了除自身地点服务器 IP 地址访问,也对其之外的服务器访问门户大开;
[*] MySQL 数据库使用的是默认端口3306,没有重新定义新端口,导致高风险;
[*] MySQL 数据库,没有做定时备份功能,只依赖于自己的不定时备份;
[*] 数据库放在应用服务器上,没有独立出一台数据库服务器,和应用服务器分开,也因此增长了风险性;
场景复现

这里的话,攻击的是 暴露在公网上的数据库,对于当地才能访问的数据库,可以通过找到接口,以 SQL 注入的方式举行尝试一番,详细可以看到博主的这篇博文:【网络安全】浅识 SQL 注入;
根据上图的聊天记录,该安全团队应该是无差别的针对暴露在公网上的数据库举行弱口令攻击,而不巧的是,这位友友刚好中招了;
那接下来我们就开始复现了;
1、首先是寻找目标,有些开发者缺乏安全意识,对于在公网暴露的数据库 MySQL,不但使用默认端口,同时还使用弱口令作为密码,好比 123456 这些,因此我们可以写个脚本,伪代码如下:
import pymysql

with open('pwd_dic', ..) as f:
    pwd_list = ...# 弱口令密码字典

for ..:
    try:
      host = ''
      user = ''
      passwd = ''
      pymysql.connect(host=host, user=user, passwd=passwd)
      print(host, user, passwd)
      ...
      
    except:
      pass

如许就能记录下来一些攻击目标了,这里博主举行分段讲解,没有一站到底;
2、拿到账号密码之后,就可以通过各种工具举行连接了;
这里的话,我们就通过 mysql 的原生服务直接连接:
mysql -h ip -u用户名 -p

连接好之后就可以举行一系列的操作了:

[*] 检察全部的数据库,show databases: https://i-blog.csdnimg.cn/img_convert/fdd81cb42eb3fb4dc869a173700a0542.webp?x-oss-process=image/format,png
[*] 选择一个或多个数据库,use dbname,检察数据信息是否有价值: https://i-blog.csdnimg.cn/img_convert/f4f1973369c40c8b623cb5088ee44899.webp?x-oss-process=image/format,png
[*] 确认要 dump 的数据库后,使用以下指令:
./mysqldump -h ip -u username -p'passwd' --default-character-set=utf8 dbname > /dump/dbname.sql


[*] 然后再删除原先的数据库,DROP DATABASE dbname,DROP TABLE tablename;
[*] 最后新建一个数据库和一个数据表,并留下信息即可;
这里只起引以为戒的作用,莫要自误!
安全优化

1、复杂化数据库用户密码
新安装的 MySQL 数据库中只有一个用户:root,密码设置可由大小写字母、符号和数字组合的形式构成,只管复杂化,修改密码步骤如下:
# 进入 MySQL 数据库
mysql -uroot -p*****

# 切换到 mysql 库,mysql 库里存放着 user 表
use mysql;

# 查看 user 表情况,新安装 mysql 数据库的 user 表只有一个 root 用户
select host,user from user;

# 修改 root 密码
update user set password=password('******')where user = 'root';

# 修改后刷新权限
flush privileges;

# 退出 mysql 数据库
exit;

TIP:也可以按此方式修改 root 用户名称,如许会更好!
2、限制数据库用户权限
新安装好的 MySQL 数据库一样寻常除了地点服务器能访问外,其他服务器的 IP 地址是访问不了的,但是有些小伙伴会修改 root 用户的访问权限,允许全部的机器 IP 地址都能访问。
现在我的处理方式是:root 用户访问权限稳定,为了开发需要,我可以新建一个临时用户 testUser,并赋予该用户只允许某个特定机器的 IP 地址访问,其他机器也是访问不了的,等开发完毕,项目正式上线后,就再把此临时用户删掉即可,新建临时用户步骤如下:
# 进入 MySQL 数据库
mysql -uroot -p*****

# 切换到 mysql 库,mysql 库里存放着 user 表
use mysql;

# 查看 user 表现有用户
select host,user password from user;

# 创建开发阶段所需临时用户:testUser,自定义密码,尽量复杂化
create user 'testUser'@'localhost' identified by '临时用户密码';

# 给新建临时用户分配访问权限,192.168.*.*** 为允许访问的 IP 地址
grant all privileges on *.* to 'testUser'@'192.168.*.***' identified by '临时用户密码' with grant option;

# 修改后刷新权限
flush privileges;

# 退出 mysql 数据库
exit;

TIP:颠末以上步骤,在特定 IP 地址机器上,就可以使用临时用户和密码访问安装的 MySQL 数据库了;
3、修改数据库默认端口
有经验的开发人员,项目部署到正式环境,会把 MySQL 数据库的默认端口替换成不常见的端口,比方:12385,替换默认端口步骤如下:
# 进入 MySQL 数据库
mysql -uroot -p*****

# 查看当前数据库的端口号,未修改端口情况下一般显示 3306
show global variables like 'port';

# 验证了 mysql 数据库是3306之后,就退出 mysql 数据库
exit;

# 紧接着进入相关配置文件修改端口号,退出数据库后,使用命令进入根目录 etc 文件夹
cd /etc/

# 编辑 etc 文件夹下 my.cnf 文件修改端口号,修改不了就直接添加一行例如:port = 12385
vi my.cnf

# 修改好 my.cnf 文件保存并退出,接着需要重启 mysql 服务
service mysql restart

# 以防万一你可以重新进入 mysql 数据库,查看端口是否更改过来

TIP:自定义的端口,如果服务器没有开通此端口,需要在服务器管理后台开通此端口号,要不然是无法访问的,且最好关闭之前的默认端口 3306!
4、预备数据库服务器
为了安全正式环境应该把数据库单独放一台服务器,只允许让应用服务器 IP 来访问数据库服务器,通过独立两者,就算此中一台发生问题,另一台也是好的,进一步降低了危险性。
5、定时备份数据库
开发定时备份功能,可以使用 Crontab,或者其他框架,设定周期备份数据,哪怕是数据丢失或被删除也可以快速恢复。
后记

以上就是 【网络安全】浅谈数据库攻击复现及相关安全优化 的全部内容了,由友友数据库被黑变乱引出了被黑缘故原由分析,场景复现,以及安全优化,盼望各人有所劳绩!
学习网络安全技术的方法无非三种:
第一种是报网络安全专业,现在叫网络空间安全专业,重要专业课程:程序计划、计算机构成原理原理、数据布局、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。
第二种是自学,就是在网上找资源、找教程,或者是想办法认识一-些大佬,抱紧大腿,不过这种方法很耗时间,而且学习没有规划,大概很长一段时间感觉自己没有进步,容易劝退。
第三种就是去培训。
https://img-blog.csdnimg.cn/img_convert/58bec76876e81d23709a090231e9e0bf.png
接下来,我会教你零基础入门快速入门上手网络安全。
网络安全入门到底是先学编程照旧先学计算机基础?这是一个争议比力大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常紧张。但是对于完全零基础的人来说又或者急于转行的人来说,学习编程或者计算机基础对他们来说都有肯定的难度,并且花费时间太长。
第一阶段:基础预备 4周~6周

这个阶段是全部预备进入安全行业必学的部分,俗话说:基础不劳,地动山摇
https://img-blog.csdnimg.cn/img_convert/44dd65e103a3ce90b8500717e19b108d.png
第二阶段:web渗透

学习基础 时间:1周 ~ 2周:
① 了解根本概念:(SQL注入、XSS、上传、CSRF、一句话木马、等)为之后的WEB渗透测试打下基础。
② 检察一些论坛的一些Web渗透,学一学案例的思路,每一个站点都不一样,以是思路是重要的。
③ 学会提问的艺术,如果碰到不懂得要善于提问。
https://img-blog.csdnimg.cn/img_convert/442b7a338582713846cc447ecff221bd.png
配置渗透环境 时间:3周 ~ 4周:
① 了解渗透测试常用的工具,比方(AWVS、SQLMAP、NMAP、BURP、中国菜刀等)。
② 下载这些工具无后门版本并且安装到计算机上。
③ 了解这些工具的使用场景,懂得根本的使用,推荐在Google上查找。
渗透实战操作 时间:约6周:

① 在网上搜索渗透实战案例,深入了解SQL注入、文件上传、剖析毛病等在实战中的使用。
② 自己搭建毛病环境测试,推荐DWVA,SQLi-labs,Upload-labs,bWAPP。
③ 懂得渗透测试的阶段,每一个阶段需要做那些动作:比方PTES渗透测试实行标准。
④ 深入研究手工SQL注入,寻找绕过waf的方法,制作自己的脚本。
⑤ 研究文件上传的原理,怎样举行截断、双重后缀欺骗(IIS、PHP)、剖析毛病利用(IIS、Nignix、Apache)等,参照:上传攻击框架。
⑥ 了解XSS形成原理和种类,在DWVA中举行实践,使用一个含有XSS毛病的cms,安装安全狗等举行测试。
⑦ 了解一句话木马,并尝试编写过狗一句话。
⑧ 研究在Windows和Linux下的提升权限,Google关键词:提权
https://img-blog.csdnimg.cn/img_convert/820f500673a4a0a2432e6c3d7e2ba80e.png
以上就是入门阶段
第三阶段:进阶

已经入门并且找到工作之后又该怎么进阶?详情看下图
https://img-blog.csdnimg.cn/img_convert/b28d31c9a3414e91ec46eb307d360eab.png
给新手小白的入门建议:
新手入门学习最好照旧从视频入手举行学习,视频的浅显易懂相比起艰涩的文字而言更容易吸收,这里我给各人预备了一套网络安全从入门到精通的视频学习资料包免费领取哦!
https://i-blog.csdnimg.cn/direct/7380faa4da494cb9ad3e58431e81f478.jpeg
https://img-blog.csdnimg.cn/3e9a39bf040d46da93e80689b407bb25.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【网络安全】浅谈数据库攻击复现及相关安全优化