数据库 — CTF 前置技能
SQL 注入是 Web CTF 最常见的题型,在学注入之前需要掌握基本的数据库操作和 SQL 语法。
本知识库中的数据库正式讲解
- 08-数据库基础 — MySQL、SQL 语言、数据库设计的完整讲解
- 04-SQL注入攻击 — SQL 注入从入门到进阶实战
- SQL 注入专题 — 整数型/字符型/报错注入/布尔盲注/时间盲注系统教学
- MySQL 注入进阶 — Cookie/UA/Referer/二次注入/过滤绕过/UPDATE 注入
基础概念速查
| 概念 | 说明 | 示例 |
|---|---|---|
| 数据库(Database) | 存放数据的容器 | mysql> SHOW DATABASES; |
| 表(Table) | 数据按行列组织 | SELECT * FROM users; |
| 字段(Column) | 表的一列 | username、password |
| 查询(Query) | 从表中获取数据 | SELECT column FROM table; |
| 条件(WHERE) | 过滤查询结果 | WHERE id = 1 |
| 联合查询(UNION) | 合并多个查询结果 | UNION SELECT 1,2,3 |
| 注释 | SQL 注释符号 | --、#、/**/ |
| INFORMATION_SCHEMA | MySQL 自带的元数据库 | 查表名、列名 |
MySQL 常见操作
-- 查看所有数据库
SHOW DATABASES;
-- 选择数据库
USE 数据库名;
-- 查看所有表
SHOW TABLES;
-- 查看表结构
DESC 表名;
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='表名';
-- 查询数据
SELECT * FROM 表名;
SELECT username, password FROM users WHERE id = 1;
-- 联合查询
SELECT id FROM users UNION SELECT 1;
SELECT id FROM users UNION SELECT 1, 2, 3;
-- 字符串拼接
SELECT CONCAT('a', 'b'); -- MySQL
SELECT 'a' || 'b'; -- SQLite/Oracle
-- 注释
SELECT 1; -- 这是注释
SELECT 1; # 这也是注释
SELECT /* 注释 */ 1;CTF 中数据库基础与 SQL 注入的联系
SQL 注入的本质是对 SQL 语法的利用。在学注入之前:
- 先理解 SQL 语法:
SELECT、FROM、WHERE、UNION等 - 理解注释的作用:闭合后续 SQL 语句的关键
- 理解 INFORMATION_SCHEMA:注入中获取表名/列名的信息来源
- 终端操作:
# 连接 MySQL
mysql -h 主机 -u 用户名 -p
# 终端执行 SQL
mysql -u root -p -e "SELECT * FROM users"关联教程
- HTTP 协议总览 — Web 前置技能中的 HTTP 考点
- 04-SQL注入攻击 — SQL 注入实战
- 08-数据库基础 — 数据库原理深度讲解
- Web 方向总览 — Web 方向 CTF 题型与思路总览