数据库基础与SQL注入攻防网安学习总结
一、数据库基础:网安的“数据仓库”认知
数据库是存储海量、可共享、有组织数据的“超级仓库”,对比Excel,它支持上亿条数据存储、多人同时操作且数据不混乱,是各类系统的核心数据载体,也是黑客攻击的主要目标。
-
核心层级(类比学校好理解)
- 顶层:数据库(整个学校),如
school库,存校园所有数据; - 中层:数据表(学校不同部门),如
users表存账号密码、classes表存班级信息; - 底层:字段+数据(表格表头+行内容),如字段
id/name,对应数据2025001/张三。
- 顶层:数据库(整个学校),如
-
数据库管家:DBMS
数据库管理系统负责管理数据访问和存储规则,常见类型:
MySQL(重点):开源免费、轻巧,校园系统/网站主流,网安实战中最常接触;Oracle:功能强、收费,银行/电信等大型企业用;SQL Server:适配Windows,政府单位常用。
-
基础操作:连接+建库建表
- 连接方式:可视化工具
Navicat(填localhost/3306/root+密码,测试连接即可)、命令行(mysql -u root -p输密码登录); - 建库建表:可通过
Navicat可视化操作,也可命令行执行SQL语句(如创建school库、users表,表需设置主键、非空等约束,避免数据混乱)。
- 连接方式:可视化工具
-
核心操作:SQL的CRUD(与数据库沟通的基础)
SQL是操作数据库的“专属话术”,也是SQL注入的核心工具,四大核心操作是基础:
- 增(Create) :
INSERT INTO,按字段顺序填数据,可批量新增; - 改(Update) :
UPDATE 表 SET 字段=新值 WHERE 条件,漏写WHERE会修改全表数据; - 删(Delete) :
DELETE FROM 表 WHERE 条件,漏写WHERE会清空全表,数据难恢复; - 查(Read) :
SELECT,黑客偷数据的核心,支持条件查询、模糊查询(LIKE + %)、排序查询、联合查询(UNION,SQL注入核心),*代表查询所有字段,会泄露全部敏感数据。
二、SQL注入漏洞:网安核心攻击手段,原理+实战全拆解
SQL注入是最常见、最致命的网络漏洞之一,常导致用户账号密码泄露、系统被篡改,甚至整库数据被盗,核心根源是代码直接将用户输入拼接进SQL语句,未过滤特殊字符。
1. 最基础攻击:万能密码绕过登录
(1)漏洞根源
网站后端代码(如PHP)接收用户输入的账号/密码后,直接拼接到SQL查询语句中,示例:
$sql = "SELECT * FROM users WHERE name='$name' AND password='$pwd'";
未对用户输入的'、OR等特殊字符做过滤,黑客可篡改查询逻辑。
(2)攻击原理
在密码框输入恶意代码123' or '1'='1,实现三个关键操作:
- 用单引号
'闭合原有SQL语句的单引号,打破查询限制; - 添加
'1'='1'恒成立条件,让WHERE查询条件永远为真; - 最终篡改后的SQL会返回数据库中所有用户信息,网站判定“登录成功”,实现免密绕过。
(3)攻击结果
无需正确账号密码,即可登录系统,且会获取第一个用户的全部信息(身份证、手机号、密码等)。
2. 进阶攻击:联合查询(UNION SELECT)窃取敏感数据
万能密码仅能绕过登录,联合查询可直接窃取数据库中前端未展示的隐藏敏感数据(如所有用户的密码、身份证),是黑客的核心实战手段,前提是前后查询的字段数、字段类型一致,分四步操作:
第一步:用order by判断目标表的最大字段数
- 原理:
order by N表示按表中第N个字段排序,N超过最大字段数则数据库报错; - 实战:从1开始递增测试(如
id=1 order by 6正常,order by7报错),则表有6个字段,后续联合查询需拼接6个字段。
第二步:用union select找“回显位”
- 准备:将查询条件改为不存在的值(如
id=-1),让原查询结果为空,避免覆盖联合查询结果; - 实战:输入
id=-1 union select 1,2,3,4,5,6,页面显示的数字(如2)就是回显位——前端展示数据的窗口,后续敏感数据需放在回显位才会显示。
第三步:信息收集(库→表→字段,层层突破)
依赖MySQL系统库information_schema(存储所有数据库的元数据,是渗透测试关键),通过拼接查询语句,依次获取目标信息:
- 查当前数据库名:
union select 1,database(),3,4,5,6; - 查数据库中的表名:
union select 1,table_name,3,4,5,6 from information_schema.tables where table_schema='school'; - 查表中的字段名:
union select 1,column_name,3,4,5,6 from information_schema.columns where table_schema='school' and table_name='users'。
第四步:窃取敏感数据
用CONCAT_WS(分隔符, 字段1,字段2,...)函数拼接多个敏感字段(如id、name、密码、身份证),在单个回显位展示,实战语句:
union select 1,CONCAT_WS('·',id,name,password,id_card,phone),3,4,5,6 from school.users
最终页面会直接显示拼接后的所有敏感数据,实现数据窃取。
三、数据库安全加固:网安防御核心,建立三道防线
针对SQL注入及数据库攻击,需从源头过滤、权限管控、数据兜底三个维度加固,形成完整的安全防御体系,也是网安工作中数据库防护的核心要求。
第一道防线:源头拦截,避免SQL注入
核心是禁止直接将用户输入拼接进SQL语句,过滤用户输入的特殊字符(如'、OR、#),对输入做转义处理,从根源杜绝恶意代码篡改SQL逻辑(如PHP中使用预处理语句,而非直接拼接)。
第二道防线:权限管控,遵循“最小权限原则”
核心是给应用程序/用户分配“刚好够用”的权限,避免过度授权导致攻击危害扩大,是数据库安全的核心原则:
- 不使用
root等超级管理员账号运行网站/应用程序,防止权限滥用; - 为应用创建独立的低权限账号,仅赋予必要操作权限(如仅允许对
school库做查询、新增、修改,不赋予删除、建表权限); - 加固
root账号:设置强密码(大小写+数字+特殊符号)、限制登录IP(仅内网可登录),防止超级账号被盗。
实操SQL示例
-- 创建独立低权限用户
CREATE user 'appuser'@'localhost' IDENTIFIED BY 'WebPass@123';
-- 分配最小权限
GRANT SELECT, INSERT, UPDATE ON school.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES; -- 刷新权限生效
第三道防线:日志审计+数据备份,兜底数据安全
即使被攻击,也能通过日志溯源攻击路径,通过备份恢复数据,是最后一道不可突破的防线。
-
开启审计日志,实现攻击溯源
- 开启MySQL通用日志:
set global general_log=on;; - 查看日志位置:
show variables like 'general_log_file';; - 作用:记录所有SQL操作,攻击后可分析黑客的操作路径、攻击手段,为溯源和追责提供证据。
- 开启MySQL通用日志:
-
数据备份,遵循行业通用的“3-2-1原则”
核心是防止数据丢失,即使数据库被篡改/清空,也能快速恢复:
- 3份备份:原始数据 + 至少2份副本;
- 2种介质:使用不同存储介质,如本地硬盘+云存储;
- 1份离线:至少1份备份离线存放(如移动硬盘),防止被远程删除。
备份&恢复实操
| 方式 | 备份操作(Navicat/命令行) | 恢复操作(Navicat/命令行) |
|---|---|---|
| Navicat | 右键数据库→转储SQL文件→选择“结构和数据” | 新建空库→右键→运行SQL文件→选中备份文件 |
| 命令行 | mysqldump -u root -p school > backup.sql | mysql -u root -p school < backup.sql |
四、核心网安知识点总结
- 数据库是各类系统的核心数据载体,MySQL是网安实战中最常接触的数据库,掌握其基础操作是攻防的前提;
- SQL注入的核心是 “未过滤的用户输入直接拼接SQL语句” ,万能密码实现登录绕过,联合查询实现敏感数据窃取,
information_schema是渗透关键; - 数据库安全防御遵循 “源头拦截+权限管控+数据兜底” ,最小权限原则是权限管控核心,3-2-1原则是数据备份的行业标准;
- 网安视角下,操作数据库的核心禁忌:
UPDATE/DELETE操作漏写WHERE条件、用超级管理员账号运行应用、直接拼接用户输入到SQL语句。