sqlmap中–technique和–dbms参数的含义是什么
好的,这是对 sqlmap 中 --technique 和 --dbms 参数的详细介绍。
1. --technique 参数
含义: 用于指定 SQL 注入测试所使用的技术类型。
默认情况下,sqlmap 会尝试所有支持的注入技术。使用此参数可以精确指定一种或多种技术,从而:
- 提高测试效率:只测试指定的技术,避免不必要的请求。
- 绕过特定防御:如果目标对某种技术有防护(如过滤了
UNION),可以尝试其他技术。 - 用于特殊情况:某些场景下只有特定技术有效。
技术类型及说明:
--technique 后跟一个由单个字母组成的字符串,每个字母代表一种注入技术:
-
B: Boolean-based blind (布尔盲注)
- 原理:通过向数据库发送可以返回“真”或“假”结果的 SQL 语句,并根据页面反应的差异(如内容变化、HTTP 状态码、响应时间)来逐位推断数据。
- 适用场景:页面没有显式错误信息,但真/假条件会导致可观测的差异。速度较慢,但非常通用。
-
E: Error-based (报错注入)
- 原理:精心构造 SQL 语句,触发数据库报错,并使错误信息中直接包含我们想要查询的数据(如
select 1/0,extractvalue(1, concat(0x7e, (select user()))))。 - 适用场景:目标网站将数据库错误信息直接回显在页面上。这是最快的注入方式之一。
- 原理:精心构造 SQL 语句,触发数据库报错,并使错误信息中直接包含我们想要查询的数据(如
-
U: UNION query (联合查询注入)
- 原理:利用
UNION或UNION ALL操作符,将恶意查询的结果与原始查询结果合并,并直接显示在页面中。 - 适用场景:注入点位于
SELECT语句中,并且结果会直接显示在页面上。需要字段数、数据类型匹配。
- 原理:利用
-
S: Stacked queries (堆叠查询注入)
- 原理:利用数据库支持多语句执行的特性(如
;),在原始查询后追加执行新的 SQL 语句(如...; DROP TABLE users;)。 - 适用场景:需要执行非查询操作(如插入、更新、删除数据,或执行存储过程)。并非所有数据库或环境都支持。
- 原理:利用数据库支持多语句执行的特性(如
-
T: Time-based blind (时间盲注)
- 原理:通过向数据库发送包含延时函数(如
SLEEP(5),BENCHMARK())的 SQL 语句,根据页面响应时间是否延长来判断条件真假。 - 适用场景:页面无论输入什么,返回的响应在内容、错误上都完全没有差异。这是最慢的注入方式。
- 原理:通过向数据库发送包含延时函数(如
-
Q: Inline queries (内联查询注入)
- 原理:一种特殊的注入形式,通常指将查询嵌入到原始查询的某个子句中,与普通注入区别不大。
sqlmap中较少显式区分此类型。
- 原理:一种特殊的注入形式,通常指将查询嵌入到原始查询的某个子句中,与普通注入区别不大。
使用示例:
sqlmap -u “http://target.com/page?id=1” --technique BE:仅使用布尔盲注和报错注入进行测试。sqlmap -u “http://target.com/page?id=1” --technique U:只尝试联合查询注入。sqlmap -u “http://target.com/page?id=1” --technique BT:针对无错误回显的目标,使用布尔和时间盲注。
2. --dbms 参数
含义: 强制指定后端数据库管理系统(DBMS)的类型。
默认情况下,sqlmap 会自动进行指纹识别,探测目标使用的是 MySQL、Oracle、PostgreSQL 还是其他数据库。使用此参数可以:
- 跳过指纹识别:直接开始针对指定数据库的注入测试,节省初始探测时间。
- 提高测试精度:使用针对该数据库特有的语法、函数和系统表进行注入,提升成功率。
- 减少请求流量:避免发送其他数据库的探测载荷,使测试过程更隐蔽。
支持的常见数据库值:
MySQLOraclePostgreSQLMicrosoft SQL Server(或MSSQL)SQLiteDB2FirebirdMicrosoft Access等。
使用示例:
sqlmap -u “http://target.com/page?id=1” --dbms MySQL:告诉 sqlmap 目标是 MySQL 数据库,它将直接使用version()、information_schema、CONCAT()等 MySQL 特有的语法进行测试。sqlmap -u “http://target.com/page?id=1” --dbms PostgreSQL:指定目标为 PostgreSQL,将使用pg_catalog、current_user、CHR()等语法。sqlmap -u “http://target.com/page?id=1” --dbms “Microsoft SQL Server”:指定目标为 MS SQL Server,将使用@@version、sysobjects、WAITFOR DELAY等语法。
参数组合使用
这两个参数经常组合使用,以进行最快速、最精确的注入测试。
典型工作流示例:
- 通过初步观察或简单测试,猜测目标可能使用 MySQL 数据库,并且页面有错误回显。
- 使用命令:
sqlmap -u "http://target.com/vuln.php?id=1" --technique E --dbms MySQL--technique E:直接使用最快的“报错注入”技术。--dbms MySQL:直接使用 MySQL 的报错函数(如updatexml,extractvalue)进行注入。
- 这样
sqlmap会跳过所有其他技术和数据库的探测,直接用最有效的方式发起攻击,极大提高效率。
所有内容均由人工智能模型生成,其生成内容的准确性和完整性无法保证,不代表我们的态度或观点。
评论 (0)