1.初步了解数据库
数据库是存储、组织和管理数据的系统,可以将其当成一个电子化的文件柜或图书馆,用于高效地存储、检索和管理大量信息。
1.核心概念:
结构化存储:数据以表格、文档等形式存放,而非随意堆放。
高效管理:通过数据库管理系统(DBMS,如MySQL、Oracle、MongoDB)实现数据的增删改查。
数据关联:支持建立数据间的关系(如订单与客户关联)
2.类型
关系型数据库 数据以表格形式存储,通过SQL操作,强调数据一致性(如MySQL、PostgreSQL) 银行交易、企业管理系统
非关系型数据库 灵活存储文档、键值对等,适合海量非结构化数据(如MongoDB、Redis) 社交网络、物联网数据
时序数据库 专为时间序列数据优化(如InfluxDB) 监控系统、传感器数据
3.为什么需要数据库
替代文件存储:避免手动处理Excel或文本文件的繁琐与错误。
处理大规模数据:支持百万级数据的高效查询。
保证数据完整性:如禁止重复学号等规则。
支持复杂应用:电商、社交平台等都依赖数据库后台。
2.初步了解sql注入漏洞
SQL注入是一种通过恶意SQL代码操纵后端数据库的攻击方式,是Web安全中最常见且危险的漏洞之一。
1.攻击原理
核心问题:将用户输入直接拼接到SQL查询中,未进行过滤或转义。
如登录账号,攻击者不需要密码即可登录
2.攻击类型
经典注入 通过单引号闭合语句 ' OR '1'='1
联合查询注入 使用 UNION 获取其他表数据 ' UNION SELECT username, password FROM users --
盲注 无显式错误,通过页面差异判断 ' AND 1=1 -- (正常) vs ' AND 1=2 -- (异常)
时间盲注 通过延时判断条件真假 ' AND IF(1=1, SLEEP(5), 0) --
堆叠查询 执行多条SQL语句(如MySQL) '; DROP TABLE users; --
二阶注入 数据先被存储,后触发 注册用户名 admin'-- ,后续操作时触发
3.练习sql语句
1.安装navicat
通过此教程进行下载
Navicat Premium 16 保姆级手把手 安装教程包含下载、安装、授权(附安装包)-优快云博客


2.练习
点击连接打开mysql
这里采用某一练习进行练手,将以下全部复制
-- 创建数据库(如果不存在)
CREATE DATABASE IF NOT EXISTS student_grade_db;
USE student_grade_db;
-- 创建课程表(5门课,覆盖常见科目)
CREATE TABLE courses (
id INT AUTO_INCREMENT PRIMARY KEY,
course_name VARCHAR(50) NOT NULL
);
-- 创建学生表(30个真实感名字+班级+年龄)
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT NOT NULL,
gender VARCHAR(10) NOT NULL,
class VARCHAR(20) NOT NULL
);
-- 创建成绩表(关联学生和课程,150条数据)
CREATE TABLE scores (
id INT AUTO_INCREMENT PRIMARY KEY,
student_id INT NOT NULL,
course_id INT NOT NULL,
score DECIMAL(5,2) NOT NULL,
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
);
-- 插入课程数据(5门课,基础科目全齐)
INSERT INTO courses (course_name) VALUES
('Mathematics'),
('Chinese'),
('English'),
('Physics'),
('Chemistry');
-- 插入30个学生数据(名字/年龄/性别/班级随机分配,真实不塑料!)
INSERT INTO students (name, age, gender, class) VALUES
('张明', 19, 'Male', 'Computer Science 1'),
('李华', 20, 'Female', 'Computer Science 2'),
('王芳', 18, 'Female', 'IT Engineering 1'),
('刘伟', 21, 'Male', 'Computer Science 1'),
('陈静', 19, 'Female', 'IT Engineering 2'),
('杨洋', 20, 'Male', 'Computer Science 2'),
('黄丽', 19, 'Female', 'Computer Science 1'),
('周强', 22, 'Male', 'IT Engineering 1'),
('吴敏', 20, 'Female', 'Computer Science 2'),
('徐娜', 18, 'Female', 'IT Engineering 2'),
('孙浩', 20, 'Male', 'Computer Science 1'),
('马超', 21, 'Male', 'Computer Science 2'),
('朱婷', 19, 'Female', 'IT Engineering 1'),
('胡杰', 20, 'Male', 'IT Engineering 2'),
('林雪', 18, 'Female', 'Computer Science 1'),
('何亮', 22, 'Male', 'Computer Science 2'),
('高峰', 19, 'Male', 'IT Engineering 1'),
('郭静', 20, 'Female', 'IT Engineering 2'),
('韩梅', 19, 'Female', 'Computer Science 1'),
('谢敏', 20, 'Female', 'Computer Science 2'),
('邓伟', 21, 'Male', 'IT Engineering 1'),
('冯丽', 18, 'Female', 'IT Engineering 2'),
('曾强', 20, 'Male', 'Computer Science 1'),
('彭华', 19, 'Female', 'Computer Science 2'),
('颜强', 21, 'Male', 'IT Engineering 1'),
('潘丽', 20, 'Female', 'IT Engineering 2'),
('杜明', 22, 'Male', 'Computer Science 1'),
('丁芳', 19, 'Female', 'Computer Science 2'),
('董强', 20, 'Male', 'IT Engineering 1'),
('赵敏', 21, 'Female', 'IT Engineering 2');
-- 插入150条成绩数据(每学生5门课,分数有高有低,真实到能编故事!)
-- 重点:覆盖增删改查所有场景(比如查“物理不及格的”、按分数排序等)
INSERT INTO scores (student_id, course_id, score) VALUES
(1,1,85.5), (1,2,90.0), (1,3,78.5), (1,4,82.0), (1,5,88.5), -- 张明(学霸型)
(2,1,76.0), (2,2,85.0), (2,3,82.0), (2,4,79.5), (2,5,81.0), -- 李华(中等偏上)
(3,1,65.0), (3,2,70.0), (3,3,68.0), (3,4,62.0), (3,5,67.0), -- 王芳(挂科预警!)
(4,1,92.0), (4,2,88.0), (4,3,85.0), (4,4,90.0), (4,5,89.0), -- 刘伟(卷王)
(5,1,72.5), (5,2,75.0), (5,3,78.0), (5,4,74.5), (5,5,76.0), -- 陈静(稳如老狗)
(6,1,80.0), (6,2,84.0), (6,3,83.0), (6,4,81.0), (6,5,82.5), -- 杨洋(进步中)
(7,1,77.5), (7,2,81.0), (7,3,79.5), (7,4,76.0), (7,5,78.5), -- 黄丽(小透明)
(8,1,88.0), (8,2,92.0), (8,3,89.0), (8,4,91.0), (8,5,90.0), -- 周强(大佬)
(9,1,74.0), (9,2,78.0), (9,3,76.5), (9,4,73.0), (9,5,75.0), -- 吴敏(努力型)
(10,1,68.0), (10,2,72.0), (10,3,70.0), (10,4,65.0), (10,5,69.0), -- 徐娜(差点挂科)
(11,1,83.0), (11,2,86.0), (11,3,84.0), (11,4,82.0), (11,5,85.0), -- 孙浩(中上)
(12,1,79.0), (12,2,82.0), (12,3,80.0), (12,4,78.5), (12,5,81.0), -- 马超(稳)
(13,1,71.5), (13,2,74.0), (13,3,72.5), (13,4,70.0), (13,5,73.0), -- 朱婷(小进步)
(14,1,81.0), (14,2,83.0), (14,3,82.5), (14,4,80.0), (14,5,84.0), -- 胡杰(卷中卷)
(15,1,69.5), (15,2,73.0), (15,3,71.0), (15,4,67.5), (15,5,70.5), -- 林雪(差点挂科)
(16,1,90.0), (16,2,93.0), (16,3,91.0), (16,4,92.0), (16,5,94.0), -- 何亮(天花板)
(17,1,75.0), (17,2,77.0), (17,3,76.0), (17,4,74.0), (17,5,78.0), -- 高峰(中等)
(18,1,82.0), (18,2,85.0), (18,3,83.0), (18,4,81.5), (18,5,84.5), -- 郭静(优秀)
(19,1,78.0), (19,2,80.0), (19,3,79.0), (19,4,77.0), (19,5,81.0), -- 韩梅(小能手)
(20,1,84.5), (20,2,87.0), (20,3,86.0), (20,4,85.0), (20,5,88.0), -- 谢敏(学霸)
(21,1,67.0), (21,2,71.0), (21,3,69.0), (21,4,65.0), (21,5,68.0), -- 邓伟(危险边缘)
(22,1,73.0), (22,2,76.0), (22,3,74.0), (22,4,72.0), (22,5,75.0), -- 冯丽(稳)
(23,1,86.0), (23,2,89.0), (23,3,87.0), (23,4,85.0), (23,5,88.0), -- 曾强(卷王)
(24,1,77.5), (24,2,80.0), (24,3,78.5), (24,4,76.5), (24,5,79.5), -- 彭华(中等偏上)
(25,1,89.0), (25,2,91.0), (25,3,88.5), (25,4,90.0), (25,5,92.0), -- 颜强(大佬)
(26,1,74.5), (26,2,77.5), (26,3,75.0), (26,4,73.5), (26,5,76.5), -- 潘丽(小进步)
(27,1,92.5), (27,2,95.0), (27,3,93.0), (27,4,94.0), (27,5,96.0), -- 杜明(天花板2号)
(28,1,80.5), (28,2,83.5), (28,3,82.0), (28,4,81.0), (28,5,84.0), -- 丁芳(优秀)
(29,1,76.0), (29,2,79.0), (29,3,77.5), (29,4,75.0), (29,5,78.0), -- 董强(中等)
(30,1,83.0), (30,2,86.0), (30,3,84.5), (30,4,82.5), (30,5,85.5); -- 赵敏(稳如老狗)
新建连接后右击点击新建查询,点击运行。

1.比如查询19岁的姓名
输入SELECT name FROM students WHERE age = 19;结果如图

2.查出班级是"Computer Science 1" 的学生姓名。
SELECT name FROM students WHERE class = 'Computer Science 1';

3.按年龄从小到大排,只看前3名。
SELECT name, age FROM students ORDER BY age ASC LIMIT 3;

4.以李开头
SELECT name FROM students WHERE name LIKE '李%';

5.查出女生且年龄小于20岁的学生姓名
SELECT name FROM students WHERE gender = 'Female' AND age < 20;

6.查出英语成绩(course_id=3)高于90分的学生姓名。
SELECT s.name
FROM students s
JOIN scores sc ON s.id = sc.student_id
WHERE sc.course_id = 3 AND sc.score > 90;

PS:靶场在我最早的文章中有教程大家可以看一看
26万+

被折叠的 条评论
为什么被折叠?



