数据库 — CTF 前置技能

SQL 注入是 Web CTF 最常见的题型,在学注入之前需要掌握基本的数据库操作和 SQL 语法。

本知识库中的数据库正式讲解

基础概念速查

概念说明示例
数据库(Database)存放数据的容器mysql> SHOW DATABASES;
表(Table)数据按行列组织SELECT * FROM users;
字段(Column)表的一列usernamepassword
查询(Query)从表中获取数据SELECT column FROM table;
条件(WHERE)过滤查询结果WHERE id = 1
联合查询(UNION)合并多个查询结果UNION SELECT 1,2,3
注释SQL 注释符号--#/**/
INFORMATION_SCHEMAMySQL 自带的元数据库查表名、列名

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 语法的利用。在学注入之前:

  1. 先理解 SQL 语法SELECTFROMWHEREUNION
  2. 理解注释的作用:闭合后续 SQL 语句的关键
  3. 理解 INFORMATION_SCHEMA:注入中获取表名/列名的信息来源
  4. 终端操作
# 连接 MySQL
mysql -h 主机 -u 用户名 -p
 
# 终端执行 SQL
mysql -u root -p -e "SELECT * FROM users"

关联教程

此文件夹下有0条笔记。